diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2010-08-31 15:25:35 -0400 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2010-08-31 15:34:23 -0400 |
commit | 502edf1df5e727cf88b19b634f60392652f35ddc (patch) | |
tree | 987fb4824ec7ebc35f8be420d4d626863c9be2c9 /support | |
parent | 26fd34002585e6a5aa09204b0b01d836fa83dcf3 (diff) | |
download | nfs-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.c | 23 |
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; } |