Aric Stewart : advapi32: Handle fully qualified account names for well known sids in LookupAccountName .
Module: wine Branch: master Commit: 9d9a684ef6cb9bf70235594e81de1e3b0387beeb URL: http://source.winehq.org/git/wine.git/?a=commit;h=9d9a684ef6cb9bf70235594e81... Author: Aric Stewart <aric(a)codeweavers.com> Date: Tue Mar 31 09:00:11 2009 -0500 advapi32: Handle fully qualified account names for well known sids in LookupAccountName. --- dlls/advapi32/security.c | 17 +++++++++++++++-- dlls/advapi32/tests/security.c | 7 +++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c index a26e81a..f8715e0 100644 --- a/dlls/advapi32/security.c +++ b/dlls/advapi32/security.c @@ -2651,6 +2651,8 @@ BOOL WINAPI LookupAccountNameW( LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSI DWORD nameLen; LPWSTR userName = NULL; LPCWSTR domainName; + LPCWSTR lpAccountNamePtr; + LPCWSTR lpDomainNamePtr = NULL; FIXME("%s %s %p %p %p %p %p - stub\n", debugstr_w(lpSystemName), debugstr_w(lpAccountName), Sid, cbSid, ReferencedDomainName, cchReferencedDomainName, peUse); @@ -2667,11 +2669,22 @@ BOOL WINAPI LookupAccountNameW( LPCWSTR lpSystemName, LPCWSTR lpAccountName, PSI } /* Check well known SIDs first */ + if ((lpAccountNamePtr = strrchrW(lpAccountName,'\\'))) + { + lpAccountNamePtr++; + lpDomainNamePtr = lpAccountName; + } + else + lpAccountNamePtr = lpAccountName; for (i = 0; i < (sizeof(ACCOUNT_SIDS) / sizeof(ACCOUNT_SIDS[0])); i++) { - if (!strcmpiW(lpAccountName, ACCOUNT_SIDS[i].account) || - (ACCOUNT_SIDS[i].alias && !strcmpiW(lpAccountName, ACCOUNT_SIDS[i].alias))) + /* check domain first */ + if (lpDomainNamePtr && (strncmpiW(lpDomainNamePtr, ACCOUNT_SIDS[i].domain, strlenW(ACCOUNT_SIDS[i].domain)) || lpDomainNamePtr[strlenW(ACCOUNT_SIDS[i].domain)]!='\\')) + continue; + + if (!strcmpiW(lpAccountNamePtr, ACCOUNT_SIDS[i].account) || + (ACCOUNT_SIDS[i].alias && !strcmpiW(lpAccountNamePtr, ACCOUNT_SIDS[i].alias))) { DWORD sidLen = SECURITY_MAX_SID_SIZE; diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c index e557c1f..f264fd8 100644 --- a/dlls/advapi32/tests/security.c +++ b/dlls/advapi32/tests/security.c @@ -1982,6 +1982,13 @@ static void test_LookupAccountName(void) /* case insensitivity */ check_wellknown_name("lOCAlServICE", WinLocalServiceSid); + + /* fully qualified account names */ + check_wellknown_name("NT AUTHORITY\\LocalService", WinLocalServiceSid); + check_wellknown_name("nt authority\\Network Service", WinNetworkServiceSid); + check_wellknown_name("nt authority test\\Network Service", 0); + check_wellknown_name("Dummy\\Network Service", 0); + check_wellknown_name("ntauthority\\Network Service", 0); } static void test_security_descriptor(void)
participants (1)
-
Alexandre Julliard