X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fexport%2Fclient.c;h=c09e7620eacb12e782f3e635cb09baa8e48b6c68;hp=3db21ae2840419bdfc50bdaa816db55cd4615adc;hb=ebf259dfcee762c98ac530d558ca9126c983b1a5;hpb=1275be70ca6cd6c4bec07a3381f7b510086c5526 diff --git a/support/export/client.c b/support/export/client.c index 3db21ae..c09e762 100644 --- a/support/export/client.c +++ b/support/export/client.c @@ -6,7 +6,9 @@ * Copyright (C) 1995, 1996 Olaf Kirch */ -#include "config.h" +#ifdef HAVE_CONFIG_H +#include +#endif #include #include @@ -138,7 +140,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, '.')) { @@ -260,11 +264,11 @@ client_compose(struct in_addr addr) return name; } -int +int client_member(char *client, char *name) { /* check if "client" (a ',' separated list of names) - * contains 'name' as a member + * contains 'name' as a member */ int l = strlen(name); while (*client) { @@ -280,7 +284,7 @@ client_member(char *client, char *name) } -int +int name_cmp(char *a, char *b) { /* compare strings a and b, but only upto ',' in a */ @@ -392,6 +396,8 @@ client_check(nfs_client *clp, struct hostent *hp) #endif case MCL_ANONYMOUS: return 1; + case MCL_GSS: + return 0; default: xlog(L_FATAL, "internal: bad client type %d", clp->m_type); } @@ -425,6 +431,8 @@ client_gettype(char *ident) if (ident[0] == '\0' || strcmp(ident, "*")==0) return MCL_ANONYMOUS; + if (strncmp(ident, "gss/", 4) == 0) + return MCL_GSS; if (ident[0] == '@') { #ifndef HAVE_INNETGR xlog(L_WARNING, "netgroup support not compiled in"); @@ -439,5 +447,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; }