netapi32: NetUserGetInfo should return Admin priviledge - wine users run as Administrators

Jeff Latimer <[email protected]> Mon, 4 Jun 2018 13:13:07 +1000
Newsgroups gmane.comp.emulators.wine.patches
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------2A34C7471782EB285B8A5362
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

---
 dlls/netapi32/netapi32.c     | 11 +++++++----
 dlls/netapi32/tests/access.c | 17 +++++++++++++++++
 2 files changed, 24 insertions(+), 4 deletions(-)



--------------2A34C7471782EB285B8A5362
Content-Type: text/x-patch;
 name="0008-netapi32-NetUserGetInfo-should-return-Admin-priviled.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename*0="0008-netapi32-NetUserGetInfo-should-return-Admin-priviled.pa";
 filename*1="tch"

diff --git a/dlls/netapi32/netapi32.c b/dlls/netapi32/netapi32.c
index ff57c223b4..3c4437de8d 100644
--- a/dlls/netapi32/netapi32.c
+++ b/dlls/netapi32/netapi32.c
@@ -2231,7 +2231,7 @@ NetUserGetInfo(LPCWSTR servername, LPCWSTR username, DWORD level,
         home_dir_sz = GetEnvironmentVariableW(homedirW, NULL,0);
         /* set up buffer */
         NetApiBufferAllocate(sizeof(USER_INFO_1) +
-                             (name_sz + password_sz + home_dir_sz +
+                             (name_sz + password_sz + home_dir_sz + 1 +
                               comment_sz + script_path_sz) * sizeof(WCHAR),
                              (LPVOID *) bufptr);
 
@@ -2239,15 +2239,18 @@ NetUserGetInfo(LPCWSTR servername, LPCWSTR username, DWORD level,
         ui->usri1_name = (LPWSTR) (ui + 1);
         ui->usri1_password = ui->usri1_name + name_sz;
         ui->usri1_home_dir = ui->usri1_password + password_sz;
-        ui->usri1_comment = ui->usri1_home_dir + home_dir_sz;
+        ui->usri1_comment = ui->usri1_home_dir + home_dir_sz +1;
         ui->usri1_script_path = ui->usri1_comment + comment_sz;
         /* set data */
         lstrcpyW(ui->usri1_name, ui0->usri0_name);
         NetApiBufferFree(ui0);
         ui->usri1_password[0] = 0;
         ui->usri1_password_age = 0;
-        ui->usri1_priv = 0;
-        GetEnvironmentVariableW(homedirW, ui->usri1_home_dir,home_dir_sz);
+        ui->usri1_priv = USER_PRIV_ADMIN;
+        if (home_dir_sz)
+            GetEnvironmentVariableW(homedirW, ui->usri1_home_dir,home_dir_sz +1);
+        else
+            ui->usri1_home_dir[0] = 0;
         ui->usri1_comment[0] = 0;
         ui->usri1_flags = 0;
         ui->usri1_script_path[0] = 0;
diff --git a/dlls/netapi32/tests/access.c b/dlls/netapi32/tests/access.c
index f095d77320..34247a09d2 100644
--- a/dlls/netapi32/tests/access.c
+++ b/dlls/netapi32/tests/access.c
@@ -113,6 +113,7 @@ static void run_usergetinfo_tests(void)
 {
     NET_API_STATUS rc;
     PUSER_INFO_0 ui0 = NULL;
+    PUSER_INFO_1 ui1 = NULL;
     PUSER_INFO_10 ui10 = NULL;
     DWORD dwSize;
 
@@ -131,6 +132,22 @@ static void run_usergetinfo_tests(void)
                   (lstrlenW(ui0->usri0_name) + 1) * sizeof(WCHAR)),
        "Is allocated with NetApiBufferAllocate\n");
 
+    /* Level 1 */
+    rc=pNetUserGetInfo(NULL, sTestUserName, 1, (LPBYTE *)&ui1);
+    ok(rc == NERR_Success, "NetUserGetInfo level 1 failed: 0x%08x.\n", rc);
+    ok(!lstrcmpW(sTestUserName, ui1->usri1_name), "Username mismatch for level 1.\n");
+    pNetApiBufferSize(ui1, &dwSize);
+    ok(dwSize >= (sizeof(USER_INFO_1) +
+                  (lstrlenW(ui1->usri1_name) + 1 +
+                   lstrlenW(ui1->usri1_password) + 1 +
+                   lstrlenW(ui1->usri1_home_dir) + 1 +
+                   lstrlenW(ui1->usri1_comment) + 1 +
+                   lstrlenW(ui1->usri1_script_path) + 1) * sizeof(WCHAR)),
+       "Is allocated with NetApiBufferAllocate\n");
+    ok(ui1->usri1_priv == USER_PRIV_ADMIN, "Administrator priviledge not set\n");
+
+    pNetApiBufferFree(ui1);
+
     /* Level 10 */
     rc=pNetUserGetInfo(NULL, sTestUserName, 10, (LPBYTE *)&ui10);
     ok(rc == NERR_Success, "NetUserGetInfo level 10 failed: 0x%08x.\n", rc);


--------------2A34C7471782EB285B8A5362
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

Cg==

--------------2A34C7471782EB285B8A5362--