]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/gssd/gssd_proc.c
Fix the usage message for gssd to reflect new option
[nfs-utils.git] / utils / gssd / gssd_proc.c
index 04de4e676683c96010be6c6ebc0e6e1884b7d7cf..48880b6d26ac0032b2f0ef9c35d99c8a81c2b97b 100644 (file)
  *     with an index into pollarray[], and other basic data about that client.
  *
  * Directory structure: created by the kernel nfs client
- *      /pipefsdir/clntXX             : one per rpc_clnt struct in the kernel
- *      /pipefsdir/clntXX/krb5        : read uid for which kernel wants
- *                                      a context, write the resulting context
- *      /pipefsdir/clntXX/info        : stores info such as server name
+ *      {pipefs_nfsdir}/clntXX             : one per rpc_clnt struct in the kernel
+ *      {pipefs_nfsdir}/clntXX/krb5        : read uid for which kernel wants
+ *                                         a context, write the resulting context
+ *      {pipefs_nfsdir}/clntXX/info        : stores info such as server name
  *
  * Algorithm:
- *      Poll all /pipefsdir/clntXX/krb5 files.  When ready, data read
+ *      Poll all {pipefs_nfsdir}/clntXX/krb5 files.  When ready, data read
  *      is a uid; performs rpcsec_gss context initialization protocol to
  *      get a cred for that user.  Writes result to corresponding krb5 file
  *      in a form the kernel code will understand.
  *      In addition, we make sure we are notified whenever anything is
- *      created or destroyed in pipefsdir/ or in an of the clntXX directories,
- *      and rescan the whole pipefsdir when this happens.
+ *      created or destroyed in {pipefs_nfsdir} or in an of the clntXX directories,
+ *      and rescan the whole {pipefs_nfsdir} when this happens.
  */
 
 struct pollfd * pollarray;
@@ -389,16 +389,16 @@ update_client_list(void)
        struct dirent **namelist;
        int i, j;
 
-       if (chdir(pipefsdir) < 0) {
+       if (chdir(pipefs_nfsdir) < 0) {
                printerr(0, "ERROR: can't chdir to %s: %s\n",
-                        pipefsdir, strerror(errno));
+                        pipefs_nfsdir, strerror(errno));
                return -1;
        }
 
-       j = scandir(pipefsdir, &namelist, NULL, alphasort);
+       j = scandir(pipefs_nfsdir, &namelist, NULL, alphasort);
        if (j < 0) {
                printerr(0, "ERROR: can't scandir %s: %s\n",
-                        pipefsdir, strerror(errno));
+                        pipefs_nfsdir, strerror(errno));
                return -1;
        }
        update_old_clients(namelist, j);
@@ -555,7 +555,7 @@ int create_auth_rpc_client(struct clnt_info *clp,
                ai_hints.ai_protocol = IPPROTO_UDP;
        } else {
                printerr(0, "WARNING: unrecognized protocol, '%s', requested "
-                        "for connection to server %s for user with uid %d",
+                        "for connection to server %s for user with uid %d\n",
                         clp->protocol, clp->servername, uid);
                goto out_fail;
        }
@@ -563,12 +563,12 @@ int create_auth_rpc_client(struct clnt_info *clp,
        /* extract the service name from clp->servicename */
        if ((at_sign = strchr(clp->servicename, '@')) == NULL) {
                printerr(0, "WARNING: servicename (%s) not formatted as "
-                       "expected with service@host", clp->servicename);
+                       "expected with service@host\n", clp->servicename);
                goto out_fail;
        }
        if ((at_sign - clp->servicename) >= sizeof(service)) {
                printerr(0, "WARNING: service portion of servicename (%s) "
-                       "is too long!", clp->servicename);
+                       "is too long!\n", clp->servicename);
                goto out_fail;
        }
        strncpy(service, clp->servicename, at_sign - clp->servicename);
@@ -577,13 +577,13 @@ int create_auth_rpc_client(struct clnt_info *clp,
        errcode = getaddrinfo(clp->servername, service, &ai_hints, &a);
        if (errcode) {
                printerr(0, "WARNING: Error from getaddrinfo for server "
-                        "'%s': %s", clp->servername, gai_strerror(errcode));
+                        "'%s': %s\n", clp->servername, gai_strerror(errcode));
                goto out_fail;
        }
 
        if (a == NULL) {
                printerr(0, "WARNING: No address information found for "
-                        "connection to server %s for user with uid %d",
+                        "connection to server %s for user with uid %d\n",
                         clp->servername, uid);
                goto out_fail;
        }
@@ -617,7 +617,7 @@ int create_auth_rpc_client(struct clnt_info *clp,
        } else {
                /* Shouldn't happen! */
                printerr(0, "ERROR: requested protocol '%s', but "
-                        "got addrinfo with protocol %d",
+                        "got addrinfo with protocol %d\n",
                         clp->protocol, a->ai_protocol);
                goto out_fail;
        }
@@ -700,14 +700,16 @@ handle_krb5_upcall(struct clnt_info *clp)
                if (uid == 0 && root_uses_machine_creds == 1) {
                        int success = 0;
 
+                       gssd_refresh_krb5_machine_credential(clp->servername,
+                                                            NULL);
                        /*
                         * Get a list of credential cache names and try each
                         * of them until one works or we've tried them all
                         */
                        if (gssd_get_krb5_machine_cred_list(&credlist)) {
-                               printerr(0, "WARNING: Failed to obtain machine "
-                                        "credentials for connection to "
-                                        "server %s\n", clp->servername);
+                               printerr(0, "ERROR: No credentials found "
+                                        "for connection to server %s\n",
+                                        clp->servername);
                                        goto out_return_error;
                        }
                        for (ccname = credlist; ccname && *ccname; ccname++) {