The list would look like this
ip_block = "... deny"
ip_block = "192.168.. allow"
ip_block = "10...* allow"
[code snips]
int numIPs = vectorSize / 2;
for( int i=0; i<numIPs; i++ ) {
char *addressString = *( blockListVector->getElement( 2 * i ) );
char *denyString = *( blockListVector->getElement( 2 * i + 1 ) );
int numRead = sscanf(addressString, "%3[^.].%3[^.].%3[^.].%3[^ ]", ip1, ip2, ip3, ip4);
if( numRead == 4 ) {
BlockListEntry *entry = new BlockListEntry();
entry->ip1 = entry->ip2 = entry->ip3 = entry->ip4 = -1; // * is -1
if (ip1[0] != '*') entry->ip1 = atoi(ip1);
if (ip2[0] != '*') entry->ip2 = atoi(ip2);
if (ip3[0] != '*') entry->ip3 = atoi(ip3);
if (ip4[0] != '*') entry->ip4 = atoi(ip4);
if (!strncasecmp(denyString, "deny", 4)) entry->deny = true;
else if (!strncasecmp(denyString, "allow", 5)) entry->deny = false;
else {
delete [] addressString; // skip this entry
delete [] denyString;
printf( "blockList settings file not properly formatted\n" );
continue;
}
mBlockList->push_back( entry );
}
else {
printf( "blockList settings file not properly formatted\n" );
}
delete [] addressString;
delete [] denyString;
}
checkBlockList( char *inAddress ) {
BlockListEntry *entry;
int listSize = mBlockList->size();
int ip1, ip2, ip3, ip4;
char x = false; // allow all by default
int numRead = sscanf(inAddress, "%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4);
if( numRead == 4 ) {
// always go through whole list so they can do
// combinations of allow deny
for( int i=0; i < listSize; i++ ) {
entry = *( mBlockList->getElement( i ) );
if(entry->ip1 == ip1 || entry->ip1 == -1)
if(entry->ip2 == ip2 || entry->ip2 == -1)
if(entry->ip3 == ip3 || entry->ip3 == -1)
if(entry->ip4 == ip4 || entry->ip4 == -1) {
x = entry->deny;
}
}
}
return x; // deny
}