diff options
author | Nalin Dahyabhai <nalin@redhat.com> | 2012-08-22 14:43:05 -0400 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2012-08-22 15:37:45 -0400 |
commit | b7a3eb501f8eef61b7767445b2e09b4dca813c82 (patch) | |
tree | a8b620bf3014a4c28a7cbb8a6f7acffd16e29a69 /utils/gssd/krb5_util.c | |
parent | 1c787f1471d733f8a90b46924945c59de7478bac (diff) | |
download | nfs-utils-b7a3eb501f8eef61b7767445b2e09b4dca813c82.tar.gz nfs-utils-b7a3eb501f8eef61b7767445b2e09b4dca813c82.tar.xz nfs-utils-b7a3eb501f8eef61b7767445b2e09b4dca813c82.zip |
gssd: Use /run/user/${UID} instead of /run/user/${USER}
Newer versions of systemd create a /run/user/${UID} directory
instead of the /run/user/${USER} directory, so switch to
scanning for that. To make the per-user directory bit a little
less magical, change the default to incorporate a "%U", which
gets dynamically expanded to the user's UID when needed.
Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'utils/gssd/krb5_util.c')
-rw-r--r-- | utils/gssd/krb5_util.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/utils/gssd/krb5_util.c b/utils/gssd/krb5_util.c index 2389276..60ba594 100644 --- a/utils/gssd/krb5_util.c +++ b/utils/gssd/krb5_util.c @@ -1036,16 +1036,38 @@ err_cache: * Returns 0 if a ccache was found, and a non-zero error code otherwise. */ int -gssd_setup_krb5_user_gss_ccache(uid_t uid, char *servername, char *dirname) +gssd_setup_krb5_user_gss_ccache(uid_t uid, char *servername, char *dirpattern) { - char buf[MAX_NETOBJ_SZ]; + char buf[MAX_NETOBJ_SZ], dirname[PATH_MAX]; const char *cctype; struct dirent *d; - int err; + int err, i, j; printerr(2, "getting credentials for client with uid %u for " "server %s\n", uid, servername); - memset(buf, 0, sizeof(buf)); + + for (i = 0, j = 0; dirpattern[i] != '\0'; i++) { + switch (dirpattern[i]) { + case '%': + switch (dirpattern[i + 1]) { + case '%': + dirname[j++] = dirpattern[i]; + i++; + break; + case 'U': + j += sprintf(dirname + j, "%lu", + (unsigned long) uid); + i++; + break; + } + break; + default: + dirname[j++] = dirpattern[i]; + break; + } + } + dirname[j] = '\0'; + err = gssd_find_existing_krb5_ccache(uid, dirname, &cctype, &d); if (err) return err; |