]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/gssd/gssd.c
Fix the usage message for gssd to reflect new option
[nfs-utils.git] / utils / gssd / gssd.c
index 9988fe4ab6f85f04f93fdeda78fbd095f2fb595f..bbcad20d1c7ae50882edd8f6afba93141c475c09 100644 (file)
 #include "gss_util.h"
 #include "krb5_util.h"
 
 #include "gss_util.h"
 #include "krb5_util.h"
 
-char pipefsdir[PATH_MAX] = GSSD_PIPEFS_DIR;
+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;
 int  use_memcache = 0;
 char keytabfile[PATH_MAX] = GSSD_DEFAULT_KEYTAB_FILE;
 char ccachedir[PATH_MAX] = GSSD_DEFAULT_CRED_DIR;
 int  use_memcache = 0;
+int  root_uses_machine_creds = 1;
 
 void
 sig_die(int signal)
 {
        /* destroy krb5 machine creds */
 
 void
 sig_die(int signal)
 {
        /* destroy krb5 machine creds */
-       gssd_destroy_krb5_machine_creds();
+       if (root_uses_machine_creds)
+               gssd_destroy_krb5_machine_creds();
        printerr(1, "exiting on signal %d\n", signal);
        exit(1);
 }
        printerr(1, "exiting on signal %d\n", signal);
        exit(1);
 }
@@ -78,7 +81,7 @@ sig_hup(int signal)
 static void
 usage(char *progname)
 {
 static void
 usage(char *progname)
 {
-       fprintf(stderr, "usage: %s [-f] [-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);
 }
                progname);
        exit(1);
 }
@@ -93,7 +96,7 @@ main(int argc, char *argv[])
        extern char *optarg;
        char *progname;
 
        extern char *optarg;
        char *progname;
 
-       while ((opt = getopt(argc, argv, "fvrmMp:k:d:")) != -1) {
+       while ((opt = getopt(argc, argv, "fvrmnMp:k:d:")) != -1) {
                switch (opt) {
                        case 'f':
                                fg = 1;
                switch (opt) {
                        case 'f':
                                fg = 1;
@@ -104,6 +107,9 @@ main(int argc, char *argv[])
                        case 'M':
                                use_memcache = 1;
                                break;
                        case 'M':
                                use_memcache = 1;
                                break;
+                       case 'n':
+                               root_uses_machine_creds = 0;
+                               break;
                        case 'v':
                                verbosity++;
                                break;
                        case 'v':
                                verbosity++;
                                break;
@@ -111,8 +117,8 @@ main(int argc, char *argv[])
                                rpc_verbosity++;
                                break;
                        case 'p':
                                rpc_verbosity++;
                                break;
                        case 'p':
-                               strncpy(pipefsdir, optarg, sizeof(pipefsdir));
-                               if (pipefsdir[sizeof(pipefsdir)-1] != '\0')
+                               strncpy(pipefs_dir, optarg, sizeof(pipefs_dir));
+                               if (pipefs_dir[sizeof(pipefs_dir)-1] != '\0')
                                        errx(1, "pipefs path name too long");
                                break;
                        case 'k':
                                        errx(1, "pipefs path name too long");
                                break;
                        case 'k':
@@ -130,10 +136,10 @@ main(int argc, char *argv[])
                                break;
                }
        }
                                break;
                }
        }
-       strncat(pipefsdir + strlen(pipefsdir), "/" GSSD_SERVICE_NAME,
-               sizeof(pipefsdir)-strlen(pipefsdir));
-       if (pipefsdir[sizeof(pipefsdir)-1] != '\0')
-               errx(1, "pipefs path name too long");
+       snprintf(pipefs_nfsdir, sizeof(pipefs_nfsdir), "%s/%s",
+                pipefs_dir, GSSD_SERVICE_NAME);
+       if (pipefs_nfsdir[sizeof(pipefs_nfsdir)-1] != '\0')
+               errx(1, "pipefs_nfsdir path name too long");
 
        if ((progname = strrchr(argv[0], '/')))
                progname++;
 
        if ((progname = strrchr(argv[0], '/')))
                progname++;
@@ -159,9 +165,6 @@ main(int argc, char *argv[])
        signal(SIGTERM, sig_die);
        signal(SIGHUP, sig_hup);
 
        signal(SIGTERM, sig_die);
        signal(SIGHUP, sig_hup);
 
-       /* Process keytab file and get machine credentials */
-       gssd_refresh_krb5_machine_creds();
-
        gssd_run();
        printerr(0, "gssd_run returned!\n");
        abort();
        gssd_run();
        printerr(0, "gssd_run returned!\n");
        abort();