]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
mountd: auth_authenticate_internal further cleanup
authorJ. Bruce Fields <bfields@citi.umich.edu>
Fri, 27 Nov 2009 20:54:11 +0000 (15:54 -0500)
committerSteve Dickson <steved@redhat.com>
Wed, 13 Jan 2010 20:39:14 +0000 (15:39 -0500)
Move newcache case into its own function.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
utils/mountd/auth.c

index 6fbf72b5374a971fe74c6a5fc74fb5022c312911..0aac273a9df44b68f4d37be2b2b54c13f2ab2594 100644 (file)
@@ -126,42 +126,56 @@ static char *get_client_hostname(struct sockaddr_in *caller, struct hostent *hp,
        return strdup("DEFAULT");
 }
 
+/* return static nfs_export with details filled in */
+static nfs_export *
+auth_authenticate_newcache(char *what, struct sockaddr_in *caller,
+                          char *path, struct hostent *hp,
+                          enum auth_error *error)
+{
+       nfs_export *exp;
+       int i;
+
+       free(my_client.m_hostname);
+
+       my_client.m_hostname = get_client_hostname(caller, hp, error);
+       if (my_client.m_hostname == NULL)
+               return NULL;
+
+       my_client.m_naddr = 1;
+       my_client.m_addrlist[0] = caller->sin_addr;
+       my_exp.m_client = &my_client;
+
+       exp = NULL;
+       for (i = 0; !exp && i < MCL_MAXTYPES; i++)
+               for (exp = exportlist[i].p_head; exp; exp = exp->m_next) {
+                       if (strcmp(path, exp->m_export.e_path))
+                               continue;
+                       if (!use_ipaddr && !client_member(my_client.m_hostname, exp->m_client->m_hostname))
+                               continue;
+                       if (use_ipaddr && !client_check(exp->m_client, hp))
+                               continue;
+                       break;
+               }
+       *error = not_exported;
+       if (!exp)
+               return NULL;
+
+       my_exp.m_export = exp->m_export;
+       exp = &my_exp;
+       return exp;
+}
+
 static nfs_export *
 auth_authenticate_internal(char *what, struct sockaddr_in *caller,
                           char *path, struct hostent *hp,
                           enum auth_error *error)
 {
-       nfs_export              *exp;
+       nfs_export *exp;
 
        if (new_cache) {
-               int i;
-               /* return static nfs_export with details filled in */
-               free(my_client.m_hostname);
-               my_client.m_hostname = get_client_hostname(caller, hp, error);
-               if (my_client.m_hostname == NULL)
-                       return NULL;
-               my_client.m_naddr = 1;
-               my_client.m_addrlist[0] = caller->sin_addr;
-               my_exp.m_client = &my_client;
-
-               exp = NULL;
-               for (i = 0; !exp && i < MCL_MAXTYPES; i++) 
-                       for (exp = exportlist[i].p_head; exp; exp = exp->m_next) {
-                               if (strcmp(path, exp->m_export.e_path))
-                                       continue;
-                               if (!use_ipaddr && !client_member(my_client.m_hostname, exp->m_client->m_hostname))
-                                       continue;
-                               if (use_ipaddr && !client_check(exp->m_client, hp))
-                                       continue;
-                               break;
-                       }
-               *error = not_exported;
+               exp = auth_authenticate_newcache(what, caller, path, hp, error);
                if (!exp)
-                       return exp;
-
-               my_exp.m_export = exp->m_export;
-               exp = &my_exp;
-
+                       return NULL;
        } else {
                if (!(exp = export_find(hp, path))) {
                        *error = no_entry;