diff options
| author | erdgeist <> | 2007-11-12 04:39:53 +0000 | 
|---|---|---|
| committer | erdgeist <> | 2007-11-12 04:39:53 +0000 | 
| commit | 697e239027b1490eaa51e1d2dfc1f93b9941e07b (patch) | |
| tree | 3f5bcf8a629a2cc035b307a80fda355bb7481735 /ot_accesslist.c | |
| parent | 0547e2ade2cfb974526fdcd8b350db0aead7d802 (diff) | |
Moving accesslist stuff to its own object
Diffstat (limited to 'ot_accesslist.c')
| -rw-r--r-- | ot_accesslist.c | 95 | 
1 files changed, 95 insertions, 0 deletions
| diff --git a/ot_accesslist.c b/ot_accesslist.c new file mode 100644 index 0000000..e63cff8 --- /dev/null +++ b/ot_accesslist.c | |||
| @@ -0,0 +1,95 @@ | |||
| 1 | /* This software was written by Dirk Engling <erdgeist@erdgeist.org> | ||
| 2 | It is considered beerware. Prost. Skol. Cheers or whatever. */ | ||
| 3 | |||
| 4 | /* System */ | ||
| 5 | #include <stdlib.h> | ||
| 6 | #include <string.h> | ||
| 7 | #include <stdio.h> | ||
| 8 | |||
| 9 | /* Libowfat */ | ||
| 10 | #include "byte.h" | ||
| 11 | #include "scan.h" | ||
| 12 | |||
| 13 | /* Opentracker */ | ||
| 14 | #include "ot_accesslist.h" | ||
| 15 | |||
| 16 | /* GLOBAL VARIABLES */ | ||
| 17 | #ifdef WANT_ACCESS_CONTROL | ||
| 18 | static char *accesslist_filename = NULL; | ||
| 19 | static ot_vector accesslist; | ||
| 20 | |||
| 21 | static void accesslist_reset( void ) { | ||
| 22 | free( accesslist.data ); | ||
| 23 | byte_zero( &accesslist, sizeof( accesslist ) ); | ||
| 24 | } | ||
| 25 | |||
| 26 | static int accesslist_addentry( ot_hash *infohash ) { | ||
| 27 | int em; | ||
| 28 | void *insert = vector_find_or_insert( &accesslist, infohash, OT_HASH_COMPARE_SIZE, OT_HASH_COMPARE_SIZE, &em ); | ||
| 29 | |||
| 30 | if( !insert ) | ||
| 31 | return -1; | ||
| 32 | |||
| 33 | memmove( insert, infohash, OT_HASH_COMPARE_SIZE ); | ||
| 34 | |||
| 35 | return 0; | ||
| 36 | } | ||
| 37 | |||
| 38 | /* Read initial access list */ | ||
| 39 | static void accesslist_readfile( int foo ) { | ||
| 40 | FILE * accesslist_filehandle; | ||
| 41 | ot_hash infohash; | ||
| 42 | foo = foo; | ||
| 43 | |||
| 44 | accesslist_filehandle = fopen( accesslist_filename, "r" ); | ||
| 45 | |||
| 46 | /* Free accesslist vector in trackerlogic.c*/ | ||
| 47 | accesslist_reset(); | ||
| 48 | |||
| 49 | if( accesslist_filehandle == NULL ) { | ||
| 50 | fprintf( stderr, "Warning: Can't open accesslist file: %s (but will try to create it later, if necessary and possible).", accesslist_filename ); | ||
| 51 | return; | ||
| 52 | } | ||
| 53 | |||
| 54 | /* We do ignore anything that is not of the form "^[:xdigit:]{40}[^:xdigit:].*" */ | ||
| 55 | while( fgets( static_inbuf, sizeof(static_inbuf), accesslist_filehandle ) ) { | ||
| 56 | int i; | ||
| 57 | for( i=0; i<20; ++i ) { | ||
| 58 | int eger = 16 * scan_fromhex( static_inbuf[ 2*i ] ) + scan_fromhex( static_inbuf[ 1 + 2*i ] ); | ||
| 59 | if( eger < 0 ) | ||
| 60 | continue; | ||
| 61 | infohash[i] = eger; | ||
| 62 | } | ||
| 63 | if( scan_fromhex( static_inbuf[ 40 ] ) >= 0 ) | ||
| 64 | continue; | ||
| 65 | |||
| 66 | /* Append accesslist to accesslist vector */ | ||
| 67 | accesslist_addentry( &infohash ); | ||
| 68 | } | ||
| 69 | |||
| 70 | fclose( accesslist_filehandle ); | ||
| 71 | } | ||
| 72 | |||
| 73 | int accesslist_hashisvalid( ot_hash *hash ) { | ||
| 74 | int exactmatch; | ||
| 75 | binary_search( hash, accesslist.data, accesslist.size, OT_HASH_COMPARE_SIZE, OT_HASH_COMPARE_SIZE, &exactmatch ); | ||
| 76 | |||
| 77 | #ifdef WANT_BLACKLISTING | ||
| 78 | exactmatch = !exactmatch; | ||
| 79 | #endif | ||
| 80 | |||
| 81 | return exactmatch; | ||
| 82 | } | ||
| 83 | |||
| 84 | void accesslist_init( char *accesslist_filename_in ) { | ||
| 85 | byte_zero( &accesslist, sizeof( accesslist ) ); | ||
| 86 | |||
| 87 | /* Passing "0" since read_blacklist_file also is SIGHUP handler */ | ||
| 88 | if( accesslist_filename_in ) { | ||
| 89 | accesslist_filename = accesslist_filename_in; | ||
| 90 | accesslist_readfile( 0 ); | ||
| 91 | signal( SIGHUP, accesslist_readfile ); | ||
| 92 | } | ||
| 93 | } | ||
| 94 | |||
| 95 | #endif | ||
