Changeset 7450 for branches/1.4x/libtransmission/rpc-server.c
- Timestamp:
- Dec 21, 2008, 7:23:42 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/1.4x/libtransmission/rpc-server.c
r7143 r7450 56 56 char * username; 57 57 char * password; 58 char * whitelist; 58 char * whitelistStr; 59 tr_list * whitelist; 59 60 }; 60 61 … … 409 410 } 410 411 411 static int412 static tr_bool 412 413 isAddressAllowed( const tr_rpc_server * server, 413 414 const char * address ) 414 415 { 415 const char * str;416 tr_list * l; 416 417 417 418 if( !server->isWhitelistEnabled ) 418 return 1; 419 420 for( str = server->whitelist; str && *str; ) 421 { 422 const char * delimiter = strchr( str, ',' ); 423 const int len = delimiter ? delimiter - str : (int)strlen( str ); 424 char * token = tr_strndup( str, len ); 425 const int match = tr_wildmat( address, token ); 426 tr_free( token ); 427 if( match ) 428 return 1; 429 if( !delimiter ) 430 break; 431 str = delimiter + 1; 432 } 433 434 return 0; 419 return TRUE; 420 421 for( l=server->whitelist; l!=NULL; l=l->next ) 422 if( tr_wildmat( address, l->data ) ) 423 return TRUE; 424 425 return FALSE; 435 426 } 436 427 … … 464 455 if( !isAddressAllowed( server, req->remote_host ) ) 465 456 { 466 send_simple_response( req, 401, "Unauthorized IP Address" ); 457 send_simple_response( req, 401, 458 "<p>Unauthorized IP Address.</p>" 459 "<p>Either disable the IP address whitelist or add your address to it.</p>" 460 "<p>If you're editing settings.json, see the 'rpc-whitelist' and 'rpc-whitelist-enabled' entries.</p>" ); 467 461 } 468 462 else if( server->isPasswordEnabled … … 586 580 void 587 581 tr_rpcSetWhitelist( tr_rpc_server * server, 588 const char * whitelist ) 589 { 590 tr_free( server->whitelist ); 591 server->whitelist = tr_strdup( whitelist ); 582 const char * whitelistStr ) 583 { 584 void * tmp; 585 const char * walk; 586 587 /* keep the string */ 588 tr_free( server->whitelistStr ); 589 server->whitelistStr = tr_strdup( whitelistStr ); 590 591 /* clear out the old whitelist entries */ 592 while(( tmp = tr_list_pop_front( &server->whitelist ))) 593 tr_free( tmp ); 594 595 /* build the new whitelist entries */ 596 for( walk=whitelistStr; walk && *walk; ) { 597 const char * delimiters = " ,;"; 598 const size_t len = strcspn( walk, delimiters ); 599 char * token = tr_strndup( walk, len ); 600 tr_list_append( &server->whitelist, token ); 601 tr_ninf( MY_NAME, "Adding address to whitelist: [%s]", token ); 602 if( walk[len]=='\0' ) 603 break; 604 walk += len + 1; 605 } 592 606 } 593 607 … … 595 609 tr_rpcGetWhitelist( const tr_rpc_server * server ) 596 610 { 597 return tr_strdup( server->whitelist ? server->whitelist: "" );611 return tr_strdup( server->whitelistStr ? server->whitelistStr : "" ); 598 612 } 599 613 … … 666 680 closeServer( void * vserver ) 667 681 { 682 void * tmp; 668 683 tr_rpc_server * s = vserver; 669 684 670 685 stopServer( s ); 671 tr_free( s->whitelist ); 686 while(( tmp = tr_list_pop_front( &s->whitelist ))) 687 tr_free( tmp ); 688 tr_free( s->whitelistStr ); 672 689 tr_free( s->username ); 673 690 tr_free( s->password ); … … 697 714 s->session = session; 698 715 s->port = port; 699 s->whitelist = tr_strdup( whitelist && *whitelist700 ? whitelist701 : TR_DEFAULT_RPC_WHITELIST );702 716 s->username = tr_strdup( username ); 703 717 s->password = tr_strdup( password ); … … 705 719 s->isPasswordEnabled = isPasswordEnabled != 0; 706 720 s->isEnabled = isEnabled != 0; 721 tr_rpcSetWhitelist( s, whitelist ? whitelist : TR_DEFAULT_RPC_WHITELIST ); 707 722 if( isEnabled ) 708 723 tr_runInEventThread( session, startServer, s ); 724 725 if( isEnabled ) 726 { 727 tr_ninf( MY_NAME, _( "Serving RPC and Web requests on port %d" ), (int)port ); 728 729 if( isWhitelistEnabled ) 730 tr_ninf( MY_NAME, _( "Whitelist enabled" ) ); 731 732 if( isPasswordEnabled ) 733 tr_ninf( MY_NAME, _( "Password required" ) ); 734 } 735 709 736 return s; 710 737 }
Note: See TracChangeset
for help on using the changeset viewer.