--- ../cups-1.2.0/scheduler/conf.c 2006-05-02 21:13:40.000000000 +0300 +++ scheduler/conf.c 2006-05-21 03:06:21.341293052 +0300 @@ -1284,19 +1284,6 @@ { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff00 }, { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } }; -#ifdef AF_INET6 - static unsigned netmasks6[8][4] = /* Standard IPv6 netmasks... */ - { - { 0xffff0000, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0x00000000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffff0000, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0x00000000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffff0000, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0000 }, - { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff } - }; -#endif /* AF_INET6 */ /* @@ -1334,6 +1321,7 @@ ptr2 = strchr(ptr2 + 1, ':'), j ++); i = 7 - j; + ptr++; } else if (isxdigit(*ptr & 255)) { @@ -1343,9 +1331,9 @@ return (0); if (i & 1) - ip[i] |= ipval; + ip[i/2] |= ipval; else - ip[i] |= ipval << 16; + ip[i/2] |= ipval << 16; } else return (0); @@ -1354,7 +1342,8 @@ ptr ++; } - ipcount = i; + if (*ptr == ']') + ptr++; if (*ptr && *ptr != '/') return (0); @@ -1381,49 +1370,6 @@ memset(mask, 0, sizeof(unsigned) * 4); -#ifdef AF_INET6 - if (*maskval == '[') - { - /* - * Get hexadecimal mask value... - */ - - for (i = 0, ptr = maskval + 1; *ptr && i < 8; i ++) - { - if (*ptr == ']') - break; - else if (!strncmp(ptr, "::", 2)) - { - for (ptr2 = strchr(ptr + 2, ':'), j = 0; - ptr2; - ptr2 = strchr(ptr2 + 1, ':'), j ++); - - i = 7 - j; - } - else if (isxdigit(*ptr & 255)) - { - ipval = strtoul(ptr, (char **)&ptr, 16); - - if (ipval > 0xffff) - return (0); - - if (i & 1) - mask[i] |= ipval; - else - mask[i] |= ipval << 16; - } - else - return (0); - - while (*ptr == ':') - ptr ++; - } - - if (*ptr) - return (0); - } - else -#endif /* AF_INET6 */ if (strchr(maskval, '.')) { /* @@ -1478,6 +1424,9 @@ else #endif /* AF_INET6 */ { + if (i > 32) + return(0); + i = 32 - i; mask[0] = 0xffffffff; @@ -1493,7 +1442,7 @@ } #ifdef AF_INET6 else if (family == AF_INET6) - memcpy(mask, netmasks6[ipcount - 1], sizeof(unsigned) * 4); + mask[0] = mask[1] = mask[2] = mask[3] = 0xffffffff; #endif /* AF_INET6 */ else memcpy(mask, netmasks[ipcount - 1], sizeof(unsigned) * 4); @@ -1634,7 +1583,12 @@ else cupsdDenyIP(loc, ones, zeros); } +#ifdef AF_INET6 + else if (value[0] == '*' || value[0] == '.' || + (!isdigit(value[0] & 255) && value[0] != '[')) +#else else if (value[0] == '*' || value[0] == '.' || !isdigit(value[0] & 255)) +#endif { /* * Host or domain name...