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 3843756..688bf78 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 c5f8093..be5198e 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;
@@ -760,14 +760,6 @@ static int path_matches(nfs_export *exp, char *path)
 }
 
 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)
 {
        return path_matches(exp, path) && client_matches(exp, dom, ai);
index 4c184d2..c969a27 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 */