1
0
mirror of https://github.com/GOSTSec/sgminer synced 2025-09-01 00:31:51 +00:00

--api-allow special case 0/0 means all

This commit is contained in:
Kano 2012-02-20 19:03:25 +11:00
parent 136b50d51c
commit 3955fefec0

65
api.c
View File

@ -1234,7 +1234,10 @@ static void tidyup()
/* /*
* Interpret IP[/Prefix][,IP2[/Prefix2][,...]] --api-allow option * 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 * N.B. IP4 addresses are by Definition 32bit big endian on all platforms
*/ */
static void setup_ipaccess() static void setup_ipaccess()
@ -1274,39 +1277,43 @@ static void setup_ipaccess()
if (comma) if (comma)
*(comma++) = '\0'; *(comma++) = '\0';
slash = strchr(ptr, '/'); if (strcmp(ptr, ALLIP4) == 0)
if (!slash) ipaccess[ips].ip = ipaccess[ips].mask = 0;
ipaccess[ips].mask = 0xffffffff;
else { else {
*(slash++) = '\0'; slash = strchr(ptr, '/');
mask = atoi(slash); if (!slash)
if (mask < 1 || mask > 32) ipaccess[ips].mask = 0xffffffff;
goto popipo; // skip invalid/zero else {
*(slash++) = '\0';
mask = atoi(slash);
if (mask < 1 || mask > 32)
goto popipo; // skip invalid/zero
ipaccess[ips].mask = 0; ipaccess[ips].mask = 0;
while (mask-- >= 0) { while (mask-- >= 0) {
octet = 1 << (mask % 8); octet = 1 << (mask % 8);
ipaccess[ips].mask |= (octet << (8 * (mask >> 3))); 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';
octet = atoi(ptr);
if (octet < 0 || octet > 0xff)
goto popipo; // skip invalid
ipaccess[ips].ip |= (octet << (i * 8));
ptr = dot;
}
ipaccess[ips].ip &= ipaccess[ips].mask;
} }
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
ipaccess[ips].ip |= (octet << (i * 8));
ptr = dot;
}
ipaccess[ips].ip &= ipaccess[ips].mask;
ips++; ips++;
popipo: popipo:
ptr = comma; ptr = comma;