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--