X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fexport%2Fclient.c;h=aa28fcfb7f6074fc2ff531f76954350090da7014;hp=580012d9eaa38d2a45a9f8af4dd563ace3197315;hb=bf867b09201abb155b52e81aeb08757b2f7c6937;hpb=346ca35298e45e55a58d0f566c3b32b69102c6de diff --git a/support/export/client.c b/support/export/client.c index 580012d..aa28fcf 100644 --- a/support/export/client.c +++ b/support/export/client.c @@ -370,6 +370,31 @@ check_subnetwork(const nfs_client *clp, const struct hostent *hp) return 0; } +/* + * Check if a wildcard nfs_client record matches the canonical name + * or the aliases of a host. Return 1 if a match is found, otherwise + * zero. + */ +static int +check_wildcard(const nfs_client *clp, const struct hostent *hp) +{ + char *cname = clp->m_hostname; + char *hname = hp->h_name; + char **ap; + + if (wildmat(hname, cname)) + return 1; + + /* See if hname aliases listed in /etc/hosts or nis[+] + * match the requested wildcard */ + for (ap = hp->h_aliases; *ap; ap++) { + if (wildmat(*ap, cname)) + return 1; + } + + return 0; +} + /* * Check if @hp's hostname or aliases fall in a given netgroup. * Return 1 if @hp represents a host in the netgroup, otherwise zero. @@ -426,31 +451,24 @@ check_netgroup(__attribute__((unused)) const nfs_client *clp, } #endif /* !HAVE_INNETGR */ -/* - * Match a host (given its hostent record) to a client record. This - * is usually called from mountd. +/** + * client_check - check if IP address information matches a cached nfs_client + * @clp: pointer to a cached nfs_client record + * @hp: pointer to hostent containing host IP information + * + * Returns 1 if the address information matches the cached nfs_client, + * otherwise zero. */ int client_check(nfs_client *clp, struct hostent *hp) { - char *hname = (char *) hp->h_name; - char *cname = clp->m_hostname; - char **ap; - switch (clp->m_type) { case MCL_FQDN: return check_fqdn(clp, hp); case MCL_SUBNETWORK: return check_subnetwork(clp, hp); case MCL_WILDCARD: - if (wildmat(hname, cname)) - return 1; - else { - for (ap = hp->h_aliases; *ap; ap++) - if (wildmat(*ap, cname)) - return 1; - } - return 0; + return check_wildcard(clp, hp); case MCL_NETGROUP: return check_netgroup(clp, hp); case MCL_ANONYMOUS: @@ -458,7 +476,8 @@ client_check(nfs_client *clp, struct hostent *hp) case MCL_GSS: return 0; default: - xlog(L_FATAL, "internal: bad client type %d", clp->m_type); + xlog(D_GENERAL, "%s: unrecognized client type: %d", + __func__, clp->m_type); } return 0;