]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
DEVEL15-windows-vista-network-change-20080105
authorJeffrey Altman <jaltman@secure-endpoints.com>
Sat, 5 Jan 2008 17:56:29 +0000 (17:56 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Sat, 5 Jan 2008 17:56:29 +0000 (17:56 +0000)
LICENSE MIT

After a network change, test to see if the desired LAN adapter to bind
the Netbios Name to has changed.  If so, stop the Netbios Network and
restart with the new LAN adapter.

This can happen on Vista after a suspend if the service wakes up before
the Loopback adapter re-initializes.

(cherry picked from commit f970985bc35ade50371a9299ad580d96ad04e979)

src/WINNT/afsd/cm_daemon.c
src/WINNT/afsd/smb.c
src/WINNT/afsd/smb.h

index bb97c27ee5872dac725a5cda782a1fec5c2a72a7..48ac9c437f4e1b20c14aeacafd50b5a690b02be6 100644 (file)
@@ -74,6 +74,7 @@ void cm_IpAddrDaemon(long parm)
         thrd_SetEvent(cm_IPAddrDaemon_ShutdownEvent);
         Result = NotifyAddrChange(NULL,NULL);
         if (Result == NO_ERROR && daemon_ShutdownFlag == 0) {
+            smb_LanAdapterChange();
             thrd_ResetEvent(cm_IPAddrDaemon_ShutdownEvent);
            Sleep(2500);
             if (daemon_ShutdownFlag == 0) {
index 6021e6c006e3e35582027692b2596c7113d029fc..1f08b3f63b178cacfbd68aca34862af207d5ad37 100644 (file)
@@ -65,7 +65,7 @@ osi_rwlock_t smb_globalLock;
 osi_rwlock_t smb_rctLock;
 osi_mutex_t  smb_ListenerLock;
  
-char smb_LANadapter;
+char smb_LANadapter = -1;
 unsigned char smb_sharename[NCBNAMSZ+1] = {0};
 
 BOOL isGateway = FALSE;
@@ -8754,6 +8754,28 @@ void smb_Listener(void *parmp)
     FreeNCB(ncbp);
 }
 
+
+void smb_LanAdapterChange(void) {
+    lana_number_t lanaNum;
+    BOOL          bGateway;
+    char          NetbiosName[MAX_NB_NAME_LENGTH] = "";
+    int           change = 0;
+
+    if (SUCCEEDED(lana_GetUncServerNameEx(NetbiosName, &lanaNum, &bGateway, 
+                                                  LANA_NETBIOS_NAME_FULL))) {
+        if (smb_LANadapter != lanaNum ||
+            isGateway != bGateway ||
+            strcmp(cm_NetbiosName, NetbiosName))
+            change = 1;
+    } 
+
+    if (change) {
+        afsi_log("Lan Adapter Change detected");
+        smb_StopListeners();
+        smb_RestartListeners();
+    }
+}
+
 /* initialize Netbios */
 int smb_NetbiosInit(void)
 {
index 5c81451aa2c32ca5a51b9d46c9636df48d456226..b365bfa37a307979dbc235a75a7e3c4ad5810cb0 100644 (file)
@@ -759,6 +759,7 @@ extern void smb_RestartListeners(void);
 extern void smb_StopListeners(void);
 extern void smb_StopListener(NCB *ncbp, int lana);
 extern long smb_IsNetworkStarted(void);
+extern void smb_LanAdapterChange(void);
 
 #define SMB_LISTENER_UNINITIALIZED -1
 #define SMB_LISTENER_STOPPED 0