return 0;
}
+/*
+ * 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.
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;
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;
}