summaryrefslogtreecommitdiffstats
path: root/support
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2010-04-08 10:55:02 -0400
committerSteve Dickson <steved@redhat.com>2010-04-08 11:16:18 -0400
commita39b43b81a8e7b70310f250c5ffd77816577cd6c (patch)
treec3e106a13fb320c88b9ce59d13d1ee82cafd8618 /support
parent346ca35298e45e55a58d0f566c3b32b69102c6de (diff)
downloadnfs-utils-a39b43b81a8e7b70310f250c5ffd77816577cd6c.tar.gz
nfs-utils-a39b43b81a8e7b70310f250c5ffd77816577cd6c.tar.xz
nfs-utils-a39b43b81a8e7b70310f250c5ffd77816577cd6c.zip
libexport.a: Refactor wildcard checking in client_check()
Clean up: refactor wildcard logic out of client_check() to make it easier to introduce IPv6 support. Match the style used for client_check_{fqdn,subnetwork,netgroup}. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'support')
-rw-r--r--support/export/client.c38
1 files changed, 26 insertions, 12 deletions
diff --git a/support/export/client.c b/support/export/client.c
index 580012d..bf2a359 100644
--- a/support/export/client.c
+++ b/support/export/client.c
@@ -371,6 +371,31 @@ check_subnetwork(const nfs_client *clp, const struct hostent *hp)
}
/*
+ * 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.
*/
@@ -433,24 +458,13 @@ check_netgroup(__attribute__((unused)) const nfs_client *clp,
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: