diff options
| author | Nalin Dahyabhai <nalin.dahyabhai@pobox.com> | 2008-06-09 19:08:12 -0400 |
|---|---|---|
| committer | Nalin Dahyabhai <nalin.dahyabhai@pobox.com> | 2008-06-09 19:08:12 -0400 |
| commit | e10684f07d1b1fabf0c29f4db03a5c5e4b269f8d (patch) | |
| tree | 8169e982e09abacee8de91e5a6257437c186bec1 /src/dispatch.c | |
| parent | 05e84c23677dcdb6823cf7929ecd2b3efe58c83c (diff) | |
| download | slapi-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.c | 17 |
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; |
