Index: /trunk/src/VBox/Runtime/r3/posix/process-posix.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/posix/process-posix.cpp	(revision 29623)
+++ /trunk/src/VBox/Runtime/r3/posix/process-posix.cpp	(revision 29624)
@@ -39,5 +39,5 @@
 #include <fcntl.h>
 #include <signal.h>
-#if defined(RT_OS_LINUX)
+#if defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS)
 # include <crypt.h>
 # include <pwd.h>
@@ -101,4 +101,27 @@
     *gid = pw->pw_gid;
     *uid = pw->pw_uid;
+    return VINF_SUCCESS;
+#elif defined(RT_OS_SOLARIS)
+    struct passwd *ppw, pw;
+    char szBuf[1024];
+
+    if (getpwnam_r(pszUser, &pw, szBuf, sizeof(szBuf), &ppw) != 0 || ppw == NULL)
+        return VERR_PERMISSION_DENIED;
+
+    if (!pszPasswd)
+        pszPasswd = "";
+
+    struct spwd spwd;
+    char szPwdBuf[1024];
+    /* works only if /etc/shadow is accessible */
+    if (getspnam_r(pszUser, &spwd, szPwdBuf, sizeof(szPwdBuf)) != NULL)
+        ppw->pw_passwd = spwd.sp_pwdp;
+
+    char *pszEncPasswd = crypt(pszPasswd, ppw->pw_passwd);
+    if (strcmp(pszEncPasswd, ppw->pw_passwd))
+        return VERR_PERMISSION_DENIED;
+
+    *gid = ppw->pw_gid;
+    *uid = ppw->pw_uid;
     return VINF_SUCCESS;
 #else
