diff options
-rw-r--r-- | opentracker.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/opentracker.c b/opentracker.c index d4cfea4..5da9829 100644 --- a/opentracker.c +++ b/opentracker.c | |||
@@ -248,7 +248,7 @@ static void httpresponse( const int64 s, char *data, size_t l ) { | |||
248 | * S Y N C * | 248 | * S Y N C * |
249 | ******************************/ | 249 | ******************************/ |
250 | case 4: /* sync ? */ | 250 | case 4: /* sync ? */ |
251 | if( !byte_diff( data, 2, "an" ) ) goto ANNOUNCE_WORKAROUND; | 251 | if( *data == 'a' ) goto ANNOUNCE_WORKAROUND; |
252 | if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND; | 252 | if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND; |
253 | if( byte_diff( data, 4, "sync") ) HTTPERROR_404; | 253 | if( byte_diff( data, 4, "sync") ) HTTPERROR_404; |
254 | if( NOTBLESSED( h ) ) HTTPERROR_403_IP; | 254 | if( NOTBLESSED( h ) ) HTTPERROR_403_IP; |
@@ -290,7 +290,7 @@ LOG_TO_STDERR( "sync: %d.%d.%d.%d\n", h->ip[0], h->ip[1], h->ip[2], h->ip[3] ); | |||
290 | * S T A T S * | 290 | * S T A T S * |
291 | ******************************/ | 291 | ******************************/ |
292 | case 5: /* stats ? */ | 292 | case 5: /* stats ? */ |
293 | if( !byte_diff( data, 2, "an" ) ) goto ANNOUNCE_WORKAROUND; | 293 | if( *data == 'a' ) goto ANNOUNCE_WORKAROUND; |
294 | if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND; | 294 | if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND; |
295 | if( byte_diff(data,5,"stats")) HTTPERROR_404; | 295 | if( byte_diff(data,5,"stats")) HTTPERROR_404; |
296 | scanon = 1; | 296 | scanon = 1; |
@@ -380,7 +380,7 @@ LOG_TO_STDERR( "stats: %d.%d.%d.%d - mode: s24s old\n", h->ip[0], h->ip[1], h->i | |||
380 | * S C R A P E * | 380 | * S C R A P E * |
381 | ******************************/ | 381 | ******************************/ |
382 | case 6: /* scrape ? */ | 382 | case 6: /* scrape ? */ |
383 | if( !byte_diff( data, 2, "an" ) ) goto ANNOUNCE_WORKAROUND; | 383 | if( *data == 'a' ) goto ANNOUNCE_WORKAROUND; |
384 | if( byte_diff( data, 6, "scrape") ) HTTPERROR_404; | 384 | if( byte_diff( data, 6, "scrape") ) HTTPERROR_404; |
385 | 385 | ||
386 | /* Full scrape... you might want to limit that */ | 386 | /* Full scrape... you might want to limit that */ |
@@ -401,6 +401,7 @@ SCRAPE_WORKAROUND: | |||
401 | if( c[-1] != '?' ) { | 401 | if( c[-1] != '?' ) { |
402 | while( ( *c != '?' ) && ( *c != '\n' ) ) ++c; | 402 | while( ( *c != '?' ) && ( *c != '\n' ) ) ++c; |
403 | if( *c == '\n' ) HTTPERROR_400_PARAM; | 403 | if( *c == '\n' ) HTTPERROR_400_PARAM; |
404 | ++c; | ||
404 | } | 405 | } |
405 | 406 | ||
406 | scanon = 1; | 407 | scanon = 1; |
@@ -441,7 +442,7 @@ UTORRENT1600_WORKAROUND: | |||
441 | ******************************/ | 442 | ******************************/ |
442 | case 8: | 443 | case 8: |
443 | if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND; | 444 | if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND; |
444 | if( byte_diff( data, 8, "announce" ) ) HTTPERROR_404; | 445 | if( *data != 'a' ) HTTPERROR_404; |
445 | 446 | ||
446 | ANNOUNCE_WORKAROUND: | 447 | ANNOUNCE_WORKAROUND: |
447 | 448 | ||
@@ -449,6 +450,7 @@ ANNOUNCE_WORKAROUND: | |||
449 | if( c[-1] != '?' ) { | 450 | if( c[-1] != '?' ) { |
450 | while( ( *c != '?' ) && ( *c != '\n' ) ) ++c; | 451 | while( ( *c != '?' ) && ( *c != '\n' ) ) ++c; |
451 | if( *c == '\n' ) HTTPERROR_400_PARAM; | 452 | if( *c == '\n' ) HTTPERROR_400_PARAM; |
453 | ++c; | ||
452 | } | 454 | } |
453 | 455 | ||
454 | OT_SETIP( &peer, ((struct http_data*)io_getcookie( s ) )->ip ); | 456 | OT_SETIP( &peer, ((struct http_data*)io_getcookie( s ) )->ip ); |
@@ -538,7 +540,7 @@ ANNOUNCE_WORKAROUND: | |||
538 | ot_overall_tcp_successfulannounces++; | 540 | ot_overall_tcp_successfulannounces++; |
539 | break; | 541 | break; |
540 | case 11: | 542 | case 11: |
541 | if( !byte_diff( data, 2, "an" ) ) goto ANNOUNCE_WORKAROUND; | 543 | if( *data == 'a' ) goto ANNOUNCE_WORKAROUND; |
542 | if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND; | 544 | if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND; |
543 | if( byte_diff( data, 11, "mrtg_scrape" ) ) HTTPERROR_404; | 545 | if( byte_diff( data, 11, "mrtg_scrape" ) ) HTTPERROR_404; |
544 | 546 | ||
@@ -548,7 +550,7 @@ ANNOUNCE_WORKAROUND: | |||
548 | ot_overall_tcp_connections+ot_overall_udp_connections, ot_overall_tcp_successfulannounces+ot_overall_udp_successfulannounces, (int)t, (int)(t / 3600), (ot_overall_tcp_connections+ot_overall_udp_connections) / ( (unsigned int)t ? (unsigned int)t : 1 ) ); | 550 | ot_overall_tcp_connections+ot_overall_udp_connections, ot_overall_tcp_successfulannounces+ot_overall_udp_successfulannounces, (int)t, (int)(t / 3600), (ot_overall_tcp_connections+ot_overall_udp_connections) / ( (unsigned int)t ? (unsigned int)t : 1 ) ); |
549 | break; | 551 | break; |
550 | default: | 552 | default: |
551 | if( !byte_diff( data, 2, "an" ) ) goto ANNOUNCE_WORKAROUND; | 553 | if( *data == 'a' ) goto ANNOUNCE_WORKAROUND; |
552 | if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND; | 554 | if( !byte_diff( data, 2, "sc" ) ) goto SCRAPE_WORKAROUND; |
553 | HTTPERROR_404; | 555 | HTTPERROR_404; |
554 | } | 556 | } |