[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: |
Wed, 21 Jun 2017 09:55:43 +0300 |
This patch have been waiting too long for a review, Can someone please
review it!!
On Thu, Jun 1, 2017 at 3:07 PM, Sameeh Jubran <address@hidden> wrote:
> Can someone review this patch please?
>
> On Thu, May 25, 2017 at 2:06 PM, Sameeh Jubran <address@hidden> wrote:
>
>> Ping
>>
>> On Sun, May 14, 2017 at 3:53 PM, Sameeh Jubran <address@hidden> wrote:
>>
>>> 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>.*
>>>
>>
>>
>>
>> --
>> Respectfully,
>> *Sameeh Jubran*
>> *Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>*
>> *Software Engineer @ Daynix <http://www.daynix.com>.*
>>
>
>
>
> --
> Respectfully,
> *Sameeh Jubran*
> *Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>*
> *Software Engineer @ Daynix <http://www.daynix.com>.*
>
--
Respectfully,
*Sameeh Jubran*
*Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>*
*Software Engineer @ Daynix <http://www.daynix.com>.*