diff options
author | Jeremy Allison <jra@samba.org> | 2002-03-27 01:56:31 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2002-03-27 01:56:31 +0000 |
commit | ea60c50109462b35825be1dd3cc6b28f739a1b59 (patch) | |
tree | 85ffd83731971a99703d527add19ce4d56ca2167 /source/lib/access.c | |
parent | 9fb6a475264f465e30a23c34b5c9266921d135d1 (diff) | |
download | samba-ea60c50109462b35825be1dd3cc6b28f739a1b59.tar.gz samba-ea60c50109462b35825be1dd3cc6b28f739a1b59.tar.xz samba-ea60c50109462b35825be1dd3cc6b28f739a1b59.zip |
Allow hosts allow/deny to use xx.xx.xx.xx/yy syntax.
Jeremy.
Diffstat (limited to 'source/lib/access.c')
-rw-r--r-- | source/lib/access.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/source/lib/access.c b/source/lib/access.c index c7ca164c392..f12ee927990 100644 --- a/source/lib/access.c +++ b/source/lib/access.c @@ -12,6 +12,8 @@ #define FAIL (-1) +#define ALLONES ((uint32)0xFFFFFFFF) + /* masked_match - match address against netnumber/netmask */ static int masked_match(char *tok, char *slash, char *s) { @@ -24,8 +26,14 @@ static int masked_match(char *tok, char *slash, char *s) *slash = 0; net = interpret_addr(tok); *slash = '/'; - if (net == INADDR_NONE || - (mask = interpret_addr(slash + 1)) == INADDR_NONE) { + + if (strlen(slash + 1) > 2) { + mask = interpret_addr(slash + 1); + } else { + mask = (uint32)((ALLONES >> atoi(slash + 1)) ^ ALLONES); + } + + if (net == INADDR_NONE || mask == INADDR_NONE) { DEBUG(0,("access: bad net/mask access control: %s\n", tok)); return (False); } |