]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
make POSIX version of ProcMgr_ImpersonateUserStart i18n friendly.
authorVMware, Inc <>
Thu, 27 Oct 2011 18:52:03 +0000 (11:52 -0700)
committerMarcelo Vanzin <mvanzin@vmware.com>
Thu, 27 Oct 2011 18:52:03 +0000 (11:52 -0700)
Signed-off-by: Marcelo Vanzin <mvanzin@vmware.com>
open-vm-tools/lib/procMgr/procMgrPosix.c
open-vm-tools/lib/procMgr/procMgrSolaris.c

index a7d205e1085df141cad1c07f13558f6f288c4aba..1f671da34daf004af38a8f42404d5e07a1cc21e6 100644 (file)
@@ -1900,6 +1900,7 @@ ProcMgr_ImpersonateUserStart(const char *user,  // IN: UTF-8 encoded user name
    gid_t root_gid;
    int error;
    int ret;
+   char *userLocal;
 
    if ((error = getpwuid_r(0, &pw, buffer, sizeof buffer, &ppw)) != 0 ||
        !ppw) {
@@ -1916,8 +1917,18 @@ ProcMgr_ImpersonateUserStart(const char *user,  // IN: UTF-8 encoded user name
 
    root_gid = ppw->pw_gid;
 
-   if ((error = getpwnam_r(user, &pw, buffer, sizeof buffer, &ppw)) != 0 ||
-       !ppw) {
+   /* convert user name to local character set */
+   userLocal = (char *)Unicode_GetAllocBytes(user, Unicode_GetCurrentEncoding());
+   if (!userLocal) {
+       Warning("Failed to convert user name %s to local character set.\n", user);
+       return FALSE;
+   }
+
+   error = getpwnam_r(userLocal, &pw, buffer, sizeof buffer, &ppw);
+
+   free(userLocal);
+
+   if (error != 0 || !ppw) {
       if (error == 0) {
          error = ENOENT;
       }
index a5c4142d9f698f7f8be95e5b1c4df6fff32d17e5..53672d005662f920ae460f3044a255719cdd3a77 100644 (file)
@@ -564,6 +564,7 @@ ProcMgr_ImpersonateUserStart(const char *user,  // IN: UTF-8 encoded user name
    struct passwd *ppw;
    gid_t root_gid;
    int ret;
+   char *userLocal;
 
    ppw = &pw;
    if ((ppw = getpwuid_r(0, &pw, buffer, sizeof buffer)) == NULL) {
@@ -572,7 +573,18 @@ ProcMgr_ImpersonateUserStart(const char *user,  // IN: UTF-8 encoded user name
 
    root_gid = ppw->pw_gid;
 
-   if ((ppw = getpwnam_r(user, &pw, buffer, sizeof buffer)) == NULL) {
+   /* convert user name to local character set */
+   userLocal = (char *)Unicode_GetAllocBytes(user, Unicode_GetCurrentEncoding());
+   if (!userLocal) {
+       Warning("Failed to convert user name %s to local character set.\n", user);
+       return FALSE;
+   }
+
+   ppw = getpwnam_r(userLocal, &pw, buffer, sizeof buffer);
+
+   free(userLocal);
+
+   if (ppw == NULL) {
       return FALSE;
    }