]> granicus.if.org Git - sudo/commitdiff
Fix CIDR -> in_addr_t conversion.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 13 Dec 2001 01:07:25 +0000 (01:07 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 13 Dec 2001 01:07:25 +0000 (01:07 +0000)
parse.c

diff --git a/parse.c b/parse.c
index a6db514e1ca6fd3b9c4f83895d63a328f7ace3af..5934e744070759975c9103f46afb05b0c86b3a7f 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -377,8 +377,14 @@ addr_matches(n)
        addr.s_addr = inet_addr(n);
        if (strchr(m, '.'))
            mask.s_addr = inet_addr(m);
-       else
-           mask.s_addr = (1 << atoi(m)) - 1;   /* XXX - better way? */
+       else {
+           i = 32 - atoi(m);
+           mask.s_addr = 0xffffffff;
+           mask.s_addr >>= i;
+           mask.s_addr <<= i;
+           mask.s_addr = htonl(mask.s_addr);
+
+       }
        *(m - 1) = '/';
 
        for (i = 0; i < num_interfaces; i++)