[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 1/1] qga-win: fix installation on localized w
From: |
Sameeh Jubran |
Subject: |
Re: [Qemu-devel] [PATCH v2 1/1] qga-win: fix installation on localized windows |
Date: |
Sun, 14 May 2017 15:53:20 +0300 |
Reviewed-by: Sameeh Jubran <address@hidden>
On Thu, Apr 27, 2017 at 4:21 PM, Daniel Rempel <address@hidden> wrote:
> Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1357789
> Replace hardcoded user and group names ("Administrators", "SYSTEM") with
> the ones acquired from system. Windows uses localized strings for these
> names and it may cause the installation to fail.
> Windows has Well-known SIDs for "Administrators" group and "SYSTEM" user
> so they were used to identify required users and groups.
> Well-known SIDs: https://support.microsoft.com/
> en-us/help/243330/well-known-security-identifiers-in-
> windows-operating-systems
>
> Signed-off-by: Daniel Rempel <address@hidden>
> ---
> qga/vss-win32/install.cpp | 35 +++++++++++++++++++++++++++++++++--
> 1 file changed, 33 insertions(+), 2 deletions(-)
>
> diff --git a/qga/vss-win32/install.cpp b/qga/vss-win32/install.cpp
> index f4160a3..1be482a 100644
> --- a/qga/vss-win32/install.cpp
> +++ b/qga/vss-win32/install.cpp
> @@ -18,6 +18,9 @@
> #include <wbemidl.h>
> #include <comdef.h>
> #include <comutil.h>
> +#include <sddl.h>
> +
> +#define BUFFER_SIZE 1024
>
> extern HINSTANCE g_hinstDll;
>
> @@ -135,6 +138,27 @@ out:
> return hr;
> }
>
> +/* Acquire group or user name by SID */
> +static HRESULT getNameByStringSID(
> + const wchar_t *sid, LPWSTR buffer, LPDWORD bufferLen)
> +{
> + HRESULT hr = S_OK;
> + PSID psid = NULL;
> + SID_NAME_USE groupType;
> + DWORD domainNameLen = BUFFER_SIZE;
> + wchar_t domainName[BUFFER_SIZE];
> +
> + chk(ConvertStringSidToSidW(sid, &psid));
> + LookupAccountSidW(NULL, psid, buffer, bufferLen,
> + domainName, &domainNameLen, &groupType);
> + hr = HRESULT_FROM_WIN32(GetLastError());
> +
> + LocalFree(psid);
> +
> +out:
> + return hr;
> +}
> +
> /* Find and iterate QGA VSS provider in COM+ Application Catalog */
> static HRESULT QGAProviderFind(
> HRESULT (*found)(ICatalogCollection *, int, void *), void *arg)
> @@ -216,6 +240,10 @@ STDAPI COMRegister(void)
> CHAR dllPath[MAX_PATH], tlbPath[MAX_PATH];
> bool unregisterOnFailure = false;
> int count = 0;
> + DWORD bufferLen = BUFFER_SIZE;
> + wchar_t buffer[BUFFER_SIZE];
> + const wchar_t *administratorsGroupSID = L"S-1-5-32-544";
> + const wchar_t *systemUserSID = L"S-1-5-18";
>
> if (!g_hinstDll) {
> errmsg(E_FAIL, "Failed to initialize DLL");
> @@ -284,11 +312,12 @@ STDAPI COMRegister(void)
>
> /* Setup roles of the applicaion */
>
> + chk(getNameByStringSID(administratorsGroupSID, buffer, &bufferLen));
> chk(pApps->GetCollection(_bstr_t(L"Roles"), key,
> (IDispatch **)pRoles.replace()));
> chk(pRoles->Populate());
> chk(pRoles->Add((IDispatch **)pObj.replace()));
> - chk(put_Value(pObj, L"Name", L"Administrators"));
> + chk(put_Value(pObj, L"Name", buffer));
> chk(put_Value(pObj, L"Description", L"Administrators group"));
> chk(pRoles->SaveChanges(&n));
> chk(pObj->get_Key(&key));
> @@ -303,8 +332,10 @@ STDAPI COMRegister(void)
> chk(GetAdminName(&name));
> chk(put_Value(pObj, L"User", _bstr_t(".\\") + name));
>
> + bufferLen = BUFFER_SIZE;
> + chk(getNameByStringSID(systemUserSID, buffer, &bufferLen));
> chk(pUsersInRole->Add((IDispatch **)pObj.replace()));
> - chk(put_Value(pObj, L"User", L"SYSTEM"));
> + chk(put_Value(pObj, L"User", buffer));
> chk(pUsersInRole->SaveChanges(&n));
>
> out:
> --
> 2.9.3
>
>
>
--
Respectfully,
*Sameeh Jubran*
*Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>*
*Software Engineer @ Daynix <http://www.daynix.com>.*
- Re: [Qemu-devel] [PATCH v2 1/1] qga-win: fix installation on localized windows,
Sameeh Jubran <=