From feb3e7641257afd050f1dc6b11d5a7fc09f58a30 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 21 Jul 2004 06:27:44 +0000 Subject: [PATCH] afslogon-20040720 Do not release the AFS Tokens at logoff if the user's profile was loaded from AFS. In this case we must keep the AFS tokens because we have no idea how long writing back the profile might take. --- src/WINNT/afsd/NTMakefile | 4 +++- src/WINNT/afsd/afslogon.c | 27 +++++++++++++++++++++------ src/WINNT/afsd/smb.c | 2 ++ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/WINNT/afsd/NTMakefile b/src/WINNT/afsd/NTMakefile index 210c7a298..088162b8b 100644 --- a/src/WINNT/afsd/NTMakefile +++ b/src/WINNT/afsd/NTMakefile @@ -218,6 +218,7 @@ LOGON_DLLLIBS =\ $(DESTDIR)\lib\libafsconf.lib \ $(DESTDIR)\lib\afsrxkad.lib \ $(DESTDIR)\lib\afsdes.lib \ + $(DESTDIR)\lib\lanahelper.lib \ $(AFSKFWLIB) LOGON_DLLSDKLIBS =\ @@ -228,7 +229,8 @@ LOGON_DLLSDKLIBS =\ oleaut32.lib \ ole32.lib \ adsiid.lib \ - activeds.lib + activeds.lib \ + userenv.lib $(LOGON_DLLFILE): $(LOGON_DLLOBJS) $(LOGON_DLLLIBS) $(DLLGUILINK) $(LOGONLINKFLAGS) -def:afslogon.def $(LOGON_DLLSDKLIBS) diff --git a/src/WINNT/afsd/afslogon.c b/src/WINNT/afsd/afslogon.c index 2a7ee9e99..709cf9dd9 100644 --- a/src/WINNT/afsd/afslogon.c +++ b/src/WINNT/afsd/afslogon.c @@ -767,18 +767,33 @@ DWORD APIENTRY NPPasswordChangeNotify( return 0; } +#include #include +#include "lanahelper.h" -VOID AFS_Logoff_Event( - PWLX_NOTIFICATION_INFO pInfo ) +VOID AFS_Logoff_Event( PWLX_NOTIFICATION_INFO pInfo ) { DWORD code; - if (code = ktc_ForgetAllTokens()) - DebugEvent(NULL,"AFS AfsLogon - AFS_Logoff_Event - ForgetAllTokens failed [%lX]",code); - else - DebugEvent0("AFS AfsLogon - AFS_Logoff_Event - ForgetAllTokens succeeded"); + TCHAR profileDir[256] = TEXT(""); + TCHAR uncprefix[64] = TEXT("\\\\"); + DWORD len; + + len = 256; + lana_GetNetbiosName(&uncprefix[2], LANA_NETBIOS_NAME_FULL); + + if ( GetUserProfileDirectory(pInfo->hToken, profileDir, &len) ) { + if (_tcsnicmp(uncprefix, profileDir, _tcslen(uncprefix))) { + if (code = ktc_ForgetAllTokens()) + DebugEvent(NULL,"AFS AfsLogon - AFS_Logoff_Event - ForgetAllTokens failed [%lX]",code); + else + DebugEvent0("AFS AfsLogon - AFS_Logoff_Event - ForgetAllTokens succeeded"); + } else { + DebugEvent0("AFS AfsLogon - AFS_Logoff_Event - Tokens left in place; profile in AFS"); + } + } } + diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index b2dfbd719..1cd0645bf 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -1272,7 +1272,9 @@ int smb_FindShare(smb_vc_t *vcp, smb_user_t *uidp, char *shareName, char *var; char temp[1024]; DWORD sizeTemp; +#ifdef DJGPP char sbmtpath[MAX_PATH]; +#endif char *p, *q; HKEY parmKey; DWORD code; -- 2.39.5