summaryrefslogtreecommitdiffstats
path: root/utils/mountd
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@citi.umich.edu>2009-12-22 11:22:58 -0500
committerSteve Dickson <steved@redhat.com>2010-01-13 15:39:14 -0500
commit48cf3539933f5b0ba9c891b4e4010c0b6651d648 (patch)
tree9738b5806f21502dfedb4a0c26a4b8a7032f9c0f /utils/mountd
parentd778309abd38fcd6a240448606192b9ef3411565 (diff)
downloadnfs-utils-48cf3539933f5b0ba9c891b4e4010c0b6651d648.tar.gz
nfs-utils-48cf3539933f5b0ba9c891b4e4010c0b6651d648.tar.xz
nfs-utils-48cf3539933f5b0ba9c891b4e4010c0b6651d648.zip
mountd: move export lookup into separate function
Move this main loop to a separate function, to make it a little easier to follow the logic of the caller. Also, instead of waiting till we find an export to do the dns resolution, do it at the start; it will normally be needed anyway, and this simplifies the control flow. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Diffstat (limited to 'utils/mountd')
-rw-r--r--utils/mountd/cache.c87
1 files changed, 49 insertions, 38 deletions
diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
index e4e2f22..e32290b 100644
--- a/utils/mountd/cache.c
+++ b/utils/mountd/cache.c
@@ -614,42 +614,14 @@ static int dump_to_cache(FILE *f, char *domain, char *path, struct exportent *ex
return qword_eol(f);
}
-void nfsd_export(FILE *f)
+static nfs_export *lookup_export(char *dom, char *path, struct hostent *he)
{
- /* requests are:
- * domain path
- * determine export options and return:
- * domain path expiry flags anonuid anongid fsid
- */
-
- char *cp;
- int i;
- char *dom, *path;
- nfs_export *exp, *found = NULL;
+ nfs_export *exp;
+ nfs_export *found = NULL;
int found_type = 0;
- struct in_addr addr;
- struct hostent *he = NULL;
-
-
- if (readline(fileno(f), &lbuf, &lbuflen) != 1)
- return;
-
- xlog(D_CALL, "nfsd_export: inbuf '%s'", lbuf);
-
- cp = lbuf;
- dom = malloc(strlen(cp));
- path = malloc(strlen(cp));
-
- if (!dom || !path)
- goto out;
-
- if (qword_get(&cp, dom, strlen(lbuf)) <= 0)
- goto out;
- if (qword_get(&cp, path, strlen(lbuf)) <= 0)
- goto out;
-
- auth_reload();
+ 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) {
@@ -668,11 +640,6 @@ void nfsd_export(FILE *f)
} else if (strcmp(path, exp->m_export.e_path) != 0)
continue;
if (use_ipaddr) {
- if (he == NULL) {
- if (!inet_aton(dom, &addr))
- goto out;
- he = client_resolve(addr);
- }
if (!client_check(exp->m_client, he))
continue;
}
@@ -703,6 +670,50 @@ void nfsd_export(FILE *f)
}
}
}
+ return found;
+}
+
+void nfsd_export(FILE *f)
+{
+ /* requests are:
+ * domain path
+ * determine export options and return:
+ * domain path expiry flags anonuid anongid fsid
+ */
+
+ char *cp;
+ char *dom, *path;
+ nfs_export *found = NULL;
+ struct in_addr addr;
+ struct hostent *he = NULL;
+
+
+ if (readline(fileno(f), &lbuf, &lbuflen) != 1)
+ return;
+
+ xlog(D_CALL, "nfsd_export: inbuf '%s'", lbuf);
+
+ cp = lbuf;
+ dom = malloc(strlen(cp));
+ path = malloc(strlen(cp));
+
+ if (!dom || !path)
+ goto out;
+
+ if (qword_get(&cp, dom, strlen(lbuf)) <= 0)
+ goto out;
+ if (qword_get(&cp, path, strlen(lbuf)) <= 0)
+ goto out;
+
+ auth_reload();
+
+ if (use_ipaddr) {
+ if (!inet_aton(dom, &addr))
+ goto out;
+ he = client_resolve(addr);
+ }
+
+ found = lookup_export(dom, path, he);
if (found) {
if (dump_to_cache(f, dom, path, &found->m_export) < 0) {