summaryrefslogtreecommitdiffstats
path: root/support/export/client.c
diff options
context:
space:
mode:
Diffstat (limited to 'support/export/client.c')
-rw-r--r--support/export/client.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/support/export/client.c b/support/export/client.c
index 833f4a9..42bf45a 100644
--- a/support/export/client.c
+++ b/support/export/client.c
@@ -351,6 +351,27 @@ check_fqdn(const nfs_client *clp, const struct hostent *hp)
}
/*
+ * Check each address listed in @hp against the subnetwork or
+ * host address stored in @clp. Return 1 if an address in @hp
+ * matches the host address stored in @clp, otherwise zero.
+ */
+static int
+check_subnetwork(const nfs_client *clp, const struct hostent *hp)
+{
+ struct in_addr addr;
+ char **ap;
+
+ for (ap = hp->h_addr_list; *ap; ap++) {
+ addr = *(struct in_addr *)*ap;
+
+ if (!((clp->m_addrlist[0].s_addr ^ addr.s_addr) &
+ clp->m_addrlist[1].s_addr))
+ return 1;
+ }
+ return 0;
+}
+
+/*
* Match a host (given its hostent record) to a client record. This
* is usually called from mountd.
*/
@@ -365,11 +386,7 @@ client_check(nfs_client *clp, struct hostent *hp)
case MCL_FQDN:
return check_fqdn(clp, hp);
case MCL_SUBNETWORK:
- for (ap = hp->h_addr_list; *ap; ap++) {
- if (client_checkaddr(clp, *(struct in_addr *) *ap))
- return 1;
- }
- return 0;
+ return check_subnetwork(clp, hp);
case MCL_WILDCARD:
if (wildmat(hname, cname))
return 1;
@@ -434,11 +451,6 @@ client_check(nfs_client *clp, struct hostent *hp)
static int
client_checkaddr(nfs_client *clp, struct in_addr addr)
{
- switch (clp->m_type) {
- case MCL_SUBNETWORK:
- return !((clp->m_addrlist[0].s_addr ^ addr.s_addr)
- & clp->m_addrlist[1].s_addr);
- }
return 0;
}