wimlib-imagex: Correctly detect failure to acquire privileges
authorEric Biggers <ebiggers3@gmail.com>
Wed, 14 Aug 2013 16:40:38 +0000 (11:40 -0500)
committerEric Biggers <ebiggers3@gmail.com>
Wed, 14 Aug 2013 16:40:53 +0000 (11:40 -0500)
programs/imagex-win32.c
programs/imagex.c

index e6e751a..146e07f 100644 (file)
@@ -127,30 +127,34 @@ win32_modify_privilege(const wchar_t *privilege, bool enable)
        HANDLE hToken;
        LUID luid;
        TOKEN_PRIVILEGES newState;
-       bool ret = false;
+       bool ret = FALSE;
 
        if (!OpenProcessToken(GetCurrentProcess(),
                              TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
                              &hToken))
                goto out;
 
-       if (!LookupPrivilegeValueW(NULL, privilege, &luid))
-               goto out;
+       if (!LookupPrivilegeValue(NULL, privilege, &luid))
+               goto out_close_handle;
 
        newState.PrivilegeCount = 1;
        newState.Privileges[0].Luid = luid;
        newState.Privileges[0].Attributes = (enable ? SE_PRIVILEGE_ENABLED : 0);
+       SetLastError(ERROR_SUCCESS);
        ret = AdjustTokenPrivileges(hToken, FALSE, &newState, 0, NULL, NULL);
+       if (ret && GetLastError() == ERROR_NOT_ALL_ASSIGNED)
+               ret = FALSE;
+out_close_handle:
        CloseHandle(hToken);
 out:
-       if (!ret) {
-               fwprintf(stderr, L"WARNING: Failed to %ls privilege %s\n",
-                       enable ? L"enable" : L"disable", privilege);
+       if (!ret && enable) {
                fwprintf(stderr,
-                       L"WARNING: The program will continue, "
-                       L"but if permission issues are\n"
-                       L"encountered, you may need to run "
-                       L"this program as the administrator\n");
+                        L"WARNING: Failed to enable %ls!\n"
+                        "          The program will continue, but if "
+                        "permission issues are\n"
+                        "         encountered, you may need to run "
+                        "this program as the Administrator.\n",
+                        privilege);
        }
        return ret;
 }
index 788ba90..d5abe37 100644 (file)
@@ -3767,8 +3767,8 @@ main(int argc, char **argv)
                exit(2);
        }
 
-       /* Enable warning and error messages in the library to be more
-        * user-friendly.  */
+       /* Enable warning and error messages in wimlib be more user-friendly.
+        * */
        wimlib_set_print_errors(true);
 
        /* Initialize wimlib.  */