sal/qa/osl/security/osl_Security.cxx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
New commits: commit 85c06cf5d785035fce01f3bf91984b2b7bf7d025 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Fri Dec 27 08:43:29 2019 +0300 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Fri Dec 27 12:40:55 2019 +0100 sal_osl_security: Windows: Handle cases with same hostname and username ... as seen in [build CUT] sal_osl_security #Initializing ... # #logonUser function need root/Administrator account to test. #You can test by login with root/Administrator, and execute: #testshl2 -forward "username password" ../../../wntmsci9/bin/Security.dll # where username and password are forwarded account info. #if no text forwarded, this function will be skipped. # #Retrieved system information is below: Computer Name: SOMENAME Current User Name: Somename Current User Home Directory:file:///C:/Users/Somename/Documents Current Config Directory: file:///C:/Users/Somename/AppData/Roaming Current UserID: S-1-5-21-1234567890-123456789-123456789 Current User is: NOT Administrator. # #Initialization Done. osl_Security::ctors::ctors_001 finished in: 0ms osl_Security::UserProfile::loadUserProfile finished in: 0ms osl_Security::UserProfile::unloadUserProfile finished in: 0ms osl_Security::getHandle::getHandle_001 finished in: 0ms osl_Security::loginUserOnFileServer::loginUserOnFileServer_001 finished in: 3ms osl_Security::getConfigDir::getConfigDir_001 finished in: 1ms C:/cygwin/home/Somename/lode/dev/core/sal/qa/osl/security/osl_Security.cxx:139:osl_Security::getUserIdent::getUserIdent_001 equality assertion failed - Expected: S-1-5-21-1234567890-123456789-123456789 - Actual : S-1-5-21-1234567890-123456789-123456789-1001 - strUserID: S-1-5-21-1234567890-123456789-123456789, strID: S-1-5-21-1234567890-123456789-123456789-1001, bRes: true osl_Security::getUserIdent::getUserIdent_001 finished in: 0ms osl_Security::getUserName::getUserName_001 finished in: 1ms osl_Security::isAdministrator::isAdministrator_001 finished in: 0ms C:/cygwin/home/Somename/lode/dev/core/sal/qa/osl/security/osl_Security.cxx(139) : error : Assertion Test name: osl_Security::getUserIdent::getUserIdent_001 equality assertion failed - Expected: S-1-5-21-1234567890-123456789-123456789 - Actual : S-1-5-21-1234567890-123456789-123456789-1001 - strUserID: S-1-5-21-1234567890-123456789-123456789, strID: S-1-5-21-1234567890-123456789-123456789-1001, bRes: true Failures !!! Run: 9 Failure total: 1 Failures: 1 Errors: 0 The problem here is that passing a string equal to hostname (case-insensitive) to LookupAccountNameW without domain qualifier returns data for local system domain, not for user with the same name. So let's try again, this time with fully-qualified user name including local domain part. Change-Id: I15f69c01dddf15782bd11a6ed6678f0a02d79786 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/85859 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/sal/qa/osl/security/osl_Security.cxx b/sal/qa/osl/security/osl_Security.cxx index bc00d27a21e7..c7f2dd71bc01 100644 --- a/sal/qa/osl/security/osl_Security.cxx +++ b/sal/qa/osl/security/osl_Security.cxx @@ -415,7 +415,8 @@ void MyTestPlugInImpl::initialize( CPPUNIT_NS::TestFactoryRegistry *, SID_NAME_USE eSidType; DWORD dwErrorCode = 0; - LPCWSTR wszAccName = o3tl::toW(strUserName.getStr( )); + OUString sLookupUserName = strUserName; + LPCWSTR wszAccName = o3tl::toW(sLookupUserName.getStr( )); // Create buffers for the SID and the domain name. PSID pSid = static_cast<PSID>(new BYTE[dwSidBufferSize]); @@ -440,6 +441,17 @@ void MyTestPlugInImpl::initialize( CPPUNIT_NS::TestFactoryRegistry *, &eSidType )) { + if (eSidType == SID_NAME_USE::SidTypeDomain) + { + // LookupAccountNameW returned SID of a domain; likely the hostname is the same as + // username (case-insensitive): something like "JOHNSMITH\JohnSmith", so looking up + // for "JohnSmith" without doman returns domain itself. Try getting the SID of the + // user using fully qualified name (the case of user of another domain having name + // identical this hostname is not handled). + sLookupUserName = o3tl::toU(wszDomainName) + OUStringLiteral("\\") + strUserName; + wszAccName = o3tl::toW(sLookupUserName.getStr()); + continue; + } if (IsValidSid( pSid) == FALSE) wprintf(L"# The SID for %s is invalid.\n", wszAccName); break; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits