components/trousers/patches/tspi_ps_tspps.c.patch
author Vladimir Marek <Vladimir.Marek@oracle.com>
Mon, 10 Apr 2017 11:54:32 -0700
branchs11u3-sru
changeset 7853 87236a3c36b4
parent 777 e2e604cdbd6a
child 1825 6864cd9b9a00
permissions -rw-r--r--
25694511 xattr can't be built on recent CBE

--- src/tspi/ps/tspps.c.orig	2011-03-24 13:06:14.607907754 -0700
+++ src/tspi/ps/tspps.c	2011-03-24 13:07:30.668528209 -0700
@@ -70,9 +70,12 @@
 	TSS_RESULT result;
 	char *file_name = NULL, *home_dir = NULL;
 	struct passwd *pwp;
-#if (defined (__linux) || defined (linux) || defined(__GLIBC__))
+#if (defined (__linux) || defined (linux) || defined(__GLIBC__) || defined(SOLARIS))
 	struct passwd pw;
 #endif
+#ifdef SOLARIS
+	char pwbuf[PASSWD_BUFSIZE];
+#endif
 	struct stat stat_buf;
 	char buf[PASSWD_BUFSIZE];
 	uid_t euid;
@@ -94,9 +97,16 @@
          * in the user's home directory, which may be shared
          * by multiple systems.
          *
-         * The directory path on Solaris is /var/tpm/userps/[EUID]/
+         * The directory path on Solaris is /var/user[USERNAME]/tpm/userps
          */
-        rc = snprintf(buf, sizeof (buf), "%s/%d", TSS_USER_PS_DIR, euid);
+
+	pwp = getpwuid_r(euid, &pw, pwbuf, sizeof (pwbuf));
+	if (pwp != NULL) {
+		rc = snprintf(buf, sizeof (buf), "/var/user/%s/tpm/userps",
+		    pwp->pw_name);
+	} else {
+		return TSPERR(TSS_E_INTERNAL_ERROR);
+	}
 #else
 	setpwent();
 	while (1) {
@@ -142,7 +152,7 @@
 		if (errno == ENOENT) {
 			errno = 0;
 			/* Create the user's ps directory if it is not there. */
-			if ((rc = mkdir(buf, 0700)) == -1) {
+			if ((rc = mkdirp(buf, 0700)) == -1) {
 				LogDebugFn("USER PS: Error creating dir: %s: %s", buf,
 					   strerror(errno));
 				result = TSPERR(TSS_E_INTERNAL_ERROR);
@@ -157,8 +167,8 @@
 
 	/* Directory exists or has been created, return the path to the file */
 #if defined (SOLARIS)
-	rc = snprintf(buf, sizeof (buf), "%s/%d/%s", TSS_USER_PS_DIR, euid,
-		      TSS_USER_PS_FILE);
+	rc = snprintf(buf, sizeof (buf), "/var/user/%s/tpm/userps/%s",
+	    pwp->pw_name, TSS_USER_PS_FILE);
 #else
 	rc = snprintf(buf, sizeof (buf), "%s/%s/%s", home_dir, TSS_USER_PS_DIR,
 		      TSS_USER_PS_FILE);