--api-allow special case 0/0 means all
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
diff --git a/api.c b/api.c
index 1373425..1b064a7 100644
--- a/api.c
+++ b/api.c
@@ -1234,7 +1234,10 @@ static void tidyup()
/*
* Interpret IP[/Prefix][,IP2[/Prefix2][,...]] --api-allow option
- *
+ * special case of 0/0 allows /0 (means all IP addresses)
+ */
+#define ALLIP4 "0/0"
+/*
* N.B. IP4 addresses are by Definition 32bit big endian on all platforms
*/
static void setup_ipaccess()
@@ -1274,38 +1277,42 @@ static void setup_ipaccess()
if (comma)
*(comma++) = '\0';
- slash = strchr(ptr, '/');
- if (!slash)
- ipaccess[ips].mask = 0xffffffff;
+ if (strcmp(ptr, ALLIP4) == 0)
+ ipaccess[ips].ip = ipaccess[ips].mask = 0;
else {
- *(slash++) = '\0';
- mask = atoi(slash);
- if (mask < 1 || mask > 32)
- goto popipo; // skip invalid/zero
-
- ipaccess[ips].mask = 0;
- while (mask-- >= 0) {
- octet = 1 << (mask % 8);
- ipaccess[ips].mask |= (octet << (8 * (mask >> 3)));
+ slash = strchr(ptr, '/');
+ if (!slash)
+ ipaccess[ips].mask = 0xffffffff;
+ else {
+ *(slash++) = '\0';
+ mask = atoi(slash);
+ if (mask < 1 || mask > 32)
+ goto popipo; // skip invalid/zero
+
+ ipaccess[ips].mask = 0;
+ while (mask-- >= 0) {
+ octet = 1 << (mask % 8);
+ ipaccess[ips].mask |= (octet << (8 * (mask >> 3)));
+ }
}
- }
- ipaccess[ips].ip = 0; // missing default to '.0'
- for (i = 0; ptr && (i < 4); i++) {
- dot = strchr(ptr, '.');
- if (dot)
- *(dot++) = '\0';
+ ipaccess[ips].ip = 0; // missing default to '.0'
+ for (i = 0; ptr && (i < 4); i++) {
+ dot = strchr(ptr, '.');
+ if (dot)
+ *(dot++) = '\0';
- octet = atoi(ptr);
- if (octet < 0 || octet > 0xff)
- goto popipo; // skip invalid
+ octet = atoi(ptr);
+ if (octet < 0 || octet > 0xff)
+ goto popipo; // skip invalid
- ipaccess[ips].ip |= (octet << (i * 8));
+ ipaccess[ips].ip |= (octet << (i * 8));
- ptr = dot;
- }
+ ptr = dot;
+ }
- ipaccess[ips].ip &= ipaccess[ips].mask;
+ ipaccess[ips].ip &= ipaccess[ips].mask;
+ }
ips++;
popipo: