Changeset 6823
- Timestamp:
- Oct 1, 2008, 8:23:57 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/cli/cli.c
r6795 r6823 311 311 TR_DEFAULT_RPC_ENABLED, 312 312 TR_DEFAULT_RPC_PORT, 313 TR_DEFAULT_RPC_ ACL,313 TR_DEFAULT_RPC_WHITELIST, 314 314 FALSE, "fnord", "potzrebie", 315 315 TR_DEFAULT_PROXY_ENABLED, -
trunk/daemon/daemon.c
r6795 r6823 45 45 #define KEY_USERNAME "rpc-username" 46 46 #define KEY_PASSWORD "rpc-password" 47 #define KEY_ ACL "rpc-access-control-list"47 #define KEY_WHITELIST "rpc-whitelist" 48 48 #define KEY_RPC_PORT "rpc-port" 49 49 #define KEY_DSPEED "download-limit" … … 100 100 tr_sessionGetRPCPassword( 101 101 s ) ); 102 replaceStr( &d, KEY_ ACL, strs[n++] = tr_sessionGetRPCACL( s ) );102 replaceStr( &d, KEY_WHITELIST, strs[n++] = tr_sessionGetRPCWhitelist( s ) ); 103 103 replaceInt( &d, KEY_RPC_PORT, tr_sessionGetRPCPort( s ) ); 104 104 replaceInt( &d, KEY_AUTH_REQUIRED, tr_sessionIsRPCPasswordEnabled( s ) ); … … 161 161 const char * downloadDir, 162 162 int rpcPort, 163 const char * acl,163 const char * whitelist, 164 164 int authRequired, 165 165 const char * username, … … 209 209 getConfigInt( dict, KEY_RPC_PORT, &rpcPort, 210 210 TR_DEFAULT_RPC_PORT ); 211 getConfigStr( dict, KEY_ ACL, &acl,212 TR_DEFAULT_RPC_ ACL);211 getConfigStr( dict, KEY_WHITELIST, &whitelist, 212 TR_DEFAULT_RPC_WHITELIST ); 213 213 getConfigInt( dict, KEY_AUTH_REQUIRED, &authRequired, FALSE ); 214 214 getConfigStr( dict, KEY_USERNAME, &username, NULL ); … … 232 232 blocklistEnabled, 233 233 TR_DEFAULT_PEER_SOCKET_TOS, 234 TRUE, rpcPort, acl, authRequired,234 TRUE, rpcPort, whitelist, authRequired, 235 235 username, password, 236 236 TR_DEFAULT_PROXY_ENABLED, … … 271 271 static const struct tr_option options[] = 272 272 { 273 { 'a', "a cl",274 "A ccess Control List. (Default: " TR_DEFAULT_RPC_ACL")", "a",273 { 'a', "allowed", 274 "Allowed IP addresses. (Default: " TR_DEFAULT_RPC_WHITELIST ")", "a", 275 275 1, "<list>" }, 276 276 { 'b', "blocklist", "Enable peer blocklists", … … 313 313 const char ** downloadDir, 314 314 int * rpcPort, 315 const char ** acl,315 const char ** whitelist, 316 316 int * authRequired, 317 317 const char ** username, … … 327 327 { 328 328 case 'a': 329 * acl= optarg; break;329 *whitelist = optarg; break; 330 330 331 331 case 'b': … … 458 458 const char * configDir = NULL; 459 459 const char * downloadDir = NULL; 460 const char * acl= NULL;460 const char * whitelist = NULL; 461 461 const char * username = NULL; 462 462 const char * password = NULL; … … 469 469 470 470 readargs( argc, (const char**)argv, &nofork, &configDir, &downloadDir, 471 &rpcPort, & acl, &authRequired, &username, &password,471 &rpcPort, &whitelist, &authRequired, &username, &password, 472 472 &blocklistEnabled ); 473 473 if( configDir == NULL ) … … 487 487 488 488 session_init( configDir, downloadDir, 489 rpcPort, acl, authRequired, username, password,489 rpcPort, whitelist, authRequired, username, password, 490 490 blocklistEnabled ); 491 491 -
trunk/daemon/transmission-daemon.1
r6805 r6823 31 31 .Bl -tag -width Ds 32 32 33 .It Fl a Fl -acl Ar (+|-)x.x.x.x,... 34 Specify access control list (ACL) to control which hosts may submit RPC requests. 35 This is a comma-separated list of IP addresses, each prepended by a '-' or '+' 36 to denote that access should be denied or allowed to that address. 33 .It Fl a Fl -allowed Ar x.x.x.x,... 34 Allow RPC accecss to a comma-delimited whitelist of IP addresses. 37 35 Wildcards can be specified in an address by using '*'. 38 Default: +127.0.0.1 36 Default: "127.0.0.1" 37 Example: "127.0.0.*,192.168.1.*" 39 38 40 39 .It Fl b Fl -blocklist -
trunk/gtk/main.c
r6798 r6823 485 485 pref_flag_get( PREF_KEY_RPC_ENABLED ), 486 486 pref_int_get( PREF_KEY_RPC_PORT ), 487 pref_string_get( PREF_KEY_RPC_ ACL),487 pref_string_get( PREF_KEY_RPC_WHITELIST ), 488 488 pref_flag_get( PREF_KEY_RPC_AUTH_ENABLED ), 489 489 pref_string_get( PREF_KEY_RPC_USERNAME ), … … 1193 1193 tr_sessionSetRPCEnabled( tr, pref_flag_get( key ) ); 1194 1194 } 1195 else if( !strcmp( key, PREF_KEY_RPC_ ACL) )1195 else if( !strcmp( key, PREF_KEY_RPC_WHITELIST ) ) 1196 1196 { 1197 1197 const char * s = pref_string_get( key ); 1198 tr_sessionSetRPC ACL( tr, s );1198 tr_sessionSetRPCWhitelist( tr, s ); 1199 1199 } 1200 1200 else if( !strcmp( key, PREF_KEY_RPC_USERNAME ) ) -
trunk/gtk/tr-prefs.c
r6807 r6823 128 128 pref_flag_set_default ( PREF_KEY_RPC_ENABLED, TR_DEFAULT_RPC_ENABLED ); 129 129 pref_int_set_default ( PREF_KEY_RPC_PORT, TR_DEFAULT_RPC_PORT ); 130 pref_string_set_default ( PREF_KEY_RPC_ ACL, TR_DEFAULT_RPC_ACL);130 pref_string_set_default ( PREF_KEY_RPC_WHITELIST, TR_DEFAULT_RPC_WHITELIST ); 131 131 132 132 rand = g_rand_new ( ); … … 557 557 ****/ 558 558 559 static GtkTreeModel*560 allow_deny_model_new( void )561 {562 GtkTreeIter iter;563 GtkListStore * store = gtk_list_store_new( 2, G_TYPE_STRING,564 G_TYPE_CHAR );565 566 gtk_list_store_append( store, &iter );567 gtk_list_store_set( store, &iter, 0, _( "Allow" ), 1, '+', -1 );568 gtk_list_store_append( store, &iter );569 gtk_list_store_set( store, &iter, 0, _( "Deny" ), 1, '-', -1 );570 return GTK_TREE_MODEL( store );571 }572 573 559 enum 574 560 { 575 561 COL_ADDRESS, 576 COL_PERMISSION,577 562 N_COLS 578 563 }; 579 564 580 565 static GtkTreeModel* 581 acl_tree_model_new( const char * acl)566 whitelist_tree_model_new( const char * whitelist ) 582 567 { 583 568 int i; … … 587 572 G_TYPE_STRING ); 588 573 589 rules = g_strsplit( acl, ",", 0 );574 rules = g_strsplit( whitelist, ",", 0 ); 590 575 591 576 for( i = 0; rules && rules[i]; ++i ) 592 577 { 578 GtkTreeIter iter; 593 579 const char * s = rules[i]; 594 580 while( isspace( *s ) ) ++s; 595 596 if( *s == '+' || *s == '-' ) 597 { 598 GtkTreeIter iter; 599 gtk_list_store_append( store, &iter ); 600 gtk_list_store_set( store, &iter, 601 COL_PERMISSION, *s == '+' ? _( 602 "Allow" ) : _( "Deny" ), 603 COL_ADDRESS, s + 1, 604 -1 ); 605 } 581 gtk_list_store_append( store, &iter ); 582 gtk_list_store_set( store, &iter, COL_ADDRESS, s, -1 ); 606 583 } 607 584 … … 623 600 624 601 static void 625 refresh ACL( struct remote_page * page )602 refreshWhitelist( struct remote_page * page ) 626 603 { 627 604 GtkTreeIter iter; … … 631 608 if( gtk_tree_model_get_iter_first( model, &iter ) ) do 632 609 { 633 char * permission;634 610 char * address; 635 gtk_tree_model_get( model, &iter, COL_PERMISSION, &permission,611 gtk_tree_model_get( model, &iter, 636 612 COL_ADDRESS, &address, 637 613 -1 ); 638 g_string_append_c( gstr, strcmp( permission, _(639 "Allow" ) ) ? '-' : '+' );640 614 g_string_append( gstr, address ); 641 g_string_append( gstr, ", 615 g_string_append( gstr, "," ); 642 616 g_free( address ); 643 g_free( permission );644 617 } 645 618 while( gtk_tree_model_iter_next( model, &iter ) ); 646 619 647 g_string_truncate( gstr, gstr->len - 2 ); /* remove the trailing ", "*/648 649 tr_core_set_pref( page->core, PREF_KEY_RPC_ ACL, gstr->str );620 g_string_truncate( gstr, gstr->len - 1 ); /* remove the trailing comma */ 621 622 tr_core_set_pref( page->core, PREF_KEY_RPC_WHITELIST, gstr->str ); 650 623 651 624 g_string_free( gstr, TRUE ); 652 }653 654 static void655 onPermissionEdited( GtkCellRendererText * renderer UNUSED,656 gchar * path_string,657 gchar * new_text,658 gpointer gpage )659 {660 GtkTreeIter iter;661 GtkTreePath * path = gtk_tree_path_new_from_string( path_string );662 struct remote_page * page = gpage;663 GtkTreeModel * model = GTK_TREE_MODEL( page->store );664 665 if( gtk_tree_model_get_iter( model, &iter, path ) )666 gtk_list_store_set( page->store, &iter, COL_PERMISSION, new_text,667 -1 );668 gtk_tree_path_free( path );669 refreshACL( page );670 625 } 671 626 … … 673 628 onAddressEdited( GtkCellRendererText * r UNUSED, 674 629 gchar * path_string, 675 gchar * new_text,630 gchar * address, 676 631 gpointer gpage ) 677 632 { 678 char * acl;679 633 GtkTreeIter iter; 680 634 struct remote_page * page = gpage; … … 682 636 GtkTreePath * path = gtk_tree_path_new_from_string( path_string ); 683 637 684 acl = g_strdup_printf( "+%s", new_text );685 638 if( gtk_tree_model_get_iter( model, &iter, path ) ) 686 gtk_list_store_set( page->store, &iter, COL_ADDRESS, new_text, -1 ); 687 688 g_free( acl ); 639 gtk_list_store_set( page->store, &iter, COL_ADDRESS, address, -1 ); 640 689 641 gtk_tree_path_free( path ); 690 refresh ACL( page );691 } 692 693 static void 694 onAdd ACLClicked( GtkButton * b UNUSED,642 refreshWhitelist( page ); 643 } 644 645 static void 646 onAddWhitelistClicked( GtkButton * b UNUSED, 695 647 gpointer gpage ) 696 648 { … … 701 653 gtk_list_store_append( page->store, &iter ); 702 654 gtk_list_store_set( page->store, &iter, 703 COL_PERMISSION, _( "Allow" ),704 655 COL_ADDRESS, "0.0.0.0", 705 656 -1 ); … … 714 665 715 666 static void 716 onRemove ACLClicked( GtkButton * b UNUSED,667 onRemoveWhitelistClicked( GtkButton * b UNUSED, 717 668 gpointer gpage ) 718 669 { … … 724 675 { 725 676 gtk_list_store_remove( page->store, &iter ); 726 refresh ACL( page );677 refreshWhitelist( page ); 727 678 } 728 679 } … … 762 713 763 714 static void 764 on ACLSelectionChanged( GtkTreeSelection * sel UNUSED,715 onWhitelistSelectionChanged( GtkTreeSelection * sel UNUSED, 765 716 gpointer page ) 766 717 { … … 841 792 /* access control list */ 842 793 { 843 const char * val = pref_string_get( PREF_KEY_RPC_ ACL);844 GtkTreeModel * m = acl_tree_model_new( val );794 const char * val = pref_string_get( PREF_KEY_RPC_WHITELIST ); 795 GtkTreeModel * m = whitelist_tree_model_new( val ); 845 796 GtkTreeViewColumn * c; 846 797 GtkCellRenderer * r; … … 851 802 GtkTooltips * tips = gtk_tooltips_new( ); 852 803 853 s = _( "Access control list:" );854 804 page->store = GTK_LIST_STORE( m ); 855 805 w = gtk_tree_view_new_with_model( m ); … … 865 815 sel = gtk_tree_view_get_selection( v ); 866 816 g_signal_connect( sel, "changed", 867 G_CALLBACK( on ACLSelectionChanged ), page );817 G_CALLBACK( onWhitelistSelectionChanged ), page ); 868 818 g_object_unref( G_OBJECT( m ) ); 869 819 gtk_tree_view_set_headers_visible( v, TRUE ); … … 877 827 G_CALLBACK( onAddressEdited ), page ); 878 828 g_object_set( G_OBJECT( r ), "editable", TRUE, NULL ); 879 c = gtk_tree_view_column_new_with_attributes( _( "IP Address" ), r,829 c = gtk_tree_view_column_new_with_attributes( NULL, r, 880 830 "text", COL_ADDRESS, 881 831 NULL ); 882 832 gtk_tree_view_column_set_expand( c, TRUE ); 883 833 gtk_tree_view_append_column( v, c ); 884 834 gtk_tree_view_set_headers_visible( v, FALSE ); 835 836 s = _( "Allowed _IP Addresses:" ); 885 837 w = hig_workarea_add_row( t, &row, s, w, NULL ); 886 gtk_misc_set_alignment( GTK_MISC( w ), 0.0f, 0.1f ); 838 gtk_misc_set_alignment( GTK_MISC( w ), 0.0f, 0.0f ); 839 gtk_misc_set_padding( GTK_MISC( w ), 0, GUI_PAD ); 887 840 page->widgets = g_slist_append( page->widgets, w ); 888 889 /* permission column */890 m = allow_deny_model_new( );891 r = gtk_cell_renderer_combo_new( );892 g_object_set( G_OBJECT( r ), "model", m,893 "editable", TRUE,894 "has-entry", FALSE,895 "text-column", 0,896 NULL );897 c = gtk_tree_view_column_new_with_attributes( _(898 "Permission" ), r,899 "text",900 COL_PERMISSION,901 NULL );902 g_signal_connect( r, "edited",903 G_CALLBACK( onPermissionEdited ), page );904 gtk_tree_view_append_column( v, c );905 841 906 842 h = gtk_hbox_new( TRUE, GUI_PAD ); 907 843 w = gtk_button_new_from_stock( GTK_STOCK_REMOVE ); 908 844 g_signal_connect( w, "clicked", G_CALLBACK( 909 onRemove ACLClicked ), page );845 onRemoveWhitelistClicked ), page ); 910 846 page->remove_button = w; 911 on ACLSelectionChanged( sel, page );847 onWhitelistSelectionChanged( sel, page ); 912 848 gtk_box_pack_start_defaults( GTK_BOX( h ), w ); 913 849 w = gtk_button_new_from_stock( GTK_STOCK_ADD ); 914 850 page->widgets = g_slist_append( page->widgets, w ); 915 g_signal_connect( w, "clicked", G_CALLBACK( onAdd ACLClicked ), page );851 g_signal_connect( w, "clicked", G_CALLBACK( onAddWhitelistClicked ), page ); 916 852 gtk_box_pack_start_defaults( GTK_BOX( h ), w ); 917 853 w = gtk_hbox_new( FALSE, 0 ); -
trunk/gtk/tr-prefs.h
r6795 r6823 66 66 #define PREF_KEY_RPC_PORT "rpc-port" 67 67 #define PREF_KEY_RPC_ENABLED "rpc-enabled" 68 #define PREF_KEY_RPC_ ACL "rpc-access-control-list"68 #define PREF_KEY_RPC_WHITELIST "rpc-whitelist" 69 69 #define PREF_KEY_RPC_AUTH_ENABLED "rpc-authentication-required" 70 70 #define PREF_KEY_RPC_PASSWORD "rpc-password" -
trunk/libtransmission/rpc-server.c
r6820 r6823 21 21 22 22 #ifdef HAVE_LIBZ 23 #include <zlib.h>23 #include <zlib.h> 24 24 #endif 25 25 … … 43 43 struct tr_rpc_server 44 44 { 45 unsigned int isEnabled : 1;46 unsigned int isPasswordEnabled : 1;47 uint16_t port;48 struct evhttp * httpd;49 tr_handle * session;50 char * username;51 char * password;52 char * acl;45 unsigned int isEnabled : 1; 46 unsigned int isPasswordEnabled : 1; 47 uint16_t port; 48 struct evhttp * httpd; 49 tr_handle * session; 50 char * username; 51 char * password; 52 char * whitelist; 53 53 }; 54 54 55 #define dbgmsg( fmt ... ) tr_deepLog( __FILE__, __LINE__, MY_NAME, ## fmt )55 #define dbgmsg( fmt ... ) tr_deepLog( __FILE__, __LINE__, MY_NAME, ## fmt ) 56 56 57 57 /** … … 188 188 const struct 189 189 { 190 const char * suffix;191 const char * mime_type;190 const char * suffix; 191 const char * mime_type; 192 192 } types[] = { 193 193 /* these are just the ones we need for serving clutch... */ 194 { "css", "text/css" },195 { "gif", "image/gif" },196 { "html", "text/html" },197 { "ico", "image/vnd.microsoft.icon" },198 { "js", "application/javascript" },199 { "png", "image/png" }194 { "css", "text/css" }, 195 { "gif", "image/gif" }, 196 { "html", "text/html" }, 197 { "ico", "image/vnd.microsoft.icon" }, 198 { "js", "application/javascript" }, 199 { "png", "image/png" } 200 200 }; 201 201 const char * dot = strrchr( path, '.' ); … … 212 212 compress_evbuf( struct evbuffer * evbuf ) 213 213 { 214 static struct evbuffer *tmp; 215 static z_stream stream; 216 static unsigned char buffer[2048]; 217 218 if( !tmp ) { 214 static struct evbuffer * tmp; 215 static z_stream stream; 216 static unsigned char buffer[2048]; 217 218 if( !tmp ) 219 { 219 220 tmp = evbuffer_new( ); 220 221 deflateInit( &stream, Z_BEST_COMPRESSION ); … … 222 223 223 224 deflateReset( &stream ); 224 stream.next_in = EVBUFFER_DATA(evbuf); 225 stream.avail_in = EVBUFFER_LENGTH(evbuf); 226 227 do { 225 stream.next_in = EVBUFFER_DATA( evbuf ); 226 stream.avail_in = EVBUFFER_LENGTH( evbuf ); 227 228 do 229 { 228 230 stream.next_out = buffer; 229 231 stream.avail_out = sizeof( buffer ); … … 232 234 else 233 235 break; 234 } while (stream.avail_out == 0); 235 236 /*fprintf( stderr, "deflated response from %zu to %zu bytes\n", EVBUFFER_LENGTH( evbuf ), EVBUFFER_LENGTH( tmp ) );*/ 237 evbuffer_drain(evbuf, EVBUFFER_LENGTH(evbuf)); 238 evbuffer_add_buffer(evbuf, tmp); 239 } 236 } 237 while( stream.avail_out == 0 ); 238 239 /*fprintf( stderr, "deflated response from %zu to %zu bytes\n", EVBUFFER_LENGTH( 240 evbuf ), EVBUFFER_LENGTH( tmp ) );*/ 241 evbuffer_drain( evbuf, EVBUFFER_LENGTH( evbuf ) ); 242 evbuffer_add_buffer( evbuf, tmp ); 243 } 244 240 245 #endif 241 246 242 247 static void 243 maybe_deflate_response( struct evhttp_request * req, struct evbuffer * response ) 248 maybe_deflate_response( struct evhttp_request * req, 249 struct evbuffer * response ) 244 250 { 245 251 #ifdef HAVE_LIBZ 246 const char * accept_encoding = evhttp_find_header( req->input_headers, "Accept-Encoding" ); 247 const int do_deflate = accept_encoding && strstr( accept_encoding, "deflate" ); 248 if( do_deflate ) { 249 evhttp_add_header( req->output_headers, "Content-Encoding", "deflate" ); 252 const char * accept_encoding = evhttp_find_header( req->input_headers, 253 "Accept-Encoding" ); 254 const int do_deflate = accept_encoding && strstr( accept_encoding, 255 "deflate" ); 256 if( do_deflate ) 257 { 258 evhttp_add_header( req->output_headers, "Content-Encoding", 259 "deflate" ); 250 260 compress_evbuf( response ); 251 261 } … … 316 326 } 317 327 318 319 328 static void 320 329 handle_rpc( struct evhttp_request * req, … … 357 366 const char * address ) 358 367 { 359 const char * acl;360 361 for( acl = server->acl; acl && *acl; )362 { 363 const char * delimiter = strchr( acl, ',' );364 const int len = delimiter ? delimiter - acl : (int)strlen( acl);365 char * token = tr_strndup( acl, len );366 const int match = tr_wildmat( address, token + 1);368 const char * str; 369 370 for( str = server->whitelist; str && *str; ) 371 { 372 const char * delimiter = strchr( str, ',' ); 373 const int len = delimiter ? delimiter - str : (int)strlen( str ); 374 char * token = tr_strndup( str, len ); 375 const int match = tr_wildmat( address, token ); 367 376 tr_free( token ); 368 377 if( match ) 369 return *acl == '+';378 return 1; 370 379 if( !delimiter ) 371 380 break; 372 acl= delimiter + 1;381 str = delimiter + 1; 373 382 } 374 383 … … 403 412 } 404 413 405 if( server-> acl&& !isAddressAllowed( server, req->remote_host ) )414 if( server->whitelist && !isAddressAllowed( server, req->remote_host ) ) 406 415 { 407 416 send_simple_response( req, 401, "Unauthorized IP Address" ); … … 481 490 startServer( server ); 482 491 } 483 484 492 485 493 void … … 530 538 531 539 void 532 tr_rpcSet ACL( tr_rpc_server * server,533 const char * acl)534 { 535 tr_free( server-> acl);536 server-> acl = tr_strdup( acl);540 tr_rpcSetWhitelist( tr_rpc_server * server, 541 const char * whitelist ) 542 { 543 tr_free( server->whitelist ); 544 server->whitelist = tr_strdup( whitelist ); 537 545 } 538 546 539 547 char* 540 tr_rpcGet ACL( const tr_rpc_server * server )541 { 542 return tr_strdup( server-> acl ? server->acl: "" );548 tr_rpcGetWhitelist( const tr_rpc_server * server ) 549 { 550 return tr_strdup( server->whitelist ? server->whitelist : "" ); 543 551 } 544 552 … … 599 607 { 600 608 tr_rpc_server * s = vserver; 609 601 610 stopServer( s ); 602 tr_free( s-> acl);611 tr_free( s->whitelist ); 603 612 tr_free( s->username ); 604 613 tr_free( s->password ); … … 609 618 tr_rpcClose( tr_rpc_server ** ps ) 610 619 { 611 tr_runInEventThread( ( *ps)->session, closeServer, *ps );620 tr_runInEventThread( ( *ps )->session, closeServer, *ps ); 612 621 *ps = NULL; 613 622 } … … 617 626 int isEnabled, 618 627 uint16_t port, 619 const char * acl,628 const char * whitelist, 620 629 int isPasswordEnabled, 621 630 const char * username, … … 627 636 s->session = session; 628 637 s->port = port; 629 s-> acl = tr_strdup( acl && *acl ? acl : TR_DEFAULT_RPC_ACL);638 s->whitelist = tr_strdup( whitelist && *whitelist ? whitelist : TR_DEFAULT_RPC_WHITELIST ); 630 639 s->username = tr_strdup( username ); 631 640 s->password = tr_strdup( password ); -
trunk/libtransmission/rpc-server.h
r6801 r6823 19 19 int isEnabled, 20 20 uint16_t port, 21 const char * acl,21 const char * whitelist, 22 22 int isPasswordEnabled, 23 23 const char * username, … … 37 37 38 38 int tr_rpcSetTest( const tr_rpc_server * server, 39 const char * acl,39 const char * whitelist, 40 40 char ** allocme_errmsg ); 41 41 42 void tr_rpcSet ACL( tr_rpc_server * server,43 const char * acl);42 void tr_rpcSetWhitelist( tr_rpc_server * server, 43 const char * whitelist ); 44 44 45 char* tr_rpcGet ACL( const tr_rpc_server * server );45 char* tr_rpcGetWhitelist( const tr_rpc_server * server ); 46 46 47 47 void tr_rpcSetPassword( tr_rpc_server * server, … … 60 60 int tr_rpcIsPasswordEnabled( const tr_rpc_server * session ); 61 61 62 /** (public for the unit tests) */63 char* cidrize( const char * acl );64 65 62 66 63 #endif -
trunk/libtransmission/session.c
r6801 r6823 217 217 int rpcIsEnabled, 218 218 uint16_t rpcPort, 219 const char * rpc ACL,219 const char * rpcWhitelist, 220 220 int rpcAuthIsEnabled, 221 221 const char * rpcUsername, … … 295 295 296 296 h->web = tr_webInit( h ); 297 h->rpcServer = tr_rpcInit( h, rpcIsEnabled, rpcPort, rpc ACL,297 h->rpcServer = tr_rpcInit( h, rpcIsEnabled, rpcPort, rpcWhitelist, 298 298 rpcAuthIsEnabled, rpcUsername, rpcPassword ); 299 299 … … 327 327 TR_DEFAULT_RPC_ENABLED, 328 328 TR_DEFAULT_RPC_PORT, 329 TR_DEFAULT_RPC_ ACL,329 TR_DEFAULT_RPC_WHITELIST, 330 330 FALSE, 331 331 "fnord", … … 1004 1004 1005 1005 void 1006 tr_sessionSetRPC ACL( tr_session * session,1007 const char * acl)1008 { 1009 return tr_rpcSet ACL( session->rpcServer, acl);1006 tr_sessionSetRPCWhitelist( tr_session * session, 1007 const char * whitelist ) 1008 { 1009 return tr_rpcSetWhitelist( session->rpcServer, whitelist ); 1010 1010 } 1011 1011 1012 1012 char* 1013 tr_sessionGetRPC ACL( const tr_session * session )1014 { 1015 return tr_rpcGet ACL( session->rpcServer );1013 tr_sessionGetRPCWhitelist( const tr_session * session ) 1014 { 1015 return tr_rpcGetWhitelist( session->rpcServer ); 1016 1016 } 1017 1017 -
trunk/libtransmission/transmission.h
r6801 r6823 130 130 #define TR_DEFAULT_RPC_PORT_STR "9091" 131 131 /** @see tr_sessionInitFull */ 132 #define TR_DEFAULT_RPC_ ACL "+127.0.0.1"132 #define TR_DEFAULT_RPC_WHITELIST "127.0.0.1" 133 133 /** @see tr_sessionInitFull */ 134 134 #define TR_DEFAULT_PROXY_ENABLED 0 … … 237 237 * The port on which to listen for incoming RPC requests 238 238 * 239 * @param rpcACL 240 * The access control list for allowing/denying RPC requests 241 * from specific IP ranges. 242 * @see tr_sessionSetRPCACL() 239 * @param rpcWhitelist 240 * The list of IP addresses allowed to make RPC connections. 241 * @see tr_sessionSetRPCWhitelist() 243 242 * 244 243 * @see TR_DEFAULT_PEER_SOCKET_TOS … … 246 245 * @see TR_DEFAULT_RPC_ENABLED 247 246 * @see TR_DEFAULT_RPC_PORT 248 * @see TR_DEFAULT_RPC_ ACL247 * @see TR_DEFAULT_RPC_WHITELIST 249 248 * @see tr_sessionClose() 250 249 */ … … 268 267 int rpcIsEnabled, 269 268 uint16_t rpcPort, 270 const char * rpc AccessControlList,269 const char * rpcWhitelist, 271 270 int rpcPasswordIsEnabled, 272 271 const char * rpcUsername, … … 347 346 348 347 /** 349 * @brief Specify a ccess control list (ACL).350 * 351 * ACL is a comma-delimited list of dotted-quad IP addresses, each preceded352 * by a '+' or '-' sign to denote 'allow' or 'deny'. Wildmat notation is353 * supported, meaning that '?' is interpreted as a single-character wildcard354 * and'*' is interprted as a multi-character wildcard.355 */ 356 void tr_sessionSetRPC ACL( tr_session * session,357 const char * acl);348 * @brief Specify a whitelist for remote RPC access 349 * 350 * The whitelist is a comma-separated list of dotted-quad IP addresses 351 * to be allowed. Wildmat notation is supported, meaning that 352 * '?' is interpreted as a single-character wildcard and 353 * '*' is interprted as a multi-character wildcard. 354 */ 355 void tr_sessionSetRPCWhitelist( tr_session * session, 356 const char * whitelist ); 358 357 359 358 /** @brief get the Access Control List for allowing/denying RPC requests. 360 @return a comma-separated string of ACL rules. tr_free() when done.359 @return a comma-separated string of whitelist domains. tr_free() when done. 361 360 @see tr_sessionInitFull 362 @see tr_sessionSetRPC ACL*/363 char* tr_sessionGetRPC ACL( const tr_session * );361 @see tr_sessionSetRPCWhitelist */ 362 char* tr_sessionGetRPCWhitelist( const tr_session * ); 364 363 365 364 void tr_sessionSetRPCPassword( tr_session * session, -
trunk/libtransmission/trevent.c
r6819 r6823 162 162 veh ); 163 163 event_add( &eh->pipeEvent, NULL ); 164 164 event_set_log_callback( logFunc ); 165 165 event_dispatch( ); 166 166
Note: See TracChangeset
for help on using the changeset viewer.