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-- |
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); |