diff options
Diffstat (limited to 'opentracker.c')
-rw-r--r-- | opentracker.c | 60 |
1 files changed, 7 insertions, 53 deletions
diff --git a/opentracker.c b/opentracker.c index 15f4871..3c2aab7 100644 --- a/opentracker.c +++ b/opentracker.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include "ot_udp.h" | 38 | #include "ot_udp.h" |
39 | #include "ot_fullscrape.h" | 39 | #include "ot_fullscrape.h" |
40 | #include "ot_iovec.h" | 40 | #include "ot_iovec.h" |
41 | #include "ot_accesslist.h" | ||
41 | 42 | ||
42 | /* Globals */ | 43 | /* Globals */ |
43 | static const size_t SUCCESS_HTTP_HEADER_LENGTH = 80; | 44 | static const size_t SUCCESS_HTTP_HEADER_LENGTH = 80; |
@@ -47,14 +48,6 @@ static unsigned int g_adminip_count = 0; | |||
47 | time_t ot_start_time; | 48 | time_t ot_start_time; |
48 | time_t g_now; | 49 | time_t g_now; |
49 | 50 | ||
50 | #if defined ( WANT_BLACKLISTING ) && defined (WANT_CLOSED_TRACKER ) | ||
51 | #error WANT_BLACKLISTING and WANT_CLOSED_TRACKER are exclusive. | ||
52 | #endif | ||
53 | #if defined ( WANT_BLACKLISTING ) || defined (WANT_CLOSED_TRACKER ) | ||
54 | static char *accesslist_filename = NULL; | ||
55 | #define WANT_ACCESS_CONTROL | ||
56 | #endif | ||
57 | |||
58 | #ifndef WANT_TRACKER_SYNC | 51 | #ifndef WANT_TRACKER_SYNC |
59 | #define add_peer_to_torrent(A,B,C) add_peer_to_torrent(A,B) | 52 | #define add_peer_to_torrent(A,B,C) add_peer_to_torrent(A,B) |
60 | #endif | 53 | #endif |
@@ -331,12 +324,13 @@ LOG_TO_STDERR( "sync: %d.%d.%d.%d\n", h->ip[0], h->ip[1], h->ip[2], h->ip[3] ); | |||
331 | } | 324 | } |
332 | 325 | ||
333 | if( mode == SYNC_OUT ) { | 326 | if( mode == SYNC_OUT ) { |
327 | char *reply; | ||
334 | if( !( reply_size = return_changeset_for_tracker( &reply ) ) ) HTTPERROR_500; | 328 | if( !( reply_size = return_changeset_for_tracker( &reply ) ) ) HTTPERROR_500; |
335 | return sendmmapdata( s, reply, reply_size ); | 329 | return sendmmapdata( s, reply, reply_size ); |
336 | } | 330 | } |
337 | 331 | ||
338 | /* Simple but proof for now */ | 332 | /* Simple but proof for now */ |
339 | reply = "OK"; | 333 | memmove( static_outbuf + SUCCESS_HTTP_HEADER_LENGTH, "OK", 2); |
340 | reply_size = 2; | 334 | reply_size = 2; |
341 | 335 | ||
342 | break; | 336 | break; |
@@ -772,48 +766,14 @@ static void ot_try_bind( char ip[4], uint16 port, int is_tcp ) { | |||
772 | ++ot_sockets_count; | 766 | ++ot_sockets_count; |
773 | } | 767 | } |
774 | 768 | ||
775 | #ifdef WANT_ACCESS_CONTROL | ||
776 | /* Read initial access list */ | ||
777 | void read_accesslist_file( int foo ) { | ||
778 | FILE * accesslist_filehandle; | ||
779 | ot_hash infohash; | ||
780 | foo = foo; | ||
781 | |||
782 | accesslist_filehandle = fopen( accesslist_filename, "r" ); | ||
783 | |||
784 | /* Free accesslist vector in trackerlogic.c*/ | ||
785 | accesslist_reset(); | ||
786 | |||
787 | if( accesslist_filehandle == NULL ) { | ||
788 | fprintf( stderr, "Warning: Can't open accesslist file: %s (but will try to create it later, if necessary and possible).", accesslist_filename ); | ||
789 | return; | ||
790 | } | ||
791 | |||
792 | /* We do ignore anything that is not of the form "^[:xdigit:]{40}[^:xdigit:].*" */ | ||
793 | while( fgets( static_inbuf, sizeof(static_inbuf), accesslist_filehandle ) ) { | ||
794 | int i; | ||
795 | for( i=0; i<20; ++i ) { | ||
796 | int eger = 16 * scan_fromhex( static_inbuf[ 2*i ] ) + scan_fromhex( static_inbuf[ 1 + 2*i ] ); | ||
797 | if( eger < 0 ) | ||
798 | continue; | ||
799 | infohash[i] = eger; | ||
800 | } | ||
801 | if( scan_fromhex( static_inbuf[ 40 ] ) >= 0 ) | ||
802 | continue; | ||
803 | |||
804 | /* Append accesslist to accesslist vector */ | ||
805 | accesslist_addentry( &infohash ); | ||
806 | } | ||
807 | |||
808 | fclose( accesslist_filehandle ); | ||
809 | } | ||
810 | #endif | ||
811 | |||
812 | int main( int argc, char **argv ) { | 769 | int main( int argc, char **argv ) { |
813 | struct passwd *pws = NULL; | 770 | struct passwd *pws = NULL; |
814 | char serverip[4] = {0,0,0,0}; | 771 | char serverip[4] = {0,0,0,0}; |
815 | char *serverdir = "."; | 772 | char *serverdir = "."; |
816 | int scanon = 1; | 773 | int scanon = 1; |
774 | #ifdef WANT_ACCESS_CONTROL | ||
775 | char *accesslist_filename = NULL; | ||
776 | #endif | ||
817 | 777 | ||
818 | while( scanon ) { | 778 | while( scanon ) { |
819 | switch( getopt( argc, argv, ":i:p:A:P:d:" | 779 | switch( getopt( argc, argv, ":i:p:A:P:d:" |
@@ -863,13 +823,7 @@ int main( int argc, char **argv ) { | |||
863 | } | 823 | } |
864 | endpwent(); | 824 | endpwent(); |
865 | 825 | ||
866 | #ifdef WANT_ACCESS_CONTROL | 826 | accesslist_init( accesslist_filename ); |
867 | /* Passing "0" since read_blacklist_file also is SIGHUP handler */ | ||
868 | if( accesslist_filename ) { | ||
869 | read_accesslist_file( 0 ); | ||
870 | signal( SIGHUP, read_accesslist_file ); | ||
871 | } | ||
872 | #endif | ||
873 | 827 | ||
874 | signal( SIGPIPE, SIG_IGN ); | 828 | signal( SIGPIPE, SIG_IGN ); |
875 | signal( SIGINT, signal_handler ); | 829 | signal( SIGINT, signal_handler ); |