diff options
Diffstat (limited to 'ot_accesslist.c')
| -rw-r--r-- | ot_accesslist.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/ot_accesslist.c b/ot_accesslist.c index 7df503f..5bd81f0 100644 --- a/ot_accesslist.c +++ b/ot_accesslist.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include "scan.h" | 21 | #include "scan.h" |
| 22 | #include "ip6.h" | 22 | #include "ip6.h" |
| 23 | #include "mmap.h" | 23 | #include "mmap.h" |
| 24 | #include "fmt.h" | ||
| 24 | 25 | ||
| 25 | /* Opentracker */ | 26 | /* Opentracker */ |
| 26 | #include "trackerlogic.h" | 27 | #include "trackerlogic.h" |
| @@ -509,29 +510,37 @@ int proxylist_check_proxy( const ot_ip6 proxy, const ot_ip6 address ) { | |||
| 509 | 510 | ||
| 510 | #endif | 511 | #endif |
| 511 | 512 | ||
| 512 | static ot_ip6 g_adminip_addresses[OT_ADMINIP_MAX]; | 513 | static ot_net g_admin_nets[OT_ADMINIP_MAX]; |
| 513 | static ot_permissions g_adminip_permissions[OT_ADMINIP_MAX]; | 514 | static ot_permissions g_admin_nets_permissions[OT_ADMINIP_MAX]; |
| 514 | static unsigned int g_adminip_count = 0; | 515 | static unsigned int g_admin_nets_count = 0; |
| 515 | 516 | ||
| 516 | int accesslist_blessip( ot_ip6 ip, ot_permissions permissions ) { | 517 | int accesslist_bless_net( ot_net *net, ot_permissions permissions ) { |
| 517 | if( g_adminip_count >= OT_ADMINIP_MAX ) | 518 | if( g_admin_nets_count >= OT_ADMINIP_MAX ) |
| 518 | return -1; | 519 | return -1; |
| 519 | 520 | ||
| 520 | memcpy(g_adminip_addresses + g_adminip_count,ip,sizeof(ot_ip6)); | 521 | memcpy(g_admin_nets + g_admin_nets_count, &net, sizeof(ot_net)); |
| 521 | g_adminip_permissions[ g_adminip_count++ ] = permissions; | 522 | g_admin_nets_permissions[ g_admin_nets_count++ ] = permissions; |
| 522 | 523 | ||
| 523 | #ifdef _DEBUG | 524 | #ifdef _DEBUG |
| 524 | { | 525 | { |
| 525 | char _debug[512]; | 526 | char _debug[512]; |
| 526 | int off = snprintf( _debug, sizeof(_debug), "Blessing ip address " ); | 527 | int off = snprintf( _debug, sizeof(_debug), "Blessing ip net " ); |
| 527 | off += fmt_ip6c(_debug+off, ip ); | 528 | off += fmt_ip6c(_debug+off, net->address ); |
| 529 | if( net->bits < 128) { | ||
| 530 | _debug[off++] = '/'; | ||
| 531 | if( ip6_isv4mapped(net->address) ) | ||
| 532 | off += fmt_long(_debug+off, net->bits-96); | ||
| 533 | else | ||
| 534 | off += fmt_long(_debug+off, net->bits); | ||
| 535 | } | ||
| 528 | 536 | ||
| 529 | if( permissions & OT_PERMISSION_MAY_STAT ) off += snprintf( _debug+off, 512-off, " may_fetch_stats" ); | 537 | if( permissions & OT_PERMISSION_MAY_STAT ) off += snprintf( _debug+off, 512-off, " may_fetch_stats" ); |
| 530 | if( permissions & OT_PERMISSION_MAY_LIVESYNC ) off += snprintf( _debug+off, 512-off, " may_sync_live" ); | 538 | if( permissions & OT_PERMISSION_MAY_LIVESYNC ) off += snprintf( _debug+off, 512-off, " may_sync_live" ); |
| 531 | if( permissions & OT_PERMISSION_MAY_FULLSCRAPE ) off += snprintf( _debug+off, 512-off, " may_fetch_fullscrapes" ); | 539 | if( permissions & OT_PERMISSION_MAY_FULLSCRAPE ) off += snprintf( _debug+off, 512-off, " may_fetch_fullscrapes" ); |
| 532 | if( permissions & OT_PERMISSION_MAY_PROXY ) off += snprintf( _debug+off, 512-off, " may_proxy" ); | 540 | if( permissions & OT_PERMISSION_MAY_PROXY ) off += snprintf( _debug+off, 512-off, " may_proxy" ); |
| 533 | if( !permissions ) off += snprintf( _debug+off, sizeof(_debug)-off, " nothing\n" ); | 541 | if( !permissions ) off += snprintf( _debug+off, sizeof(_debug)-off, " nothing" ); |
| 534 | _debug[off++] = '.'; | 542 | _debug[off++] = '.'; |
| 543 | _debug[off++] = '\n'; | ||
| 535 | (void)write( 2, _debug, off ); | 544 | (void)write( 2, _debug, off ); |
| 536 | } | 545 | } |
| 537 | #endif | 546 | #endif |
| @@ -539,10 +548,10 @@ int accesslist_blessip( ot_ip6 ip, ot_permissions permissions ) { | |||
| 539 | return 0; | 548 | return 0; |
| 540 | } | 549 | } |
| 541 | 550 | ||
| 542 | int accesslist_isblessed( ot_ip6 ip, ot_permissions permissions ) { | 551 | int accesslist_is_blessed( ot_ip6 ip, ot_permissions permissions ) { |
| 543 | unsigned int i; | 552 | unsigned int i; |
| 544 | for( i=0; i<g_adminip_count; ++i ) | 553 | for( i=0; i<g_admin_nets_count; ++i ) |
| 545 | if( !memcmp( g_adminip_addresses + i, ip, sizeof(ot_ip6)) && ( g_adminip_permissions[ i ] & permissions ) ) | 554 | if( address_in_net(ip, g_admin_nets + i) && (g_admin_nets_permissions[ i ] & permissions )) |
| 546 | return 1; | 555 | return 1; |
| 547 | return 0; | 556 | return 0; |
| 548 | } | 557 | } |
