]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/gssd/gssd.c
The rpc.gssd scans for any suitable kerberos ticket. In cross-realm
[nfs-utils.git] / utils / gssd / gssd.c
index 2e6f316dc9e105cecc35c7e55637833287c2a59a..6d8f3b90d7d11e48de887a5387745fbda363675e 100644 (file)
@@ -61,6 +61,7 @@ char *ccachesearch[GSSD_MAX_CCACHE_SEARCH + 1];
 int  use_memcache = 0;
 int  root_uses_machine_creds = 1;
 unsigned int  context_timeout = 0;
+char *preferred_realm = NULL;
 
 void
 sig_die(int signal)
@@ -83,7 +84,7 @@ sig_hup(int signal)
 static void
 usage(char *progname)
 {
-       fprintf(stderr, "usage: %s [-f] [-M] [-n] [-v] [-r] [-p pipefsdir] [-k keytab] [-d ccachedir] [-t timeout]\n",
+       fprintf(stderr, "usage: %s [-f] [-M] [-n] [-v] [-r] [-p pipefsdir] [-k keytab] [-d ccachedir] [-t timeout] [-R preferred realm]\n",
                progname);
        exit(1);
 }
@@ -100,7 +101,7 @@ main(int argc, char *argv[])
        char *progname;
 
        memset(ccachesearch, 0, sizeof(ccachesearch));
-       while ((opt = getopt(argc, argv, "fvrmnMp:k:d:t:")) != -1) {
+       while ((opt = getopt(argc, argv, "fvrmnMp:k:d:t:R:")) != -1) {
                switch (opt) {
                        case 'f':
                                fg = 1;
@@ -138,6 +139,9 @@ main(int argc, char *argv[])
                        case 't':
                                context_timeout = atoi(optarg);
                                break;
+                       case 'R':
+                               preferred_realm = strdup(optarg);
+                               break;
                        default:
                                usage(argv[0]);
                                break;
@@ -150,6 +154,9 @@ main(int argc, char *argv[])
                ccachesearch[i++] = strtok(NULL, ":");
        } while (ccachesearch[i-1] != NULL && i < GSSD_MAX_CCACHE_SEARCH);
 
+       if (preferred_realm == NULL)
+               gssd_k5_get_default_realm(&preferred_realm);
+
        snprintf(pipefs_nfsdir, sizeof(pipefs_nfsdir), "%s/%s",
                 pipefs_dir, GSSD_SERVICE_NAME);
        if (pipefs_nfsdir[sizeof(pipefs_nfsdir)-1] != '\0')