]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
mountd: add trivial helpers for client-matching
authorJ. Bruce Fields <bfields@redhat.com>
Thu, 3 May 2012 19:01:20 +0000 (15:01 -0400)
committerSteve Dickson <steved@redhat.com>
Thu, 3 May 2012 19:12:09 +0000 (15:12 -0400)
From: "J. Bruce Fields" <bfields@redhat.com>

Pull out a tiny bit of common logic from three functions.

Possibly minor overkill, but simplifies the next patch.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
utils/mountd/auth.c
utils/mountd/cache.c
utils/mountd/mountd.h

index 384375612a4d3dbb710621e5d02c3289b51cec52..688bf78411808cff236c67415e402bf12dd1d479 100644 (file)
@@ -131,6 +131,23 @@ get_client_hostname(const struct sockaddr *caller, struct addrinfo *ai,
        return strdup("DEFAULT");
 }
 
+bool ipaddr_client_matches(nfs_export *exp, struct addrinfo *ai)
+{
+       return client_check(exp->m_client, ai);
+}
+
+bool namelist_client_matches(nfs_export *exp, char *dom)
+{
+       return client_member(dom, exp->m_client->m_hostname);
+}
+
+bool client_matches(nfs_export *exp, char *dom, struct addrinfo *ai)
+{
+       if (use_ipaddr)
+               return ipaddr_client_matches(exp, ai);
+       return namelist_client_matches(exp, dom);
+}
+
 /* return static nfs_export with details filled in */
 static nfs_export *
 auth_authenticate_newcache(const struct sockaddr *caller,
@@ -155,9 +172,7 @@ auth_authenticate_newcache(const struct sockaddr *caller,
                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, ai))
+                       if (!client_matches(exp, my_client.m_hostname, ai))
                                continue;
                        if (exp->m_export.e_flags & NFSEXP_V4ROOT)
                                /* not acceptable for v[23] export */
index c5f8093f4da1bd8f64a1ae94d4dab2cefae74cc9..be5198e84c830a8df418fc2e081a1a127e90af55 100644 (file)
@@ -587,7 +587,7 @@ static void nfsd_fh(FILE *f)
                                next_exp = exp->m_next;
                        }
 
-                       if (!use_ipaddr && !client_member(dom, exp->m_client->m_hostname))
+                       if (!use_ipaddr && !namelist_client_matches(exp, dom))
                                continue;
                        if (exp->m_export.e_mountpoint &&
                            !is_mountpoint(exp->m_export.e_mountpoint[0]?
@@ -597,7 +597,7 @@ static void nfsd_fh(FILE *f)
 
                        if (!match_fsid(&parsed, exp, path))
                                continue;
-                       if (use_ipaddr && !client_check(exp->m_client, ai))
+                       if (use_ipaddr && !ipaddr_client_matches(exp, ai))
                                continue;
                        if (!found || subexport(&exp->m_export, found)) {
                                found = &exp->m_export;
@@ -759,14 +759,6 @@ static int path_matches(nfs_export *exp, char *path)
        return strcmp(path, exp->m_export.e_path) == 0;
 }
 
-static int
-client_matches(nfs_export *exp, char *dom, struct addrinfo *ai)
-{
-       if (use_ipaddr)
-               return client_check(exp->m_client, ai);
-       return client_member(dom, exp->m_client->m_hostname);
-}
-
 static int
 export_matches(nfs_export *exp, char *dom, char *path, struct addrinfo *ai)
 {
index 4c184d20d6c7422920879059414c2c24321a7075..c969a27ca18e48c23625701f749a716e5a4e4d90 100644 (file)
@@ -56,4 +56,8 @@ struct nfs_fh_len *
                cache_get_filehandle(nfs_export *exp, int len, char *p);
 int            cache_export(nfs_export *exp, char *path);
 
+bool ipaddr_client_matches(nfs_export *exp, struct addrinfo *ai);
+bool namelist_client_matches(nfs_export *exp, char *dom);
+bool client_matches(nfs_export *exp, char *dom, struct addrinfo *ai);
+
 #endif /* MOUNTD_H */