Changeset 6825


Ignore:
Timestamp:
Oct 1, 2008, 10:59:29 PM (13 years ago)
Author:
charles
Message:

add a separate flag for enabling/disabling the rpc address whitelist

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/cli/cli.c

    r6823 r6825  
    311311        TR_DEFAULT_RPC_ENABLED,
    312312        TR_DEFAULT_RPC_PORT,
     313        TR_DEFAULT_RPC_WHITELIST_ENABLED,
    313314        TR_DEFAULT_RPC_WHITELIST,
    314315        FALSE, "fnord", "potzrebie",
  • trunk/daemon/daemon.c

    r6823 r6825  
    3434static char        myConfigFilename[MAX_PATH_LENGTH];
    3535
    36 #define KEY_BLOCKLIST        "blocklist-enabled"
    37 #define KEY_DOWNLOAD_DIR     "download-dir"
    38 #define KEY_ENCRYPTION       "encryption"
    39 #define KEY_LAZY_BITFIELD    "lazy-bitfield-enabled"
    40 #define KEY_PEER_LIMIT       "max-peers-global"
    41 #define KEY_PEER_PORT        "peer-port"
    42 #define KEY_PORT_FORWARDING  "port-forwarding-enabled"
    43 #define KEY_PEX_ENABLED      "pex-enabled"
    44 #define KEY_AUTH_REQUIRED    "rpc-authentication-required"
    45 #define KEY_USERNAME         "rpc-username"
    46 #define KEY_PASSWORD         "rpc-password"
    47 #define KEY_WHITELIST        "rpc-whitelist"
    48 #define KEY_RPC_PORT         "rpc-port"
    49 #define KEY_DSPEED           "download-limit"
    50 #define KEY_DSPEED_ENABLED   "download-limit-enabled"
    51 #define KEY_USPEED           "upload-limit"
    52 #define KEY_USPEED_ENABLED   "upload-limit-enabled"
    53 
    54 #define CONFIG_FILE          "settings.json"
     36#define KEY_BLOCKLIST         "blocklist-enabled"
     37#define KEY_DOWNLOAD_DIR      "download-dir"
     38#define KEY_ENCRYPTION        "encryption"
     39#define KEY_LAZY_BITFIELD     "lazy-bitfield-enabled"
     40#define KEY_PEER_LIMIT        "max-peers-global"
     41#define KEY_PEER_PORT         "peer-port"
     42#define KEY_PORT_FORWARDING   "port-forwarding-enabled"
     43#define KEY_PEX_ENABLED       "pex-enabled"
     44#define KEY_AUTH_REQUIRED     "rpc-authentication-required"
     45#define KEY_USERNAME          "rpc-username"
     46#define KEY_PASSWORD          "rpc-password"
     47#define KEY_WHITELIST         "rpc-whitelist"
     48#define KEY_WHITELIST_ENABLED "rpc-whitelist-enabled"
     49#define KEY_RPC_PORT          "rpc-port"
     50#define KEY_DSPEED            "download-limit"
     51#define KEY_DSPEED_ENABLED    "download-limit-enabled"
     52#define KEY_USPEED            "upload-limit"
     53#define KEY_USPEED_ENABLED    "upload-limit-enabled"
     54
     55#define CONFIG_FILE           "settings.json"
    5556
    5657/***
     
    170171    tr_benc       state, *dict = NULL;
    171172    int           peerPort = -1, peers = -1;
     173    int           whitelistEnabled = -1;
    172174    int           pexEnabled = -1;
    173175    int           fwdEnabled = -1;
     
    209211    getConfigInt( dict, KEY_RPC_PORT,        &rpcPort,
    210212                  TR_DEFAULT_RPC_PORT );
     213    getConfigInt( dict, KEY_WHITELIST_ENABLED, &whitelistEnabled,
     214                  TR_DEFAULT_RPC_WHITELIST_ENABLED );
    211215    getConfigStr( dict, KEY_WHITELIST,       &whitelist,
    212216                  TR_DEFAULT_RPC_WHITELIST );
     
    232236                                    blocklistEnabled,
    233237                                    TR_DEFAULT_PEER_SOCKET_TOS,
    234                                     TRUE, rpcPort, whitelist, authRequired,
    235                                     username, password,
     238                                    TRUE, rpcPort,
     239                                    whitelistEnabled, whitelist,
     240                                    authRequired, username, password,
    236241                                    TR_DEFAULT_PROXY_ENABLED,
    237242                                    TR_DEFAULT_PROXY,
  • trunk/gtk/main.c

    r6823 r6825  
    485485            pref_flag_get( PREF_KEY_RPC_ENABLED ),
    486486            pref_int_get( PREF_KEY_RPC_PORT ),
     487            pref_flag_get( PREF_KEY_RPC_WHITELIST_ENABLED ),
    487488            pref_string_get( PREF_KEY_RPC_WHITELIST ),
    488489            pref_flag_get( PREF_KEY_RPC_AUTH_ENABLED ),
     
    11971198        const char * s = pref_string_get( key );
    11981199        tr_sessionSetRPCWhitelist( tr, s );
     1200    }
     1201    else if( !strcmp( key, PREF_KEY_RPC_WHITELIST_ENABLED ) )
     1202    {
     1203        tr_sessionSetRPCWhitelistEnabled( tr, pref_flag_get( key ) );
    11991204    }
    12001205    else if( !strcmp( key, PREF_KEY_RPC_USERNAME ) )
  • trunk/gtk/tr-prefs.c

    r6823 r6825  
    129129    pref_int_set_default    ( PREF_KEY_RPC_PORT, TR_DEFAULT_RPC_PORT );
    130130    pref_string_set_default ( PREF_KEY_RPC_WHITELIST, TR_DEFAULT_RPC_WHITELIST );
     131    pref_flag_set_default   ( PREF_KEY_RPC_WHITELIST_ENABLED, TR_DEFAULT_RPC_WHITELIST_ENABLED  );
     132
    131133
    132134    rand = g_rand_new ( );
     
    595597    GSList *           widgets;
    596598    GSList *           auth_widgets;
     599    GSList *           whitelist_widgets;
    597600    GtkToggleButton *  rpc_tb;
    598601    GtkToggleButton *  auth_tb;
     602    GtkToggleButton *  whitelist_tb;
    599603};
    600604
     
    687691    const int          auth_active = gtk_toggle_button_get_active(
    688692        page->auth_tb );
     693    const int          whitelist_active = gtk_toggle_button_get_active(
     694        page->whitelist_tb );
    689695    GtkTreeSelection * sel = gtk_tree_view_get_selection( page->view );
    690696    const int          have_addr =
     
    700706        gtk_widget_set_sensitive( GTK_WIDGET(
    701707                                      l->data ), rpc_active && auth_active );
     708
     709    for( l = page->whitelist_widgets; l != NULL; l = l->next )
     710        gtk_widget_set_sensitive( GTK_WIDGET( l->data ),
     711                                  rpc_active && whitelist_active );
    702712
    703713    gtk_widget_set_sensitive( page->remove_button,
     
    761771    hig_workarea_add_wide_control( t, &row, h );
    762772
     773    /* port */
     774    w = new_spin_button( PREF_KEY_RPC_PORT, core, 0, 65535, 1 );
     775    page->widgets = g_slist_append( page->widgets, w );
     776    w = hig_workarea_add_row( t, &row, _( "Listening _port:" ), w, NULL );
     777    page->widgets = g_slist_append( page->widgets, w );
     778
    763779    /* require authentication */
    764780    s = _( "_Require username" );
     
    784800    page->auth_widgets = g_slist_append( page->auth_widgets, w );
    785801
    786     /* port */
    787     w = new_spin_button( PREF_KEY_RPC_PORT, core, 0, 65535, 1 );
     802    /* require authentication */
     803    s = _( "Only allow the following IP _addresses to connect:" );
     804    w = new_check_button( s, PREF_KEY_RPC_WHITELIST_ENABLED, core );
     805    hig_workarea_add_wide_control( t, &row, w );
     806    page->whitelist_tb = GTK_TOGGLE_BUTTON( w );
    788807    page->widgets = g_slist_append( page->widgets, w );
    789     w = hig_workarea_add_row( t, &row, _( "Listening _port:" ), w, NULL );
    790     page->widgets = g_slist_append( page->widgets, w );
     808    g_signal_connect( w, "clicked", G_CALLBACK( onRPCToggled ), page );
    791809
    792810    /* access control list */
     
    807825                          G_CALLBACK( on_tree_view_button_released ), NULL );
    808826
    809         page->widgets = g_slist_append( page->widgets, w );
     827        page->whitelist_widgets = g_slist_append( page->whitelist_widgets, w );
    810828        v = page->view = GTK_TREE_VIEW( w );
    811829        gtk_tooltips_set_tip( tips, w,
     
    834852        gtk_tree_view_set_headers_visible( v, FALSE );
    835853
    836         s = _( "Allowed _IP Addresses:" );
     854        s = _( "Addresses:" );
    837855        w = hig_workarea_add_row( t, &row, s, w, NULL );
    838856        gtk_misc_set_alignment( GTK_MISC( w ), 0.0f, 0.0f );
    839857        gtk_misc_set_padding( GTK_MISC( w ), 0, GUI_PAD );
    840         page->widgets = g_slist_append( page->widgets, w );
     858        page->whitelist_widgets = g_slist_append( page->whitelist_widgets, w );
    841859
    842860        h = gtk_hbox_new( TRUE, GUI_PAD );
     
    848866        gtk_box_pack_start_defaults( GTK_BOX( h ), w );
    849867        w = gtk_button_new_from_stock( GTK_STOCK_ADD );
    850         page->widgets = g_slist_append( page->widgets, w );
     868        page->whitelist_widgets = g_slist_append( page->whitelist_widgets, w );
    851869        g_signal_connect( w, "clicked", G_CALLBACK( onAddWhitelistClicked ), page );
    852870        gtk_box_pack_start_defaults( GTK_BOX( h ), w );
  • trunk/gtk/tr-prefs.h

    r6823 r6825  
    6767#define PREF_KEY_RPC_ENABLED            "rpc-enabled"
    6868#define PREF_KEY_RPC_WHITELIST          "rpc-whitelist"
     69#define PREF_KEY_RPC_WHITELIST_ENABLED  "rpc-whitelist-enabled"
    6970#define PREF_KEY_RPC_AUTH_ENABLED       "rpc-authentication-required"
    7071#define PREF_KEY_RPC_PASSWORD           "rpc-password"
  • trunk/libtransmission/rpc-server.c

    r6823 r6825  
    4343struct tr_rpc_server
    4444{
    45     unsigned int       isEnabled         : 1;
    46     unsigned int       isPasswordEnabled : 1;
     45    unsigned int       isEnabled          : 1;
     46    unsigned int       isPasswordEnabled  : 1;
     47    unsigned int       isWhitelistEnabled : 1;
    4748    uint16_t           port;
    4849    struct evhttp *    httpd;
     
    368369    const char * str;
    369370
     371    if( !server->isWhitelistEnabled )
     372        return 1;
     373
    370374    for( str = server->whitelist; str && *str; )
    371375    {
     
    412416        }
    413417
    414         if( server->whitelist && !isAddressAllowed( server, req->remote_host ) )
     418        if( !isAddressAllowed( server, req->remote_host ) )
    415419        {
    416420            send_simple_response( req, 401, "Unauthorized IP Address" );
     
    551555}
    552556
     557void
     558tr_rpcSetWhitelistEnabled( tr_rpc_server  * server,
     559                           int              isEnabled )
     560{
     561    server->isWhitelistEnabled = isEnabled != 0;
     562}
     563
     564int
     565tr_rpcGetWhitelistEnabled( const tr_rpc_server * server )
     566{
     567    return server->isWhitelistEnabled;
     568}
     569
    553570/****
    554571*****  PASSWORD
     
    626643            int          isEnabled,
    627644            uint16_t     port,
     645            int          isWhitelistEnabled,
    628646            const char * whitelist,
    629647            int          isPasswordEnabled,
     
    639657    s->username = tr_strdup( username );
    640658    s->password = tr_strdup( password );
     659    s->isWhitelistEnabled = isWhitelistEnabled != 0;
    641660    s->isPasswordEnabled = isPasswordEnabled != 0;
    642661    s->isEnabled = isEnabled != 0;
  • trunk/libtransmission/rpc-server.h

    r6823 r6825  
    1919                            int                isEnabled,
    2020                            uint16_t           port,
     21                            int                isWhitelistEnabled,
    2122                            const char *       whitelist,
    2223                            int                isPasswordEnabled,
     
    3940                               const char *          whitelist,
    4041                               char **               allocme_errmsg );
     42
     43void            tr_rpcSetWhitelistEnabled( tr_rpc_server  * server,
     44                                           int              isEnabled );
     45
     46int             tr_rpcGetWhitelistEnabled( const tr_rpc_server * server );
    4147
    4248void            tr_rpcSetWhitelist( tr_rpc_server * server,
  • trunk/libtransmission/session.c

    r6823 r6825  
    217217                    int                rpcIsEnabled,
    218218                    uint16_t           rpcPort,
     219                    int                rpcWhitelistIsEnabled,
    219220                    const char *       rpcWhitelist,
    220221                    int                rpcAuthIsEnabled,
     
    295296
    296297    h->web = tr_webInit( h );
    297     h->rpcServer = tr_rpcInit( h, rpcIsEnabled, rpcPort, rpcWhitelist,
     298    h->rpcServer = tr_rpcInit( h, rpcIsEnabled, rpcPort,
     299                               rpcWhitelistIsEnabled, rpcWhitelist,
    298300                               rpcAuthIsEnabled, rpcUsername, rpcPassword );
    299301
     
    327329                               TR_DEFAULT_RPC_ENABLED,
    328330                               TR_DEFAULT_RPC_PORT,
     331                               TR_DEFAULT_RPC_WHITELIST_ENABLED,
    329332                               TR_DEFAULT_RPC_WHITELIST,
    330333                               FALSE,
     
    10171020
    10181021void
     1022tr_sessionSetRPCWhitelistEnabled( tr_session * session,
     1023                                  int          isEnabled )
     1024{
     1025    return tr_rpcSetWhitelistEnabled( session->rpcServer,
     1026                                      isEnabled );
     1027}
     1028
     1029int
     1030tr_sessionGetRPCWhitelistEnabled( const tr_session * session )
     1031{
     1032    return tr_rpcGetWhitelistEnabled( session->rpcServer );
     1033}
     1034
     1035
     1036void
    10191037tr_sessionSetRPCPassword( tr_session * session,
    10201038                          const char * password )
  • trunk/libtransmission/transmission.h

    r6823 r6825  
    132132#define TR_DEFAULT_RPC_WHITELIST            "127.0.0.1"
    133133/** @see tr_sessionInitFull */
     134#define TR_DEFAULT_RPC_WHITELIST_ENABLED    0
     135/** @see tr_sessionInitFull */
    134136#define TR_DEFAULT_PROXY_ENABLED            0
    135137/** @see tr_sessionInitFull */
     
    246248 * @see TR_DEFAULT_RPC_PORT
    247249 * @see TR_DEFAULT_RPC_WHITELIST
     250 * @see TR_DEFAULT_RPC_WHITELIST_ENABLED
    248251 * @see tr_sessionClose()
    249252 */
     
    267270                                int                rpcIsEnabled,
    268271                                uint16_t           rpcPort,
     272                                int                rpcWhitelistIsEnabled,
    269273                                const char *       rpcWhitelist,
    270274                                int                rpcPasswordIsEnabled,
     
    362366char* tr_sessionGetRPCWhitelist( const tr_session * );
    363367
     368void  tr_sessionSetRPCWhitelistEnabled( tr_session * session,
     369                                        int          isEnabled );
     370
     371int   tr_sessionGetRPCWhitelistEnabled( const tr_session * session );
     372
    364373void  tr_sessionSetRPCPassword( tr_session * session,
    365374                                const char * password );
Note: See TracChangeset for help on using the changeset viewer.