components/trousers/patches/tspi_ps_tspps.c.patch
author Dan Anderson <dan.anderson@oracle.com>
Fri, 11 Apr 2014 13:57:15 -0700
changeset 1825 6864cd9b9a00
parent 777 e2e604cdbd6a
child 5941 db8aa9865e9f
permissions -rw-r--r--
18552401 trousers doesn't build on 45
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1825
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
     1
#
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
     2
# tspi_ps_tspps.c.patch
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
     3
# This change implements Solaris-specific locations for the
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
     4
# TSS PS (persistent storage), aka TPM keystore.
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
     5
# It is not suitable for upstream use.  This change was implemented in-house.
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
     6
#
259
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
     7
--- src/tspi/ps/tspps.c.orig	2011-03-24 13:06:14.607907754 -0700
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
     8
+++ src/tspi/ps/tspps.c	2011-03-24 13:07:30.668528209 -0700
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
     9
@@ -70,9 +70,12 @@
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    10
 	TSS_RESULT result;
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    11
 	char *file_name = NULL, *home_dir = NULL;
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    12
 	struct passwd *pwp;
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    13
-#if (defined (__linux) || defined (linux) || defined(__GLIBC__))
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    14
+#if (defined (__linux) || defined (linux) || defined(__GLIBC__) || defined(SOLARIS))
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    15
 	struct passwd pw;
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    16
 #endif
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    17
+#ifdef SOLARIS
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    18
+	char pwbuf[PASSWD_BUFSIZE];
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    19
+#endif
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    20
 	struct stat stat_buf;
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    21
 	char buf[PASSWD_BUFSIZE];
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    22
 	uid_t euid;
1825
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
    23
@@ -94,9 +97,15 @@
259
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    24
          * in the user's home directory, which may be shared
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    25
          * by multiple systems.
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    26
          *
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    27
-         * The directory path on Solaris is /var/tpm/userps/[EUID]/
1825
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
    28
+         * The directory path on Solaris is /var/user/[USERNAME]/tpm/userps
259
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    29
          */
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    30
-        rc = snprintf(buf, sizeof (buf), "%s/%d", TSS_USER_PS_DIR, euid);
1825
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
    31
+	rc = getpwuid_r(euid, &pw, pwbuf, sizeof (pwbuf), &pwp);
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
    32
+	if ((rc != 0) || (pwp == NULL)) {
259
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    33
+		return TSPERR(TSS_E_INTERNAL_ERROR);
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    34
+	}
1825
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
    35
+	rc = snprintf(buf, sizeof (buf), "/var/user/%s/tpm/userps",
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
    36
+	    pwp->pw_name);
6864cd9b9a00 18552401 trousers doesn't build on 45
Dan Anderson <dan.anderson@oracle.com>
parents: 777
diff changeset
    37
+
259
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    38
 #else
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    39
 	setpwent();
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    40
 	while (1) {
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    41
@@ -142,7 +152,7 @@
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    42
 		if (errno == ENOENT) {
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    43
 			errno = 0;
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    44
 			/* Create the user's ps directory if it is not there. */
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    45
-			if ((rc = mkdir(buf, 0700)) == -1) {
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    46
+			if ((rc = mkdirp(buf, 0700)) == -1) {
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    47
 				LogDebugFn("USER PS: Error creating dir: %s: %s", buf,
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    48
 					   strerror(errno));
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    49
 				result = TSPERR(TSS_E_INTERNAL_ERROR);
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    50
@@ -157,8 +167,8 @@
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    51
 
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    52
 	/* Directory exists or has been created, return the path to the file */
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    53
 #if defined (SOLARIS)
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    54
-	rc = snprintf(buf, sizeof (buf), "%s/%d/%s", TSS_USER_PS_DIR, euid,
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    55
-		      TSS_USER_PS_FILE);
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    56
+	rc = snprintf(buf, sizeof (buf), "/var/user/%s/tpm/userps/%s",
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    57
+	    pwp->pw_name, TSS_USER_PS_FILE);
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    58
 #else
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    59
 	rc = snprintf(buf, sizeof (buf), "%s/%s/%s", home_dir, TSS_USER_PS_DIR,
520697a05dde 7045320 Move trousers from SFW to Userland
Wyllys Ingersoll <Wyllys.Ingersoll@Oracle.COM>
parents:
diff changeset
    60
 		      TSS_USER_PS_FILE);