From: neilbrown Date: Mon, 14 Mar 2005 02:18:19 +0000 (+0000) Subject: treat N.N.N.N as a special case of MCL_SUBNETWORK instead of X-Git-Tag: nfs-utils-1-0-7-post1~16 X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=commitdiff_plain;h=54669c988cc7609a4aab1021604244424ebb795a treat N.N.N.N as a special case of MCL_SUBNETWORK instead of MCL_FQDN --- diff --git a/ChangeLog b/ChangeLog index e2a38f2..d0985f8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ +2005-03-14 NeilBrown + Denis Vlasenko + * support/export/client.c(client_init and client_gettype): + treat N.N.N.N as a special case of MCL_SUBNETWORK instead of + MCL_FQDN + 2005-03-06 G. Allen Morris III - * support/nfs/cacheio.c(readline): Could not real lines greater + * support/nfs/cacheio.c(readline): Could not read lines greater than 128 bytes. [1157791] * utils/exportfs/exports.man: Added a SEE ALSO section and fixed 2 typos. [1018450] diff --git a/support/export/client.c b/support/export/client.c index 3884795..57176d8 100644 --- a/support/export/client.c +++ b/support/export/client.c @@ -138,7 +138,9 @@ client_init(nfs_client *clp, const char *hname, struct hostent *hp) if (clp->m_type == MCL_SUBNETWORK) { char *cp = strchr(clp->m_hostname, '/'); + static char slash32[] = "/32"; + if(!cp) cp = slash32; *cp = '\0'; clp->m_addrlist[0].s_addr = inet_addr(clp->m_hostname); if (strchr(cp + 1, '.')) { @@ -443,5 +445,12 @@ client_gettype(char *ident) if (*sp == '\\' && sp[1]) sp++; } - return MCL_FQDN; + /* 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; }