]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/gssd/gssd.c
Kerberos credentials may be stored in multiple places. Make it
[nfs-utils.git] / utils / gssd / gssd.c
index 747637c636ef4234295780649924269916e6212e..e8612a59631c09838796d7368eae71403a65dd76 100644 (file)
@@ -57,6 +57,7 @@ char pipefs_dir[PATH_MAX] = GSSD_PIPEFS_DIR;
 char pipefs_nfsdir[PATH_MAX] = GSSD_PIPEFS_DIR;
 char keytabfile[PATH_MAX] = GSSD_DEFAULT_KEYTAB_FILE;
 char ccachedir[PATH_MAX] = GSSD_DEFAULT_CRED_DIR;
+char *ccachesearch[GSSD_MAX_CCACHE_SEARCH + 1];
 int  use_memcache = 0;
 int  root_uses_machine_creds = 1;
 
@@ -81,7 +82,7 @@ sig_hup(int signal)
 static void
 usage(char *progname)
 {
-       fprintf(stderr, "usage: %s [-f] [-n] [-v] [-r] [-p pipefsdir] [-k keytab] [-d ccachedir]\n",
+       fprintf(stderr, "usage: %s [-f] [-M] [-n] [-v] [-r] [-p pipefsdir] [-k keytab] [-d ccachedir]\n",
                progname);
        exit(1);
 }
@@ -93,9 +94,11 @@ main(int argc, char *argv[])
        int verbosity = 0;
        int rpc_verbosity = 0;
        int opt;
+       int i;
        extern char *optarg;
        char *progname;
 
+       memset(ccachesearch, 0, sizeof(ccachesearch));
        while ((opt = getopt(argc, argv, "fvrmnMp:k:d:")) != -1) {
                switch (opt) {
                        case 'f':
@@ -136,6 +139,13 @@ main(int argc, char *argv[])
                                break;
                }
        }
+
+       i = 0;
+       ccachesearch[i++] = strtok(ccachedir, ":");
+       do {
+               ccachesearch[i++] = strtok(NULL, ":");
+       } while (ccachesearch[i-1] != NULL && i < GSSD_MAX_CCACHE_SEARCH);
+
        snprintf(pipefs_nfsdir, sizeof(pipefs_nfsdir), "%s/%s",
                 pipefs_dir, GSSD_SERVICE_NAME);
        if (pipefs_nfsdir[sizeof(pipefs_nfsdir)-1] != '\0')
@@ -165,10 +175,6 @@ main(int argc, char *argv[])
        signal(SIGTERM, sig_die);
        signal(SIGHUP, sig_hup);
 
-       /* Process keytab file and get machine credentials */
-       if (root_uses_machine_creds)
-               gssd_refresh_krb5_machine_creds();
-
        gssd_run();
        printerr(0, "gssd_run returned!\n");
        abort();