summaryrefslogtreecommitdiff
path: root/opentracker.c
diff options
context:
space:
mode:
Diffstat (limited to 'opentracker.c')
-rw-r--r--opentracker.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/opentracker.c b/opentracker.c
index bfb5c53..d916aa7 100644
--- a/opentracker.c
+++ b/opentracker.c
@@ -390,13 +390,14 @@ write( 2, debug_request, l );
390 return sendmmapdata( s, reply, reply_size ); 390 return sendmmapdata( s, reply, reply_size );
391 } 391 }
392 392
393 /* This is to hack around stupid clients that just replace
394 "announce ?info_hash" with "scrape ?info_hash".
395 We do not want to bomb them with full scrapes */
396 if( !byte_diff( c, 2, " ?" ) ) c+=2;
397
398SCRAPE_WORKAROUND: 393SCRAPE_WORKAROUND:
399 394
395 /* This is to hack around stupid clients that send "announce ?info_hash" */
396 if( c[-1] != '?' ) {
397 while( ( *c != '?' ) && ( *c != '\n' ) ) ++c;
398 if( *c == '\n' ) HTTPERROR_400_PARAM;
399 }
400
400 scanon = 1; 401 scanon = 1;
401 scrape_count = 0; 402 scrape_count = 0;
402 while( scanon ) { 403 while( scanon ) {
@@ -429,15 +430,19 @@ SCRAPE_WORKAROUND:
429 * A N N O U N C E * 430 * A N N O U N C E *
430 ******************************/ 431 ******************************/
431 case 7: 432 case 7:
432 if( byte_diff( data, 7, "announc" ) ) HTTPERROR_404; 433 if( !byte_diff( data, 7, "announc" ) ) goto ANNOUNCE_WORKAROUND;
433 goto ANNOUNCE_WORKAROUND; 434 if( !byte_diff( data, 7, "anounce" ) ) goto ANNOUNCE_WORKAROUND;
435 HTTPERROR_404;
434 case 8: 436 case 8:
435 if( byte_diff( data, 8, "announce" ) ) HTTPERROR_404; 437 if( byte_diff( data, 8, "announce" ) ) HTTPERROR_404;
436 438
437ANNOUNCE_WORKAROUND: 439ANNOUNCE_WORKAROUND:
438 440
439 /* This is to hack around stupid clients that send "announce ?info_hash" */ 441 /* This is to hack around stupid clients that send "announce ?info_hash" */
440 if( !byte_diff( c+1, 5, "?info" ) ) c+=2; 442 if( c[-1] != '?' ) {
443 while( ( *c != '?' ) && ( *c != '\n' ) ) ++c;
444 if( *c == '\n' ) HTTPERROR_400_PARAM;
445 }
441 446
442 OT_SETIP( &peer, ((struct http_data*)io_getcookie( s ) )->ip ); 447 OT_SETIP( &peer, ((struct http_data*)io_getcookie( s ) )->ip );
443 OT_SETPORT( &peer, &port ); 448 OT_SETPORT( &peer, &port );
@@ -525,6 +530,9 @@ ANNOUNCE_WORKAROUND:
525 } 530 }
526 ot_overall_tcp_successfulannounces++; 531 ot_overall_tcp_successfulannounces++;
527 break; 532 break;
533 case 9:
534 if( byte_diff( data, 9, "announce " ) ) HTTPERROR_404;
535 goto ANNOUNCE_WORKAROUND;
528 case 10: 536 case 10:
529 if( byte_diff( data, 10, "scrape.php" ) ) HTTPERROR_404; 537 if( byte_diff( data, 10, "scrape.php" ) ) HTTPERROR_404;
530 goto SCRAPE_WORKAROUND; 538 goto SCRAPE_WORKAROUND;