summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@citi.umich.edu>2009-12-22 12:50:26 -0500
committerSteve Dickson <steved@redhat.com>2010-01-13 15:39:14 -0500
commit9ec1b2c771ad0e16e0f031b017832d957c4bde56 (patch)
tree9f28ef31fb5e70e1ee4ca4f118b4b59bb5d7932c
parent48cf3539933f5b0ba9c891b4e4010c0b6651d648 (diff)
downloadnfs-utils-9ec1b2c771ad0e16e0f031b017832d957c4bde56.tar.gz
nfs-utils-9ec1b2c771ad0e16e0f031b017832d957c4bde56.tar.xz
nfs-utils-9ec1b2c771ad0e16e0f031b017832d957c4bde56.zip
mountd: further split up lookup_export
More trivial cleanup (no change in functionality) to group logical operations together into a single function. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
-rw-r--r--utils/mountd/cache.c48
1 files changed, 29 insertions, 19 deletions
diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
index e32290b..e340390 100644
--- a/utils/mountd/cache.c
+++ b/utils/mountd/cache.c
@@ -614,6 +614,34 @@ static int dump_to_cache(FILE *f, char *domain, char *path, struct exportent *ex
return qword_eol(f);
}
+static int is_subdirectory(char *subpath, char *path)
+{
+ int l = strlen(path);
+
+ return strcmp(subpath, path) == 0
+ || (strncmp(subpath, path, l) == 0 && path[l] == '/'
+ && is_mountpoint(path));
+}
+
+static int path_matches(nfs_export *exp, char *path)
+{
+ if (exp->m_export.e_flags & NFSEXP_CROSSMOUNT)
+ return is_subdirectory(path, exp->m_export.e_path);
+ return strcmp(path, exp->m_export.e_path) == 0;
+}
+
+static int client_matches(nfs_export *exp, char *dom, struct hostent *he)
+{
+ if (use_ipaddr)
+ return client_check(exp->m_client, he);
+ return client_member(dom, exp->m_client->m_hostname);
+}
+
+static int export_matches(nfs_export *exp, char *dom, char *path, struct hostent *he)
+{
+ return path_matches(exp, path) && client_matches(exp, dom, he);
+}
+
static nfs_export *lookup_export(char *dom, char *path, struct hostent *he)
{
nfs_export *exp;
@@ -621,28 +649,10 @@ static nfs_export *lookup_export(char *dom, char *path, struct hostent *he)
int found_type = 0;
int i;
- found = lookup_export(dom, path, he);
- /* now find flags for this export point in this domain */
for (i=0 ; i < MCL_MAXTYPES; i++) {
for (exp = exportlist[i].p_head; exp; exp = exp->m_next) {
- if (!use_ipaddr && !client_member(dom, exp->m_client->m_hostname))
+ if (!export_matches(exp, dom, path, he))
continue;
- if (exp->m_export.e_flags & NFSEXP_CROSSMOUNT) {
- /* if path is a mountpoint below e_path, then OK */
- int l = strlen(exp->m_export.e_path);
- if (strcmp(path, exp->m_export.e_path) == 0 ||
- (strncmp(path, exp->m_export.e_path, l) == 0 &&
- path[l] == '/' &&
- is_mountpoint(path)))
- /* ok */;
- else
- continue;
- } else if (strcmp(path, exp->m_export.e_path) != 0)
- continue;
- if (use_ipaddr) {
- if (!client_check(exp->m_client, he))
- continue;
- }
if (!found) {
found = exp;
found_type = i;