From 6c7121593ad3440257908d0f82735ede099cf94a Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Fri, 11 Mar 2005 18:17:34 +0000 Subject: [PATCH] STABLE14-windows-mumble-20050311 Add new registry setting to force a lana to be treated as a loopback Move hack to force use of MSV1_0 cache (cherry picked from commit 834adacf6a65609d2d013b31ccbfba44d540abfa) --- src/WINNT/afsd/lanahelper.cpp | 14 ++++++ src/WINNT/afsd/smb.c | 80 +++++++++++++++-------------------- src/WINNT/afsd/smb.h | 14 ++++++ src/WINNT/afsd/smb3.c | 2 +- 4 files changed, 63 insertions(+), 47 deletions(-) diff --git a/src/WINNT/afsd/lanahelper.cpp b/src/WINNT/afsd/lanahelper.cpp index 06b64de5a..148a0c49c 100644 --- a/src/WINNT/afsd/lanahelper.cpp +++ b/src/WINNT/afsd/lanahelper.cpp @@ -60,6 +60,7 @@ static const char *szNetbiosNameValue = "NetbiosName"; static const char *szIsGatewayValue = "IsGateway"; static const char *szLanAdapterValue = "LanAdapter"; static const char *szNoFindLanaByName = "NoFindLanaByName"; +static const char *szForceLanaLoopback = "ForceLanaLoopback"; // Use the IShellFolder API to get the connection name for the given Guid. static HRESULT lana_ShellGetNameFromGuidW(WCHAR *wGuid, WCHAR *wName, int NameSize) @@ -435,6 +436,19 @@ extern "C" BOOL lana_IsLoopback(lana_number_t lana) } astat; unsigned char kWLA_MAC[6] = { 0x02, 0x00, 0x4c, 0x4f, 0x4f, 0x50 }; int status; + HKEY hkConfig; + LONG rv; + int regLana = -1; + DWORD dummyLen; + + rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,AFSREG_CLT_SVC_PARAM_SUBKEY,0,KEY_READ,&hkConfig); + if (rv == ERROR_SUCCESS) { + rv = RegQueryValueEx(hkConfig, szForceLanaLoopback, NULL, NULL, (LPBYTE) ®Lana, &dummyLen); + RegCloseKey(hkConfig); + + if (regLana == lana) + return TRUE; + } // Reset the adapter: in Win32, this is required for every process, and // acts as an init call, not as a real hardware reset. diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index f4673e696..7c95a1aa3 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -1,3 +1,4 @@ +#define LARRY_HACK 1 /* * Copyright 2000, International Business Machines Corporation and others. * All Rights Reserved. @@ -92,19 +93,6 @@ HANDLE smb_lsaHandle; ULONG smb_lsaSecPackage; LSA_STRING smb_lsaLogonOrigin; -#ifndef MSV1_0_OPTION_ALLOW_BLANK_PASSWORD -#define MSV1_0_OPTION_ALLOW_BLANK_PASSWORD 0x1 -#define MSV1_0_OPTION_DISABLE_ADMIN_LOCKOUT 0x2 -#define MSV1_0_OPTION_DISABLE_FORCE_GUEST 0x4 -#define MSV1_0_OPTION_TRY_CACHE_FIRST 0x10 - -typedef struct _MSV1_0_SETPROCESSOPTION_REQUEST { - MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; - ULONG ProcessOptions; - BOOLEAN DisableOptions; -} MSV1_0_SETPROCESSOPTION_REQUEST, *PMSV1_0_SETPROCESSOPTION_REQUEST; -#endif - #define NCBmax MAXIMUM_WAIT_OBJECTS EVENT_HANDLE NCBavails[NCBmax], NCBevents[NCBmax]; EVENT_HANDLE **NCBreturns; @@ -825,34 +813,6 @@ smb_vc_t *smb_FindVC(unsigned short lsn, int flags, int lana) PMSV1_0_LM20_CHALLENGE_RESPONSE lsaResp; ULONG lsaRespSize = 0; - /* BEGIN - This code is from Larry */ - PVOID pResponse = NULL; - ULONG cbResponse = 0; - MSV1_0_SETPROCESSOPTION_REQUEST OptionsRequest; - - RtlZeroMemory(&OptionsRequest, sizeof(OptionsRequest)); - OptionsRequest.MessageType = (MSV1_0_PROTOCOL_MESSAGE_TYPE) MsV1_0SetProcessOption; - OptionsRequest.ProcessOptions = MSV1_0_OPTION_TRY_CACHE_FIRST; - OptionsRequest.DisableOptions = FALSE; - - - nts = LsaCallAuthenticationPackage( smb_lsaHandle, - smb_lsaSecPackage, - &OptionsRequest, - sizeof(OptionsRequest), - &pResponse, - &cbResponse, - &ntsEx - ); - - if (nts != STATUS_SUCCESS && ntsEx != STATUS_SUCCESS) { - osi_Log2(smb_logp,"MsV1_0SetProcessOption failure: nts 0x%x ntsEx 0x%x", - nts, ntsEx); - OutputDebugString("MsV1_0SetProcessOption failure: nts 0x%x ntsEx 0x%x", - nts, ntsEx); - } - /* END - code from Larry */ - lsaReq.MessageType = MsV1_0Lm20ChallengeRequest; nts = LsaCallAuthenticationPackage( smb_lsaHandle, @@ -7646,10 +7606,6 @@ void smb_NetbiosInit() int lana_found = 0; OSVERSIONINFO Version; - /* AFAIK, this is the default for the ms loopback adapter.*/ - unsigned char kWLA_MAC[6] = { 0x02, 0x00, 0x4c, 0x4f, 0x4f, 0x50 }; - /*******************************************************************/ - /* Get the version of Windows */ memset(&Version, 0x00, sizeof(Version)); Version.dwOSVersionInfoSize = sizeof(Version); @@ -8062,7 +8018,7 @@ void smb_Init(osi_log_t *logp, char *snamep, int useV3, int LANadapt, /* if we are doing SMB authentication we have register outselves as a logon process */ if (smb_authType != SMB_AUTH_NONE) { - NTSTATUS nts; + NTSTATUS nts = STATUS_UNSUCCESSFUL, ntsEx = STATUS_UNSUCCESSFUL; LSA_STRING afsProcessName; LSA_OPERATIONAL_MODE dummy; /*junk*/ @@ -8080,6 +8036,38 @@ void smb_Init(osi_log_t *logp, char *snamep, int useV3, int LANadapt, packageName.MaximumLength = packageName.Length + 1; nts = LsaLookupAuthenticationPackage(smb_lsaHandle, &packageName , &smb_lsaSecPackage); if (nts == STATUS_SUCCESS) { +#ifdef LARRY_HACK + /* BEGIN - This code is from Larry */ + PVOID pResponse = NULL; + ULONG cbResponse = 0; + MSV1_0_SETPROCESSOPTION_REQUEST OptionsRequest; + + RtlZeroMemory(&OptionsRequest, sizeof(OptionsRequest)); + OptionsRequest.MessageType = (MSV1_0_PROTOCOL_MESSAGE_TYPE) MsV1_0SetProcessOption; + OptionsRequest.ProcessOptions = MSV1_0_OPTION_TRY_CACHE_FIRST; + OptionsRequest.DisableOptions = FALSE; + + nts = LsaCallAuthenticationPackage( smb_lsaHandle, + smb_lsaSecPackage, + &OptionsRequest, + sizeof(OptionsRequest), + &pResponse, + &cbResponse, + &ntsEx + ); + + if (nts != STATUS_SUCCESS && ntsEx != STATUS_SUCCESS) { + osi_Log2(smb_logp,"MsV1_0SetProcessOption failure: nts 0x%x ntsEx 0x%x", + nts, ntsEx); + OutputDebugString("MsV1_0SetProcessOption failure: nts 0x%x ntsEx 0x%x", + nts, ntsEx); + } else { + osi_Log0(smb_logp,"MsV1_0SetProcessOption success"); + OutputDebugString("MsV1_0SetProcessOption success"); + } + /* END - code from Larry */ +#endif /* LARRY_HACK */ + smb_lsaLogonOrigin.Buffer = "OpenAFS"; smb_lsaLogonOrigin.Length = strlen(smb_lsaLogonOrigin.Buffer); smb_lsaLogonOrigin.MaximumLength = smb_lsaLogonOrigin.Length + 1; diff --git a/src/WINNT/afsd/smb.h b/src/WINNT/afsd/smb.h index 7f74ba6fd..e0c790052 100644 --- a/src/WINNT/afsd/smb.h +++ b/src/WINNT/afsd/smb.h @@ -642,4 +642,18 @@ cm_user_t *smb_FindOrCreateUser(smb_vc_t *vcp, char *usern); #ifdef NOTSERVICE extern void smb_LogPacket(smb_packet_t *packet); #endif /* NOTSERVICE */ + +#ifndef MSV1_0_OPTION_ALLOW_BLANK_PASSWORD +#define MSV1_0_OPTION_ALLOW_BLANK_PASSWORD 0x1 +#define MSV1_0_OPTION_DISABLE_ADMIN_LOCKOUT 0x2 +#define MSV1_0_OPTION_DISABLE_FORCE_GUEST 0x4 +#define MSV1_0_OPTION_TRY_CACHE_FIRST 0x10 + +typedef struct _MSV1_0_SETPROCESSOPTION_REQUEST { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + ULONG ProcessOptions; + BOOLEAN DisableOptions; +} MSV1_0_SETPROCESSOPTION_REQUEST, *PMSV1_0_SETPROCESSOPTION_REQUEST; +#endif + #endif /* whole file */ diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index 451532c2c..4d436d152 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -583,7 +583,7 @@ long smb_AuthenticateUserLM(smb_vc_t *vcp, char * accountName, char * primaryDom "aLimits, &ntsEx); - if (nts != STATUS_SUCCESS) + if (nts != STATUS_SUCCESS || ntsEx != STATUS_SUCCESS) osi_Log2(smb_logp,"LsaLogonUser failure: nts %u ntsEx %u", nts, ntsEx); -- 2.39.5