summaryrefslogtreecommitdiffstats
path: root/source/lib/access.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2002-03-27 01:56:31 +0000
committerJeremy Allison <jra@samba.org>2002-03-27 01:56:31 +0000
commitea60c50109462b35825be1dd3cc6b28f739a1b59 (patch)
tree85ffd83731971a99703d527add19ce4d56ca2167 /source/lib/access.c
parent9fb6a475264f465e30a23c34b5c9266921d135d1 (diff)
downloadsamba-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.c12
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);
}