[2/5] advapi32: Break local username parsing out of LookupAccountNameW and into a helper function.
Hans Leidekker
hans at codeweavers.com
Wed Jul 22 04:54:28 CDT 2009
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
index c5a8b18..8905a44 100644
--- a/dlls/advapi32/security.c
+++ b/dlls/advapi32/security.c
@@ -2763,48 +2763,32 @@ static BOOL lookup_local_wellknown_name(LPCWSTR lpAccountName, DWORD ccAccountNa
return ret;
}
-/******************************************************************************
- * LookupAccountNameW [ADVAPI32.@]
- */
-BOOL WINAPI LookupAccountNameW( LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSID Sid,
- LPDWORD cbSid, LPWSTR ReferencedDomainName,
- LPDWORD cchReferencedDomainName, PSID_NAME_USE peUse )
+static BOOL lookup_local_user_name(LPCWSTR lpAccountName, DWORD ccAccountName,
+ PSID Sid, LPDWORD cbSid,
+ LPWSTR ReferencedDomainName,
+ LPDWORD cchReferencedDomainName,
+ PSID_NAME_USE peUse, BOOL *handled)
{
- BOOL ret, handled;
DWORD nameLen;
LPWSTR userName = NULL;
+ DWORD accountLen;
+ DWORD domainLen;
LPCWSTR lpAccountNamePtr;
LPCWSTR lpDomainNamePtr = NULL;
+ BOOL ret = TRUE;
- FIXME("%s %s %p %p %p %p %p - stub\n", debugstr_w(lpSystemName), debugstr_w(lpAccountName),
- Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse);
-
- if (!ADVAPI_IsLocalComputer(lpSystemName))
- {
- SetLastError(RPC_S_SERVER_UNAVAILABLE);
- return FALSE;
- }
+ *handled = FALSE;
- if (!lpAccountName || !strcmpW(lpAccountName, Blank))
- {
- lpAccountName = BUILTIN;
- }
+ if (ccAccountName != -1)
+ accountLen = ccAccountName;
+ else
+ accountLen = lstrlenW(lpAccountName);
- /* Check well known SIDs first */
- ret = lookup_local_wellknown_name(lpAccountName, -1, Sid, cbSid,
- ReferencedDomainName, cchReferencedDomainName,
- peUse, &handled);
- if (handled)
- return ret;
+ split_domain_account(lpAccountName, accountLen,
+ &lpAccountNamePtr, &accountLen,
+ &lpDomainNamePtr, &domainLen);
/* Let the current Unix user id masquerade as first Windows user account */
- if ((lpAccountNamePtr = strrchrW(lpAccountName,'\\')))
- {
- lpAccountNamePtr++;
- lpDomainNamePtr = lpAccountName;
- }
- else
- lpAccountNamePtr = lpAccountName;
nameLen = UNLEN + 1;
@@ -2822,27 +2806,68 @@ BOOL WINAPI LookupAccountNameW( LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSI
}
if (GetUserNameW(userName, &nameLen) && !strcmpW(lpAccountNamePtr, userName))
+ {
ret = lookup_user_account_name(Sid, cbSid, ReferencedDomainName,
cchReferencedDomainName, peUse);
+ *handled = TRUE;
+ }
else
{
nameLen = UNLEN + 1;
if (GetComputerNameW(userName, &nameLen) && !strcmpW(lpAccountNamePtr, userName))
+ {
ret = lookup_computer_account_name(Sid, cbSid, ReferencedDomainName,
cchReferencedDomainName, peUse);
- else
- {
- SetLastError(ERROR_NONE_MAPPED);
- ret = FALSE;
+ *handled = TRUE;
}
}
HeapFree(GetProcessHeap(), 0, userName);
-
return ret;
}
/******************************************************************************
+ * LookupAccountNameW [ADVAPI32.@]
+ */
+BOOL WINAPI LookupAccountNameW( LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSID Sid,
+ LPDWORD cbSid, LPWSTR ReferencedDomainName,
+ LPDWORD cchReferencedDomainName, PSID_NAME_USE peUse )
+{
+ BOOL ret, handled;
+
+ FIXME("%s %s %p %p %p %p %p - stub\n", debugstr_w(lpSystemName), debugstr_w(lpAccountName),
+ Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse);
+
+ if (!ADVAPI_IsLocalComputer(lpSystemName))
+ {
+ SetLastError(RPC_S_SERVER_UNAVAILABLE);
+ return FALSE;
+ }
+
+ if (!lpAccountName || !strcmpW(lpAccountName, Blank))
+ {
+ lpAccountName = BUILTIN;
+ }
+
+ /* Check well known SIDs first */
+ ret = lookup_local_wellknown_name(lpAccountName, -1, Sid, cbSid,
+ ReferencedDomainName, cchReferencedDomainName,
+ peUse, &handled);
+ if (handled)
+ return ret;
+
+ /* Check user names */
+ ret = lookup_local_user_name(lpAccountName, -1, Sid, cbSid,
+ ReferencedDomainName, cchReferencedDomainName,
+ peUse, &handled);
+ if (handled)
+ return ret;
+
+ SetLastError(ERROR_NONE_MAPPED);
+ return FALSE;
+}
+
+/******************************************************************************
* PrivilegeCheck [ADVAPI32.@]
*/
BOOL WINAPI PrivilegeCheck( HANDLE ClientToken, PPRIVILEGE_SET RequiredPrivileges, LPBOOL pfResult)
More information about the wine-patches
mailing list