summaryrefslogtreecommitdiffstats
path: root/src/dispatch.c
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin.dahyabhai@pobox.com>2008-06-09 19:08:12 -0400
committerNalin Dahyabhai <nalin.dahyabhai@pobox.com>2008-06-09 19:08:12 -0400
commite10684f07d1b1fabf0c29f4db03a5c5e4b269f8d (patch)
tree8169e982e09abacee8de91e5a6257437c186bec1 /src/dispatch.c
parent05e84c23677dcdb6823cf7929ecd2b3efe58c83c (diff)
downloadslapi-nis-e10684f07d1b1fabf0c29f4db03a5c5e4b269f8d.tar.gz
slapi-nis-e10684f07d1b1fabf0c29f4db03a5c5e4b269f8d.tar.xz
slapi-nis-e10684f07d1b1fabf0c29f4db03a5c5e4b269f8d.zip
- add v6 address/netmask computation to securenets
Diffstat (limited to 'src/dispatch.c')
-rw-r--r--src/dispatch.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/dispatch.c b/src/dispatch.c
index 2cda7ab..907f332 100644
--- a/src/dispatch.c
+++ b/src/dispatch.c
@@ -233,7 +233,8 @@ dispatch_access(struct plugin_state *state, struct sockaddr *client_addr)
{
struct securenet_info *sn;
struct in_addr addr;
- struct in6_addr addr6;
+ struct in6_addr addr6, mask6, masked6;
+ int i;
for (sn = state->securenet_info; sn != NULL; sn = sn->sn_next) {
switch (client_addr->sa_family) {
case AF_INET:
@@ -259,6 +260,20 @@ dispatch_access(struct plugin_state *state, struct sockaddr *client_addr)
return TRUE;
}
}
+ if (sn->sn_family == AF_INET6) {
+ mask6 = sn->sn_addr.sin6.netmask;
+ for (i = 0; i < 16; i++) {
+ addr6.s6_addr[i] &= mask6.s6_addr[i];
+ masked6.s6_addr[i] &= mask6.s6_addr[i];
+ if (addr6.s6_addr[i] !=
+ masked6.s6_addr[i]) {
+ break;
+ }
+ }
+ if (i == 16) {
+ return TRUE;
+ }
+ }
break;
default:
break;