From 6a0443bdcce0bde8af06af0da929cff6a693ead3 Mon Sep 17 00:00:00 2001 From: James Peterson Date: Wed, 21 Nov 2001 06:44:28 +0000 Subject: [PATCH] windows-updates-20011121 missed updates needed for next release --- src/WINNT/afsd/NTMakefile | 1 + src/WINNT/afsd/cm_ioctl.c | 23 ++++++++++++++++++-- src/WINNT/afsd/smb.h | 4 ++++ src/WINNT/afsd/smb3.h | 1 + src/WINNT/client_config/drivemap.cpp | 7 +++--- src/WINNT/client_creds/advtab.cpp | 6 +++--- src/auth/ktc_nt.c | 13 +++++++++++ src/kauth/user_nt.c | 32 ++++++++++++++++++++++------ src/libafsauthent/afsauthent.def | 1 + 9 files changed, 73 insertions(+), 15 deletions(-) diff --git a/src/WINNT/afsd/NTMakefile b/src/WINNT/afsd/NTMakefile index 4e5af5afc..84f6618df 100644 --- a/src/WINNT/afsd/NTMakefile +++ b/src/WINNT/afsd/NTMakefile @@ -5,6 +5,7 @@ # License. For details, see the LICENSE file in the top-level source # directory or online at http://www.openafs.org/dl/license10.html +AFSDEV_NETGUI = 1 !INCLUDE ..\..\config\NTMakefile.$(SYS_NAME) !INCLUDE ..\..\config\NTMakefile.version diff --git a/src/WINNT/afsd/cm_ioctl.c b/src/WINNT/afsd/cm_ioctl.c index 17399bf6f..8ae076640 100644 --- a/src/WINNT/afsd/cm_ioctl.c +++ b/src/WINNT/afsd/cm_ioctl.c @@ -1356,6 +1356,7 @@ long cm_IoctlSetToken(struct smb_ioctl *ioctlp, struct cm_user *userp) afs_uuid_t uuid; int flags; char sessionKey[8]; + char *smbname; saveDataPtr = ioctlp->inDatap; @@ -1400,6 +1401,13 @@ long cm_IoctlSetToken(struct smb_ioctl *ioctlp, struct cm_user *userp) uname = tp; tp += strlen(tp) + 1; + if (flags & PIOCTL_LOGON) { + /* SMB user name with which to associate tokens */ + smbname = tp; + fprintf(stderr, "SMB name = %s\n", smbname); + tp += strlen(tp) + 1; + } + #ifndef DJGPP /* for win95, session key is back in pioctl */ /* uuid */ memcpy(&uuid, tp, sizeof(uuid)); @@ -1410,8 +1418,7 @@ long cm_IoctlSetToken(struct smb_ioctl *ioctlp, struct cm_user *userp) cellp = cm_rootCellp; if (flags & PIOCTL_LOGON) { - userp = smb_FindCMUserByName(/*ioctlp->fidp->vcp,*/ uname, - ioctlp->fidp->vcp->rname); + userp = smb_FindCMUserByName(smbname, ioctlp->fidp->vcp->rname); } /* store the token */ @@ -1876,3 +1883,15 @@ long cm_IoctlShutdown(smb_ioctl_t *ioctlp, cm_user_t *userp) { } #endif /* DJGPP */ +long cm_IoctlGetSMBName(smb_ioctl_t *ioctlp, cm_user_t *userp) +{ + smb_user_t *uidp = ioctlp->uidp; + + if (uidp && uidp->unp) { + memcpy(ioctlp->outDatap, uidp->unp->name, strlen(uidp->unp->name)); + ioctlp->outDatap += strlen(uidp->unp->name); + } + + return 0; +} + diff --git a/src/WINNT/afsd/smb.h b/src/WINNT/afsd/smb.h index e3a9c2076..8afe8d459 100644 --- a/src/WINNT/afsd/smb.h +++ b/src/WINNT/afsd/smb.h @@ -208,6 +208,10 @@ typedef struct smb_ioctl { /* fid pointer */ struct smb_fid *fidp; + + /* uid pointer */ + smb_user_t *uidp; + } smb_ioctl_t; /* flags for smb_ioctl_t */ diff --git a/src/WINNT/afsd/smb3.h b/src/WINNT/afsd/smb3.h index 937ed42ba..136ffab31 100644 --- a/src/WINNT/afsd/smb3.h +++ b/src/WINNT/afsd/smb3.h @@ -164,6 +164,7 @@ extern long smb_ReceiveNTCancel(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t * extern int smb_V3MatchMask(char *namep, char *maskp, int flags); extern void smb3_Init(); +extern cm_user_t *smb_FindCMUserByName(/*smb_vc_t *vcp,*/ char *usern, char *machine); #ifdef DJGPP #define DELETE (0x00010000) diff --git a/src/WINNT/client_config/drivemap.cpp b/src/WINNT/client_config/drivemap.cpp index 19531d3a8..75d9139b1 100644 --- a/src/WINNT/client_config/drivemap.cpp +++ b/src/WINNT/client_config/drivemap.cpp @@ -907,7 +907,7 @@ void TestAndDoUnMapShare() DoUnMapShare(FALSE); } -void DoUnMapShare(BOOL force) +void DoUnMapShare(BOOL drivemap) //disconnect drivemap { TCHAR szMachine[ MAX_PATH],szPath[MAX_PATH]; DWORD rc=28; @@ -933,9 +933,10 @@ void DoUnMapShare(BOOL force) if (strstr(_strlwr(lpnrLocal[i].lpRemoteName),szPath)) { if ((lpnrLocal[i].lpLocalName) && (strlen(lpnrLocal[i].lpLocalName)>0)) - if (force) + { + if (drivemap) WNetCancelConnection(lpnrLocal[i].lpLocalName,TRUE); - else + } else WNetCancelConnection(lpnrLocal[i].lpRemoteName,TRUE); DEBUG_EVENT1("AFS DriveUnMap","UnMap-Remote=%x",res); } diff --git a/src/WINNT/client_creds/advtab.cpp b/src/WINNT/client_creds/advtab.cpp index 0dcf7f541..760fc1d32 100644 --- a/src/WINNT/client_creds/advtab.cpp +++ b/src/WINNT/client_creds/advtab.cpp @@ -204,9 +204,9 @@ void Advanced_OnChangeService (HWND hDlg, WORD wCmd) case IDC_SERVICE_STOP: SERVICE_STATUS Status; - if (ControlService (hService, SERVICE_CONTROL_STOP, &Status)) - TestAndDoUnMapShare(); - fSuccess = TRUE; + TestAndDoUnMapShare(); + ControlService (hService, SERVICE_CONTROL_STOP, &Status); + fSuccess = TRUE; break; } diff --git a/src/auth/ktc_nt.c b/src/auth/ktc_nt.c index e447f5ed4..cc952dd8c 100644 --- a/src/auth/ktc_nt.c +++ b/src/auth/ktc_nt.c @@ -333,6 +333,19 @@ int ktc_SetToken( strcpy(tp, client->name); tp += temp+1; + /* we need the SMB user name to associate the tokens with in the + integrated logon case. */ + if (flags & AFS_SETTOK_LOGON) { + if (client->smbname == NULL) + temp = 0; + else + temp = strlen(client->smbname); + if (temp == 0 || temp >= MAXKTCNAMELEN) + return KTC_INVAL; + strcpy(tp, client->smbname); + tp += temp+1; + } + /* uuid */ status = UuidCreate((UUID *)&uuid); memcpy(tp, &uuid, sizeof(uuid)); diff --git a/src/kauth/user_nt.c b/src/kauth/user_nt.c index c37c66dac..e427b3daf 100644 --- a/src/kauth/user_nt.c +++ b/src/kauth/user_nt.c @@ -85,6 +85,22 @@ afs_int32 ka_UserAuthenticateGeneral( afs_int32 *password_expiresP, afs_int32 spare, char **reasonP) +{ + return ka_UserAuthenticateGeneral2(flags, name, instance, realm, password, NULL, + lifetime, password_expiresP, spare, reasonP); +} + +afs_int32 ka_UserAuthenticateGeneral2( + afs_int32 flags, + char *name, + char *instance, + char *realm, + char *password, + char *smbname, + Date lifetime, + afs_int32 *password_expiresP, + afs_int32 spare, + char **reasonP) { int code; struct ktc_encryptionKey key1, key2; @@ -147,6 +163,8 @@ afs_int32 ka_UserAuthenticateGeneral( strcpy(client.name, name); strcpy(client.instance, instance); strcpy(client.cell, upperRealm); + if (smbname) + strcpy(client.smbname, smbname); token.startTime = 0; /* XXX */ token.endTime = expirationTime; @@ -317,8 +335,8 @@ static check_response /* Check and extract server's name */ if ((strlen(ptr) + (ptr - (char *) cip->dat)) > cip->length) { - return(INTK_BADPW); - } + return(INTK_BADPW); + } (void) strncpy(s_service, ptr, sizeof(s_service)-1); s_service[sizeof(s_service)-1] = '\0'; @@ -326,8 +344,8 @@ static check_response /* Check and extract server's instance */ if ((strlen(ptr) + (ptr - (char *) cip->dat)) > cip->length) { - return(INTK_BADPW); - } + return(INTK_BADPW); + } (void) strncpy(s_instance,ptr, sizeof(s_instance)-1); s_instance[sizeof(s_instance)-1] = '\0'; @@ -335,8 +353,8 @@ static check_response /* Check and extract server's realm */ if ((strlen(ptr) + (ptr - (char *) cip->dat)) > cip->length) { - return(INTK_BADPW); - } + return(INTK_BADPW); + } (void) strncpy(s_realm,ptr, sizeof(s_realm)); s_realm[sizeof(s_realm)-1] = '\0'; @@ -351,7 +369,7 @@ static check_response if ((ticket_len < 0) || ((ticket_len + (ptr - (char *) cip->dat)) > (int) cip->length)) { return(INTK_BADPW); - } + } /* Check returned server name, instance, and realm fields */ /* diff --git a/src/libafsauthent/afsauthent.def b/src/libafsauthent/afsauthent.def index 46a00d8ac..20fd1192d 100644 --- a/src/libafsauthent/afsauthent.def +++ b/src/libafsauthent/afsauthent.def @@ -77,6 +77,7 @@ EXPORTS ktc_OldPioctl @76 pioctl @77 rx_Init @78 + ka_UserAuthenticateGeneral2 @79 -- 2.39.5