summaryrefslogtreecommitdiff
path: root/sal
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2018-08-28 23:22:29 +0300
committerMike Kaganski <mike.kaganski@collabora.com>2018-08-29 08:40:01 +0200
commitd8d310dcac8ddfdb16756cc863552ef788cfc393 (patch)
treec0411b4a651b2e146aa414c72cfca19e6a7693d7 /sal
parentb4c003397eb29beff055044091c1d088acda2bae (diff)
Use ConvertSidToStringSidW instead of composing SID string manually
Change-Id: I0dc22130b5dec5eb2250c9625773b6c9720182a9 Reviewed-on: https://gerrit.libreoffice.org/59740 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'sal')
-rw-r--r--sal/osl/w32/security.cxx58
-rw-r--r--sal/qa/osl/security/osl_Security.cxx52
2 files changed, 19 insertions, 91 deletions
diff --git a/sal/osl/w32/security.cxx b/sal/osl/w32/security.cxx
index 8192dbbb6ded..c70ad92f2931 100644
--- a/sal/osl/w32/security.cxx
+++ b/sal/osl/w32/security.cxx
@@ -24,7 +24,9 @@
#include <osl/thread.h>
#include <osl/file.h>
#include <systools/win32/uwinapi.h>
+#include <sddl.h>
#include <sal/macros.h>
+#include <sal/log.hxx>
#include <o3tl/char16_t2wchar_t.hxx>
#include "secimpl.hxx"
@@ -305,60 +307,26 @@ sal_Bool SAL_CALL osl_getUserIdent(oslSecurity Security, rtl_uString **strIdent)
if (pInfoBuffer)
{
PSID pSid = reinterpret_cast<PTOKEN_USER>(pInfoBuffer)->User.Sid;
- PSID_IDENTIFIER_AUTHORITY psia;
- DWORD dwSubAuthorities;
- DWORD dwCounter;
- DWORD dwSidSize;
- PUCHAR pSSACount;
- /* obtain SidIdentifierAuthority */
- psia=GetSidIdentifierAuthority(pSid);
-
- /* obtain sidsubauthority count */
- pSSACount = GetSidSubAuthorityCount(pSid);
- dwSubAuthorities = (*pSSACount < 5) ? *pSSACount : 5;
-
- /* buffer length: S-SID_REVISION- + identifierauthority- + subauthorities- + NULL */
- sal_Unicode *Ident=static_cast<sal_Unicode *>(malloc(88*sizeof(sal_Unicode)));
-
- /* prepare S-SID_REVISION- */
- dwSidSize=wsprintfW(o3tl::toW(Ident), L"S-%lu-", SID_REVISION);
-
- /* prepare SidIdentifierAuthority */
- if ((psia->Value[0] != 0) || (psia->Value[1] != 0))
+ LPWSTR pSidStr = nullptr;
+ BOOL bResult = ConvertSidToStringSidW(pSid, &pSidStr);
+ if (bResult)
{
- dwSidSize+=wsprintfW(o3tl::toW(Ident) + wcslen(o3tl::toW(Ident)),
- L"0x%02hx%02hx%02hx%02hx%02hx%02hx",
- static_cast<USHORT>(psia->Value[0]),
- static_cast<USHORT>(psia->Value[1]),
- static_cast<USHORT>(psia->Value[2]),
- static_cast<USHORT>(psia->Value[3]),
- static_cast<USHORT>(psia->Value[4]),
- static_cast<USHORT>(psia->Value[5]));
+ rtl_uString_newFromStr(strIdent, o3tl::toU(pSidStr));
+ LocalFree(pSidStr);
}
else
{
- dwSidSize+=wsprintfW(o3tl::toW(Ident) + wcslen(o3tl::toW(Ident)),
- L"%lu",
- static_cast<ULONG>(psia->Value[5] ) +
- static_cast<ULONG>(psia->Value[4] << 8) +
- static_cast<ULONG>(psia->Value[3] << 16) +
- static_cast<ULONG>(psia->Value[2] << 24) );
+ const DWORD dwError = GetLastError();
+ char sBuf[100];
+ sprintf(sBuf, "ConvertSidToStringSidW failed. GetLastError returned: %d",
+ dwError);
+ SAL_WARN("sal.osl", sBuf);
}
- /* loop through SidSubAuthorities */
- for (dwCounter=0; dwCounter < dwSubAuthorities; dwCounter++)
- {
- dwSidSize+=wsprintfW(o3tl::toW(Ident) + dwSidSize, L"-%lu",
- *GetSidSubAuthority(pSid, dwCounter) );
- }
-
- rtl_uString_newFromStr( strIdent, Ident );
-
free(pInfoBuffer);
- free(Ident);
- return true;
+ return bResult;
}
}
else
diff --git a/sal/qa/osl/security/osl_Security.cxx b/sal/qa/osl/security/osl_Security.cxx
index 5c24b8260c4c..a1dff025ce70 100644
--- a/sal/qa/osl/security/osl_Security.cxx
+++ b/sal/qa/osl/security/osl_Security.cxx
@@ -23,6 +23,7 @@
# define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
+#include <sddl.h>
#undef min
#endif
#include "osl_Security_Const.h"
@@ -477,58 +478,17 @@ void MyTestPlugInImpl::initialize( CPPUNIT_NS::TestFactoryRegistry *,
}
}
- // now got SID successfully, only need to compare SID, so I copied the rest lines from source to convert SID to OUString.
- PSID_IDENTIFIER_AUTHORITY psia;
- DWORD dwSubAuthorities;
- DWORD dwSidRev=SID_REVISION;
- DWORD dwCounter;
- DWORD dwSidSize;
- wchar_t *Ident;
-
- /* obtain SidIdentifierAuthority */
- psia=GetSidIdentifierAuthority(pSid);
-
- /* obtain sidsubauthority count */
- dwSubAuthorities=std::min(static_cast<int>(*GetSidSubAuthorityCount(pSid)), 5);
-
- /* buffer length: S-SID_REVISION- + identifierauthority- + subauthorities- + NULL */
- Ident=static_cast<wchar_t *>(malloc(88*sizeof(wchar_t)));
-
- /* prepare S-SID_REVISION- */
- dwSidSize=wsprintfW(Ident, L"S-%lu-", dwSidRev);
-
- /* prepare SidIdentifierAuthority */
- if ((psia->Value[0] != 0) || (psia->Value[1] != 0))
+ LPWSTR pSidStr = nullptr;
+ if (ConvertSidToStringSidW(pSid, &pSidStr))
{
- dwSidSize+=wsprintfW(Ident + wcslen(Ident),
- L"0x%02hx%02hx%02hx%02hx%02hx%02hx",
- static_cast<sal_uInt16>(psia->Value[0]),
- static_cast<sal_uInt16>(psia->Value[1]),
- static_cast<sal_uInt16>(psia->Value[2]),
- static_cast<sal_uInt16>(psia->Value[3]),
- static_cast<sal_uInt16>(psia->Value[4]),
- static_cast<sal_uInt16>(psia->Value[5]));
+ strUserID = o3tl::toU(pSidStr);
+ LocalFree(pSidStr);
}
else
{
- dwSidSize+=wsprintfW(Ident + wcslen(Ident),
- L"%lu",
- static_cast<sal_uInt32>(psia->Value[5] ) +
- static_cast<sal_uInt32>(psia->Value[4] << 8) +
- static_cast<sal_uInt32>(psia->Value[3] << 16) +
- static_cast<sal_uInt32>(psia->Value[2] << 24) );
+ wprintf(L"# ConvertSidToStringSidW failed. GetLastError returned: %d\n", GetLastError());
}
- /* loop through SidSubAuthorities */
- for (dwCounter=0; dwCounter < dwSubAuthorities; dwCounter++)
- {
- dwSidSize+=wsprintfW(Ident + dwSidSize, L"-%lu",
- *GetSidSubAuthority(pSid, dwCounter) );
- }
-
- strUserID = o3tl::toU(Ident);
-
- free(Ident);
delete [] static_cast<BYTE*>(pSid);
delete [] wszDomainName;