treat N.N.N.N as a special case of MCL_SUBNETWORK instead of
authorneilbrown <neilbrown>
Mon, 14 Mar 2005 02:18:19 +0000 (02:18 +0000)
committerneilbrown <neilbrown>
Mon, 14 Mar 2005 02:18:19 +0000 (02:18 +0000)
MCL_FQDN

ChangeLog
support/export/client.c

index e2a38f2..d0985f8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
+2005-03-14  NeilBrown <neilb@cse.unsw.edu.au>
+       Denis Vlasenko <vda@ilport.com.ua>
+       * 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 <gam3@gam3.net>
 2005-03-06  G. Allen Morris III <gam3@gam3.net>
-       * 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]
        than 128 bytes. [1157791] 
        * utils/exportfs/exports.man: Added a SEE ALSO section and
        fixed 2 typos. [1018450]
index 3884795..57176d8 100644 (file)
@@ -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, '/');
 
        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, '.')) {
                *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++;
        }
                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;
 }
 }