From: VMware, Inc <> Date: Thu, 27 Oct 2011 18:52:03 +0000 (-0700) Subject: make POSIX version of ProcMgr_ImpersonateUserStart i18n friendly. X-Git-Tag: 2011.10.26-514583~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6271fde90248a4fd49e38aa61498db9e1dbf37c3;p=thirdparty%2Fopen-vm-tools.git make POSIX version of ProcMgr_ImpersonateUserStart i18n friendly. Signed-off-by: Marcelo Vanzin --- diff --git a/open-vm-tools/lib/procMgr/procMgrPosix.c b/open-vm-tools/lib/procMgr/procMgrPosix.c index a7d205e10..1f671da34 100644 --- a/open-vm-tools/lib/procMgr/procMgrPosix.c +++ b/open-vm-tools/lib/procMgr/procMgrPosix.c @@ -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; } diff --git a/open-vm-tools/lib/procMgr/procMgrSolaris.c b/open-vm-tools/lib/procMgr/procMgrSolaris.c index a5c4142d9..53672d005 100644 --- a/open-vm-tools/lib/procMgr/procMgrSolaris.c +++ b/open-vm-tools/lib/procMgr/procMgrSolaris.c @@ -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; }