From: Jeffrey Altman Date: Wed, 7 Mar 2007 18:13:25 +0000 (+0000) Subject: windows-plug-n-play-network-fix-20070307 X-Git-Tag: BP-openafs-windows-kdfs-ifs~768 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=5332348bdf68491670cc94ff1f9bc527876304fa;p=packages%2Fo%2Fopenafs.git windows-plug-n-play-network-fix-20070307 Move the detection of which LAN adapter to use from smb_Init to smb_NetbiosInit so that it is executed after the service is resumed via a power management event. Otherwise, when the network comes back up the service attempts to bind to all LAN adapters instead of just the loopback or the configured one. --- diff --git a/src/WINNT/afsd/afsd_init.c b/src/WINNT/afsd/afsd_init.c index 0606a2e27..9caf5f3f1 100644 --- a/src/WINNT/afsd/afsd_init.c +++ b/src/WINNT/afsd/afsd_init.c @@ -76,8 +76,6 @@ char cm_CachePath[MAX_PATH]; DWORD cm_CachePathLen; DWORD cm_ValidateCache = 1; -BOOL isGateway = FALSE; - BOOL reportSessionStartups = FALSE; cm_initparams_v1 cm_initParams; @@ -566,7 +564,6 @@ int afsd_InitCM(char **reasonP) long code; /*int freelanceEnabled;*/ WSADATA WSAjunk; - lana_number_t lanaNum; int i; char *p, *q; int cm_noIPAddr; /* number of client network interfaces */ @@ -1079,25 +1076,6 @@ int afsd_InitCM(char **reasonP) RegCloseKey (parmKey); - /* Call lanahelper to get Netbios name, lan adapter number and gateway flag */ - if (SUCCEEDED(code = lana_GetUncServerNameEx(cm_NetbiosName, &lanaNum, &isGateway, LANA_NETBIOS_NAME_FULL))) { - LANadapter = (lanaNum == LANA_INVALID)? -1: lanaNum; - - if (LANadapter != -1) - afsi_log("LAN adapter number %d", LANadapter); - else - afsi_log("LAN adapter number not determined"); - - if (isGateway) - afsi_log("Set for gateway service"); - - afsi_log("Using >%s< as SMB server name", cm_NetbiosName); - } else { - /* something went horribly wrong. We can't proceed without a netbios name */ - StringCbPrintfA(buf,sizeof(buf),"Netbios name could not be determined: %li", code); - osi_panic(buf, __FILE__, __LINE__); - } - cacheBlocks = ((afs_uint64)cacheSize * 1024) / CM_CONFIGDEFAULT_BLOCKSIZE; /* get network related info */ @@ -1321,7 +1299,7 @@ int afsd_InitSMB(char **reasonP, void *aMBfunc) /* Do this last so that we don't handle requests before init is done. * Here we initialize the SMB listener. */ - smb_Init(afsd_logp, cm_NetbiosName, smb_UseV3, LANadapter, numSvThreads, aMBfunc); + smb_Init(afsd_logp, smb_UseV3, numSvThreads, aMBfunc); afsi_log("smb_Init complete"); return 0; diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index 76c860a52..8c877fa7a 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -60,6 +60,8 @@ osi_mutex_t smb_ListenerLock; char smb_LANadapter; unsigned char smb_sharename[NCBNAMSZ+1] = {0}; +BOOL isGateway = FALSE; + /* for debugging */ long smb_maxObsConcurrentCalls=0; long smb_concurrentCalls=0; @@ -8156,10 +8158,40 @@ int smb_NetbiosInit(void) int delname_tried=0; int len; int lana_found = 0; + lana_number_t lanaNum; /* setup the NCB system */ ncbp = GetNCB(); + /* Call lanahelper to get Netbios name, lan adapter number and gateway flag */ + if (SUCCEEDED(code = lana_GetUncServerNameEx(cm_NetbiosName, &lanaNum, &isGateway, LANA_NETBIOS_NAME_FULL))) { + smb_LANadapter = (lanaNum == LANA_INVALID)? -1: lanaNum; + + if (smb_LANadapter != -1) + afsi_log("LAN adapter number %d", smb_LANadapter); + else + afsi_log("LAN adapter number not determined"); + + if (isGateway) + afsi_log("Set for gateway service"); + + afsi_log("Using >%s< as SMB server name", cm_NetbiosName); + } else { + /* something went horribly wrong. We can't proceed without a netbios name */ + char buf[128]; + StringCbPrintfA(buf,sizeof(buf),"Netbios name could not be determined: %li", code); + osi_panic(buf, __FILE__, __LINE__); + } + + /* remember the name */ + len = (int)strlen(cm_NetbiosName); + if (smb_localNamep) + free(smb_localNamep); + smb_localNamep = malloc(len+1); + strcpy(smb_localNamep, cm_NetbiosName); + afsi_log("smb_localNamep is >%s<", smb_localNamep); + + if (smb_LANadapter == -1) { ncbp->ncb_command = NCBENUM; ncbp->ncb_buffer = (PUCHAR)&lana_list; @@ -8366,7 +8398,7 @@ void smb_StopListeners(void) Sleep(1000); /* give the listener threads a chance to exit */ } -void smb_Init(osi_log_t *logp, char *snamep, int useV3, int LANadapt, +void smb_Init(osi_log_t *logp, int useV3, int nThreads , void *aMBfunc ) @@ -8375,7 +8407,6 @@ void smb_Init(osi_log_t *logp, char *snamep, int useV3, int LANadapt, thread_t phandle; int lpid; INT_PTR i; - int len; struct tm myTime; EVENT_HANDLE retHandle; char eventName[MAX_PATH]; @@ -8385,7 +8416,6 @@ void smb_Init(osi_log_t *logp, char *snamep, int useV3, int LANadapt, smb_MBfunc = aMBfunc; smb_useV3 = useV3; - smb_LANadapter = LANadapt; /* Initialize smb_localZero */ myTime.tm_isdst = -1; /* compute whether on DST or not */ @@ -8409,12 +8439,6 @@ void smb_Init(osi_log_t *logp, char *snamep, int useV3, int LANadapt, /* initialize the remote debugging log */ smb_logp = logp; - /* remember the name */ - len = (int)strlen(snamep); - smb_localNamep = malloc(len+1); - strcpy(smb_localNamep, snamep); - afsi_log("smb_localNamep is >%s<", smb_localNamep); - /* and the global lock */ lock_InitializeRWLock(&smb_globalLock, "smb global lock"); lock_InitializeRWLock(&smb_rctLock, "smb refct and tree struct lock"); diff --git a/src/WINNT/afsd/smb.h b/src/WINNT/afsd/smb.h index 0ea432f69..656408b6f 100644 --- a/src/WINNT/afsd/smb.h +++ b/src/WINNT/afsd/smb.h @@ -510,7 +510,7 @@ typedef struct smb_dispatch { /* prototypes */ -extern void smb_Init(osi_log_t *logp, char *smbNamep, int useV3, int LANadapt, +extern void smb_Init(osi_log_t *logp, int useV3, int nThreads , void *aMBfunc );