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)
} 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.
+#define LARRY_HACK 1
/*
* Copyright 2000, International Business Machines Corporation and others.
* All Rights Reserved.
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;
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,
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);
/* 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*/
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;