diff options
author | J. Bruce Fields <bfields@citi.umich.edu> | 2009-12-22 12:50:26 -0500 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2010-01-13 15:39:14 -0500 |
commit | 9ec1b2c771ad0e16e0f031b017832d957c4bde56 (patch) | |
tree | 9f28ef31fb5e70e1ee4ca4f118b4b59bb5d7932c | |
parent | 48cf3539933f5b0ba9c891b4e4010c0b6651d648 (diff) | |
download | nfs-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.c | 48 |
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; |