summaryrefslogtreecommitdiffstats
path: root/support
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2010-08-31 15:25:35 -0400
committerSteve Dickson <steved@redhat.com>2010-08-31 15:34:23 -0400
commit502edf1df5e727cf88b19b634f60392652f35ddc (patch)
tree987fb4824ec7ebc35f8be420d4d626863c9be2c9 /support
parent26fd34002585e6a5aa09204b0b01d836fa83dcf3 (diff)
downloadnfs-utils-502edf1df5e727cf88b19b634f60392652f35ddc.tar.gz
nfs-utils-502edf1df5e727cf88b19b634f60392652f35ddc.tar.xz
nfs-utils-502edf1df5e727cf88b19b634f60392652f35ddc.zip
libexport.a: Prepare to recognize IPv6 addresses in client_gettype()
The current open-coded parsing logic in client_gettype() will be hard to modify to recognize IPv6 addresses. Use a more generic mechanism for detecting IP presentation addresses. IPv6 will be enabled automatically in client_gettype() when host_pton() is changed to support IPv6 addresses. 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.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/support/export/client.c b/support/export/client.c
index 21001ce..3e797c9 100644
--- a/support/export/client.c
+++ b/support/export/client.c
@@ -602,7 +602,8 @@ client_check(const nfs_client *clp, const struct addrinfo *ai)
int
client_gettype(char *ident)
{
- char *sp;
+ struct addrinfo *ai;
+ char *sp;
if (ident[0] == '\0' || strcmp(ident, "*")==0)
return MCL_ANONYMOUS;
@@ -622,12 +623,16 @@ client_gettype(char *ident)
if (*sp == '\\' && sp[1])
sp++;
}
- /* check for N.N.N.N */
- sp = ident;
- if(!isdigit(*sp) || strtoul(sp, &sp, 10) > 255 || *sp != '.') return MCL_FQDN;
- sp++; if(!isdigit(*sp) || strtoul(sp, &sp, 10) > 255 || *sp != '.') return MCL_FQDN;
- sp++; if(!isdigit(*sp) || strtoul(sp, &sp, 10) > 255 || *sp != '.') return MCL_FQDN;
- sp++; if(!isdigit(*sp) || strtoul(sp, &sp, 10) > 255 || *sp != '\0') return MCL_FQDN;
- /* we lie here a bit. but technically N.N.N.N == N.N.N.N/32 :) */
- return MCL_SUBNETWORK;
+
+ /*
+ * Treat unadorned IP addresses as MCL_SUBNETWORK.
+ * Everything else is MCL_FQDN.
+ */
+ ai = host_pton(ident);
+ if (ai != NULL) {
+ freeaddrinfo(ai);
+ return MCL_SUBNETWORK;
+ }
+
+ return MCL_FQDN;
}