rx: Remove RX_CALL_BUSY
[openafs.git] / src / WINNT / install / loopback / wmi.cpp
index 813c298..baf0099 100644 (file)
@@ -45,6 +45,11 @@ SOFTWARE.
 
 #include <devguid.h>
 
+/* __RPC__out is not defined in the v6.0 Windows SDK */
+#ifndef __RPC__out
+#define __RPC__out
+#endif
+
 /* These two are from the Windows DDK */
 #include <netcfgx.h>
 #include <netcfgn.h>
@@ -143,7 +148,7 @@ FindNetworkAdapterConfigurationInstanceByGUID(
         CLEANUP_ON_FAILURE(hr);
 
         bFound = !wcscmp(adapter_guid, V_BSTR(&Value));
-        
+
         if (bFound)
         {
             ReportMessage(1,"Found adapter", NULL,V_BSTR(&Value),0);
@@ -156,11 +161,11 @@ FindNetworkAdapterConfigurationInstanceByGUID(
             CLEANUP_ON_FAILURE(hr);
 
             *pPath = SysAllocString(V_BSTR(&Value));
-            
+
         }
-        
+
         VariantClear(&Value);
-        
+
         // Release it.
         // ===========
         pObj->Release();    // Release objects not owned.
@@ -362,7 +367,7 @@ WMIEnableStatic(
         DWORD dwIndex;
         if (swscanf(InstancePath, L"Win32_NetworkAdapterConfiguration.Index=%u", &dwIndex)==1)
         {
-            DWORD ret = 0; 
+            DWORD ret = 0;
             ReportMessage(1,"Setting MAXLANA",NULL,NULL,dwIndex+1);
             ret = AdjustMaxLana(dwIndex+1);
             if (ret) ReportMessage(0,"AdjustMaxLana returned the error code ",NULL,NULL,ret);
@@ -407,15 +412,15 @@ WMIEnableStatic(
            ReportMessage(0,"Trying again in 20 seconds...",NULL,NULL,0);
            Sleep(10000);
            ReportMessage(0,"Trying again in 10 seconds...",NULL,NULL,0);
-           Sleep(5000);  
+           Sleep(5000);
            ReportMessage(0,"Trying again in  5 seconds...",NULL,NULL,0);
            Sleep(2000);
        }
-  
-        ReportMessage(0,"Calling ExecMethod EnableStatic NOW...          ",NULL,NULL,0);     
+
+        ReportMessage(0,"Calling ExecMethod EnableStatic NOW...          ",NULL,NULL,0);
        // Call the method
         hr = pNamespace->ExecMethod(InstancePath, MethodName, 0, NULL, pInInst,
-                                  &pOutInst, NULL);   
+                                  &pOutInst, NULL);
         if (!SUCCEEDED(hr))
         {
            ReportMessage(0,"ExecMethod EnableStatic failed",NULL,NULL, hr);
@@ -430,8 +435,8 @@ WMIEnableStatic(
           continue;
         }
 
-        hr = V_I4(&v_ret_value);                
-        if(hr != 0)
+        hr = V_I4(&v_ret_value);
+        if (hr != 0)
             ReportMessage(0,"EnableStatic failed ", NULL,NULL,hr);
         else
         {
@@ -478,7 +483,7 @@ WMIEnableStatic(
 
     // Call the method
     hr2 = pNamespace->ExecMethod(InstancePath, MethodName, 0, NULL, pInInst,
-                                &pOutInst, NULL);   
+                                &pOutInst, NULL);
     if (!SUCCEEDED(hr2))       {
        ReportMessage(0,"ExecMethod SetDynamicDNSRegistration failed",NULL,NULL, hr2);
        goto cleanup;
@@ -489,8 +494,8 @@ WMIEnableStatic(
     if (!SUCCEEDED(hr2)) {
        ReportMessage(0,"WARNING: Could not determine return value for SetDynamicDNSRegistration ",NULL,NULL, hr2);
     } else {
-       hr2 = V_I4(&v_ret_value);                
-       if(hr2 != 0)
+       hr2 = V_I4(&v_ret_value);
+       if (hr2 != 0)
            ReportMessage(0,"SetDynamicDNSRegistration failed ", NULL,NULL,hr2);
        else
            ReportMessage(0,"SetDynamicDNSRegistration succeeded",NULL,NULL,0);
@@ -533,7 +538,7 @@ WMIEnableStatic(
 
     // Call the method
     hr2 = pNamespace->ExecMethod(InstancePath, MethodName, 0, NULL, pInInst,
-                                &pOutInst, NULL);   
+                                &pOutInst, NULL);
     if (!SUCCEEDED(hr2)) {
        ReportMessage(0,"ExecMethod SetTcpipNetbios failed",NULL,NULL, hr2);
        goto cleanup;
@@ -544,8 +549,8 @@ WMIEnableStatic(
     if (!SUCCEEDED(hr2)) {
        ReportMessage(0,"WARNING: Could not determine return value for SetTcpipNetbios ",NULL,NULL, hr2);
     } else {
-       hr2 = V_I4(&v_ret_value);                
-       if(hr2 != 0)
+       hr2 = V_I4(&v_ret_value);
+       if (hr2 != 0)
            ReportMessage(0,"SetTcpipNetbios failed ", NULL,NULL,hr2);
        else
            ReportMessage(0,"SetTcpipNetbios succeeded",NULL,NULL,0);
@@ -580,10 +585,11 @@ WMIEnableStatic(
 
 
 /**********************************************************
-* LoopbackBindings :  unbind all other 
-*       protocols except TCP/IP, netbios, netbt. 
+* LoopbackBindings :  unbind all other
+*       protocols except TCP/IP, netbios, netbt.
 */
-extern "C" HRESULT LoopbackBindings (LPCWSTR loopback_guid)
+extern "C" HRESULT
+LoopbackBindings (LPCWSTR loopback_guid)
 {
     HRESULT                    hr = 0;
     INetCfg                    *pCfg = NULL;
@@ -596,61 +602,61 @@ extern "C" HRESULT LoopbackBindings (LPCWSTR loopback_guid)
     LPWSTR                     swName = NULL;
     GUID            g;
     wchar_t         device_guid[100];
-    
+
     ReportMessage(0,"Running LoopbackBindings()...",NULL,NULL,0);
-    
-    hr = CoInitializeEx( NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED ); 
+
+    hr = CoInitializeEx( NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED );
     CLEANUP_ON_FAILURE(hr);
-    
+
     hr = CoCreateInstance( CLSID_CNetCfg, NULL, CLSCTX_INPROC_SERVER, IID_INetCfg, (void**)&pCfg );
     CLEANUP_ON_FAILURE(hr);
-    
+
     hr = pCfg->QueryInterface( IID_INetCfgLock, (void**)&pLock );
     CLEANUP_ON_FAILURE(hr);
-    
+
     hr = pLock->AcquireWriteLock( 1000, L"AFS Configuration", NULL );
     CLEANUP_ON_FAILURE(hr);
     bLockGranted = TRUE;
-    
+
     hr = pCfg->Initialize( NULL );
     CLEANUP_ON_FAILURE(hr);
     bInitialized = TRUE;
-    
+
     hr = pCfg->EnumComponents( &GUID_DEVCLASS_NET, &pEnumComponent );
     CLEANUP_ON_FAILURE(hr);
-    
+
     while( pEnumComponent->Next( 1, &pAdapter, NULL ) == S_OK )
     {
         pAdapter->GetDisplayName( &swName );
         pAdapter->GetInstanceGuid( &g );
         StringFromGUID2(g, device_guid, 99);
-        
-        if(!wcscmp( device_guid, loopback_guid )) // found loopback adapter
+
+        if (!wcscmp( device_guid, loopback_guid )) // found loopback adapter
         {
             INetCfgComponentBindings *pBindings;
             INetCfgBindingPath *pPath;
             IEnumNetCfgBindingPath *pEnumPaths;
             INetCfgComponent *upper;
-            
+
             ReportMessage(0,"LoopbackBindings found", NULL, device_guid,0 );
-            
+
             hr = pAdapter->QueryInterface( IID_INetCfgComponentBindings, (void**) &pBindings);
-            if(hr==S_OK)
+            if (hr==S_OK)
             {
                 hr = pBindings->EnumBindingPaths( EBP_ABOVE, &pEnumPaths );
-                if(hr==S_OK)
+                if (hr==S_OK)
                 {
                     while(pEnumPaths->Next( 1, &pPath, NULL ) == S_OK)
                     {
                         pPath->GetOwner( &upper );
-                        
+
                         LPWSTR swId = NULL, swName = NULL;
-                        
+
                         upper->GetDisplayName( &swName );
                         upper->GetId( &swId );
-                        
+
                         ReportMessage(1,"Looking at ",NULL, swName, 0);
-                                                                        
+
                         {
                             ReportMessage(1,"  Moving to the end of binding order...",NULL,NULL,0);
                             INetCfgComponentBindings *pBindings2;
@@ -658,15 +664,15 @@ extern "C" HRESULT LoopbackBindings (LPCWSTR loopback_guid)
                             if (hr==S_OK)
                             {
                                 ReportMessage(1,"...",0,0,0);
-                                hr = pBindings2->MoveAfter(pPath, NULL);                                
-                                pBindings2->Release();                               
+                                hr = pBindings2->MoveAfter(pPath, NULL);
+                                pBindings2->Release();
                                 bConfigChanged=TRUE;
                             }
-                            if (hr==S_OK) ReportMessage(1,"success",0,0,0); else ReportMessage(0,"Binding change failed",0,0,hr);                                                        
-                                                                                                            
-                        }                        
-                        
-                        if ( !_wcsicmp(swId, L"ms_netbios")  || 
+                            if (hr==S_OK) ReportMessage(1,"success",0,0,0); else ReportMessage(0,"Binding change failed",0,0,hr);
+
+                        }
+
+                        if ( !_wcsicmp(swId, L"ms_netbios")  ||
                              !_wcsicmp(swId, L"ms_tcpip")    ||
                              !_wcsicmp(swId, L"ms_netbt")    ||
                              !_wcsicmp(swId, L"ms_msclient"))
@@ -678,9 +684,9 @@ extern "C" HRESULT LoopbackBindings (LPCWSTR loopback_guid)
                                 if (hr==S_OK) ReportMessage(1,"success",0,0,0); else ReportMessage(0,"Proto failed",0,0,hr);
                                 bConfigChanged=TRUE;
                             }
-                            
+
                         }
-                        else //if (!_wcsicmp(swId, L"ms_server") || (!_wcsicmp(swId, L"ms_msclient")) 
+                        else //if (!_wcsicmp(swId, L"ms_server") || (!_wcsicmp(swId, L"ms_msclient"))
                         {
                             if (pPath->IsEnabled()==S_OK)
                             {
@@ -690,10 +696,10 @@ extern "C" HRESULT LoopbackBindings (LPCWSTR loopback_guid)
                                 bConfigChanged=TRUE;
                             }
                         }
-                        
+
                         CoTaskMemFree( swName );
                         CoTaskMemFree( swId );
-                        
+
                         pPath->Release();
                     }
                     pEnumPaths->Release();
@@ -701,34 +707,35 @@ extern "C" HRESULT LoopbackBindings (LPCWSTR loopback_guid)
                 pBindings->Release();
             } // hr==S_OK for QueryInterface IID_INetCfgComponentBindings
         }
-        
+
         CoTaskMemFree( swName );
-        
+
         pAdapter->Release();
     }
-    
-    pEnumComponent->Release();    
-    
+
+    pEnumComponent->Release();
+
     hr = 0;
-    
+
 cleanup:
-    
-    if(bConfigChanged) pCfg->Apply();
-    
-    if(pAdapter) pAdapter->Release();
-    
-    if(bInitialized) pCfg->Uninitialize();
-    if(bLockGranted) pLock->ReleaseWriteLock();
-    
-    if(pLock) pLock->Release();
-    if(pCfg) pCfg->Release();
-    
+
+    if (bConfigChanged) pCfg->Apply();
+
+    if (pAdapter) pAdapter->Release();
+
+    if (bInitialized) pCfg->Uninitialize();
+    if (bLockGranted) pLock->ReleaseWriteLock();
+
+    if (pLock) pLock->Release();
+    if (pCfg) pCfg->Release();
+
     if (hr) ReportMessage(0,"LoopbackBindings() is returning ",0,0,hr);
     return hr;
 }
 
-        
-extern "C" DWORD SetIpAddress(LPCWSTR guid, LPCWSTR ip, LPCWSTR mask)
+
+extern "C"
+DWORD SetIpAddress(LPCWSTR guid, LPCWSTR ip, LPCWSTR mask)
 {
     ReportMessage(0,"Running SetIpAddress()...",0,0,0);
     HRESULT hr = 0;
@@ -741,7 +748,8 @@ extern "C" DWORD SetIpAddress(LPCWSTR guid, LPCWSTR ip, LPCWSTR mask)
 }
 
 /* Set MAXLANA in the registry to the specified value, unless the existing registry value is larger */
-DWORD AdjustMaxLana(DWORD dwMaxLana)
+static DWORD
+AdjustMaxLana(DWORD dwMaxLana)
 {
 
     LONG ret = 0;
@@ -750,15 +758,15 @@ DWORD AdjustMaxLana(DWORD dwMaxLana)
 
     ReportMessage(0,"Making sure MaxLana is large enough",0,0, dwMaxLana);
 
-    ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Services\\NetBIOS\\Parameters"), 
+    ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Services\\NetBIOS\\Parameters"),
         0, KEY_ALL_ACCESS , &hNetBiosParamKey);
     if (ret) return ret;
 
 
-    
+
     dwSize = 4;
     ret = RegQueryValueEx(hNetBiosParamKey, _T("MaxLana"), 0, &dwType, (LPBYTE) &dwExistingMaxLana, &dwSize);
-    if ((ret) && (ret != ERROR_MORE_DATA) && (ret != ERROR_FILE_NOT_FOUND)) 
+    if ((ret) && (ret != ERROR_MORE_DATA) && (ret != ERROR_FILE_NOT_FOUND))
     {
         RegCloseKey(hNetBiosParamKey);
         return ret;
@@ -768,15 +776,15 @@ DWORD AdjustMaxLana(DWORD dwMaxLana)
 
     ReportMessage (1,"MaxLana is currently",0,0, dwExistingMaxLana);
 
-    if (dwExistingMaxLana < dwMaxLana) 
+    if (dwExistingMaxLana < dwMaxLana)
     {
         ReportMessage (1,"Changing MaxLana", 0,0,dwMaxLana);
         ret = RegSetValueEx(hNetBiosParamKey, _T("MaxLana"), 0, REG_DWORD, (const BYTE*)&dwMaxLana, 4);
-        if (ret) 
+        if (ret)
         {
             RegCloseKey(hNetBiosParamKey);
             return ret;
-        }       
+        }
 
     }
 
@@ -786,137 +794,142 @@ DWORD AdjustMaxLana(DWORD dwMaxLana)
 
 }
 
-extern "C" 
+extern "C"
 BOOL UpdateHostsFile( LPCWSTR swName, LPCWSTR swIp, LPCSTR szFilename, BOOL bPre )
 {
     char szIp[2048], szName[2048];
     char etcPath[MAX_PATH];
-       char tempPath[MAX_PATH];
-       char buffer[2048], temp[2048];
-       char *str;
-       HRESULT rv;
-       DWORD fa,len;
-       FILE *hFile, *hTemp;
-       
+    char tempPath[MAX_PATH];
+    char buffer[2048], temp[2048];
+    char *str;
+    HRESULT rv;
+    DWORD fa,len;
+    FILE *hFile, *hTemp;
+    size_t nameLen;
+
     _snprintf(szIp, 2047, "%S", swIp);
     _snprintf(szName, 2047, "%S", swName);
     strupr(szName);
+    nameLen = strlen(szName);
     ReportMessage(0,"Starting UpdateHostsFile() on file",szFilename,0,0);
 
-       rv = SHGetFolderPathA( NULL, CSIDL_SYSTEM, NULL, SHGFP_TYPE_CURRENT , etcPath );
-       if(rv != S_OK) return FALSE;
+    rv = SHGetFolderPathA( NULL, CSIDL_SYSTEM, NULL, SHGFP_TYPE_CURRENT, etcPath );
+    if (rv != S_OK)
+        return FALSE;
 
-       strcat( etcPath, ETCDIR );
+    strcat( etcPath, ETCDIR );
 
-       fa = GetFileAttributesA( etcPath );
+    fa = GetFileAttributesA( etcPath );
 
-       if(fa == INVALID_FILE_ATTRIBUTES)
-       {
-               // the directory doesn't exist
-               // it should be there. non-existence implies more things are wrong
-               ReportMessage(0, "Path does not exist ", etcPath,0,0 );
-               return FALSE;
-       }
+    if (fa == INVALID_FILE_ATTRIBUTES)
+    {
+        // the directory doesn't exist
+        // it should be there. non-existence implies more things are wrong
+        ReportMessage(0, "Path does not exist ", etcPath,0,0 );
+        return FALSE;
+    }
 
-       strcpy( tempPath, etcPath );
-       strcat( etcPath, "\\" );
-       strcat( etcPath, szFilename );
+    strcpy( tempPath, etcPath );
+    strcat( etcPath, "\\" );
+    strcat( etcPath, szFilename );
 
-       fa = GetFileAttributesA( etcPath );
+    fa = GetFileAttributesA( etcPath );
 
-       if(fa == INVALID_FILE_ATTRIBUTES)
-       {
-               ReportMessage(0, "File not found. Creating...", szFilename,0,0);
+    if (fa == INVALID_FILE_ATTRIBUTES)
+    {
+        ReportMessage(0, "File not found. Creating...", szFilename,0,0);
 
-               hFile = fopen( etcPath, "w" );
-               if(!hFile)
-               {
-                       ReportMessage(0,"FAILED : can't create file",etcPath,0,errno);
-                       return FALSE;
-               }
+        hFile = fopen( etcPath, "w" );
+        if (!hFile)
+        {
+            ReportMessage(0,"FAILED : can't create file",etcPath,0,errno);
+            return FALSE;
+        }
 
-               fprintf(hFile, "%s\t%s%s\n", szIp, szName, (bPre)?"\t#PRE":"");
+        fprintf(hFile, "%s\t%s%s\n", szIp, szName, (bPre)?"\t#PRE":"");
 
-               fclose( hFile );
+        fclose( hFile );
 
-               ReportMessage(1,"done",0,0,0);
-       }
-       else // the file exists. parse and update
-       {
-
-               ReportMessage(1, "Updating file ...",szFilename,0,0 );
-
-               hFile = fopen( etcPath, "r");
-               if(!hFile)
-               {
-                       ReportMessage(0,"FAILED : can't open file",etcPath,0,errno);
-                       return FALSE;
-               }
-
-               strcat( tempPath, szFilename );
-               strcat( tempPath, ".tmp" );
-               hTemp = fopen( tempPath, "w");
-               if(!hTemp)
-               {
-                       ReportMessage(0,"FAILED : can't create temp file",tempPath,0,errno);
-                       fclose(hFile);
-                       return FALSE;
-               }
-
-               while(fgets( buffer, 2046, hFile))
-               {
-                       strcpy( temp, buffer );
-                       strupr( temp );
-
-            if ((strlen(temp)<1) || (*(temp+strlen(temp)-1)!='\n')) strcat(temp, "\n");
-
-                       if(!(str = strstr(temp, szName)))
-                       {
-                               fputs( buffer, hTemp );
-                       }
-                       else
-                       {
-                               // check for FOOBAFS or AFSY
-                               //if(str <= temp || (*(str-1) != '-' && !isspace(*(str+strlen(szName)))))
-                               if ( (str == temp) || (!*(str+strlen(szName))) || (!isspace(*(str-1))) || (!isspace(*(str+strlen(szName)))) )
-                    fputs( buffer, hTemp );
-                       }
-               }
-
-
-               len = 2048;
-               GetComputerNameA( buffer, &len );
-               buffer[11] = 0;
-               fprintf( hTemp, "%s\t%s%s\n", szIp, szName, (bPre)?"\t#PRE":"");
-
-               fclose( hTemp );
-               fclose( hFile );
-
-               strcpy(buffer, etcPath);
-               strcat(buffer, ".old");
-
-        if(!DeleteFileA(buffer)) {
+        ReportMessage(1,"done",0,0,0);
+    }
+    else // the file exists. parse and update
+    {
+
+        ReportMessage(1, "Updating file ...",szFilename,0,0 );
+
+        hFile = fopen( etcPath, "r");
+        if (!hFile)
+        {
+            ReportMessage(0,"FAILED : can't open file",etcPath,0,errno);
+            return FALSE;
+        }
+
+        strcat( tempPath, szFilename );
+        strcat( tempPath, ".tmp" );
+        hTemp = fopen( tempPath, "w");
+        if (!hTemp)
+        {
+            ReportMessage(0,"FAILED : can't create temp file",tempPath,0,errno);
+            fclose(hFile);
+            return FALSE;
+        }
+
+        while(fgets( buffer, 2046, hFile))
+        {
+            size_t len;
+
+            strcpy( temp, buffer );
+            strupr( temp );
+            len = strlen(temp);
+
+            if ((len < 1) || (temp[len-1] != '\n'))
+                strcat(temp, "\n");
+
+            if (!(str = strstr(temp, szName)))
+            {
+                fputs( temp, hTemp );
+            }
+            else
+            {
+                // check for FOOBAFS or AFSY
+                if ( (str == temp) || (!str[nameLen]) || (!isspace(*(str-1))) || (!isspace(str[nameLen])) )
+                    fputs( temp, hTemp );
+            }
+        }
+
+        len = 2048;
+        GetComputerNameA( buffer, &len );
+        buffer[11] = 0;
+        fprintf( hTemp, "%s\t%s%s\n", szIp, szName, (bPre)?"\t#PRE":"");
+
+        fclose( hTemp );
+        fclose( hFile );
+
+        strcpy(buffer, etcPath);
+        strcat(buffer, ".old");
+
+        if (!DeleteFileA(buffer)) {
             DWORD status;
             int i;
             char * eos;
 
             status = GetLastError();
-            if(status == ERROR_ACCESS_DENIED) {
+            if (status == ERROR_ACCESS_DENIED) {
                 /* try changing the file attribtues. */
-                if(SetFileAttributesA(buffer, FILE_ATTRIBUTE_NORMAL) &&
+                if (SetFileAttributesA(buffer, FILE_ATTRIBUTE_NORMAL) &&
                     DeleteFileA(buffer)) {
                     status = 0;
                     ReportMessage(0,"Changed attributes and deleted back host file", buffer, 0, 0);
                 }
             }
-            if(status && status != ERROR_FILE_NOT_FOUND) {
-                /* we can't delete the file.  Try to come up with 
+            if (status && status != ERROR_FILE_NOT_FOUND) {
+                /* we can't delete the file.  Try to come up with
                    a different name that's not already taken. */
                 srand(GetTickCount());
                 eos = buffer + strlen(buffer);
                 for(i=0; i < 50; i++) {
                     itoa(rand(), eos, 16);
-                    if(GetFileAttributesA(buffer) == INVALID_FILE_ATTRIBUTES &&
+                    if (GetFileAttributesA(buffer) == INVALID_FILE_ATTRIBUTES &&
                         GetLastError() == ERROR_FILE_NOT_FOUND)
                         break;
                 }
@@ -925,20 +938,20 @@ BOOL UpdateHostsFile( LPCWSTR swName, LPCWSTR swIp, LPCSTR szFilename, BOOL bPre
             }
         }
 
-        if(!MoveFileA( etcPath, buffer )) {
+        if (!MoveFileA( etcPath, buffer )) {
             ReportMessage(0,"FAILED: Can't rename old file", etcPath, 0, GetLastError());
             return FALSE;
         }
 
-               if(!MoveFileA( tempPath, etcPath ) != 0)
-               {
-                       ReportMessage(0,"FAILED : Can't rename new file", tempPath, 0, GetLastError());
-                       return FALSE;
-               }
+        if (!MoveFileA( tempPath, etcPath ) != 0)
+        {
+            ReportMessage(0,"FAILED : Can't rename new file", tempPath, 0, GetLastError());
+            return FALSE;
+        }
 
-       }
+    }
 
-       return TRUE;
+    return TRUE;
 }
 
 #ifdef TEST