Changeset 6049 for trunk/libtransmission/rpc-server.c
- Timestamp:
- Jun 5, 2008, 4:23:03 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/rpc-server.c
r6046 r6049 17 17 #include <string.h> 18 18 19 #include <unistd.h> /* unlink */ 20 19 21 #include <libevent/event.h> 22 #include <shttpd/defs.h> /* edit_passwords */ 20 23 #include <shttpd/shttpd.h> 21 24 … … 26 29 27 30 #define MY_NAME "RPC Server" 31 #define MY_REALM "Transmission RPC Server" 28 32 29 33 #define BUSY_INTERVAL_MSEC 30 … … 40 44 struct evbuffer * out; 41 45 struct event timer; 46 int isPasswordEnabled; 47 char * username; 48 char * password; 42 49 char * acl; 43 50 }; … … 121 128 122 129 static void 130 getPasswordFile( tr_rpc_server * server, char * buf, int buflen ) 131 { 132 tr_buildPath( buf, buflen, tr_sessionGetConfigDir( server->session ), 133 "htpasswd", 134 NULL ); 135 } 136 137 static void 123 138 startServer( tr_rpc_server * server ) 124 139 { … … 128 143 { 129 144 char ports[128]; 145 char passwd[MAX_PATH_LENGTH]; 130 146 struct timeval tv = tr_timevalMsec( UNUSED_INTERVAL_MSEC ); 147 148 getPasswordFile( server, passwd, sizeof( passwd ) ); 149 if( !server->isPasswordEnabled ) 150 unlink( passwd ); 151 else 152 edit_passwords( passwd, MY_REALM, "user", "pass" ); 131 153 132 154 server->ctx = shttpd_init( ); … … 136 158 shttpd_set_option( server->ctx, "dir_list", "0" ); 137 159 shttpd_set_option( server->ctx, "root", "/dev/null" ); 160 shttpd_set_option( server->ctx, "auth_realm", MY_REALM ); 138 161 if( server->acl ) { 139 162 dbgmsg( "setting acl [%s]", server->acl ); 140 163 shttpd_set_option( server->ctx, "acl", server->acl ); 141 164 } 165 if( server->isPasswordEnabled ) { 166 char * buf = tr_strdup_printf( "/transmission=%s", passwd ); 167 shttpd_set_option( server->ctx, "protect", buf ); 168 tr_free( buf ); 169 } 142 170 143 171 evtimer_set( &server->timer, rpcPulse, server ); … … 151 179 if( server->ctx ) 152 180 { 181 char passwd[MAX_PATH_LENGTH]; 182 getPasswordFile( server, passwd, sizeof( passwd ) ); 183 unlink( passwd ); 184 153 185 evtimer_del( &server->timer ); 154 186 shttpd_fini( server->ctx ); … … 193 225 return server->port; 194 226 } 227 228 /**** 229 ***** ACL 230 ****/ 195 231 196 232 /* … … 328 364 } 329 365 330 c onst char*366 char* 331 367 tr_rpcGetACL( const tr_rpc_server * server ) 332 368 { 333 return server->acl ? server->acl : ""; 334 } 369 return tr_strdup( server->acl ? server->acl : "" ); 370 } 371 372 /**** 373 ***** PASSWORD 374 ****/ 375 376 void 377 tr_rpcSetUsername( tr_rpc_server * server, 378 const char * username ) 379 { 380 const int isRunning = server->ctx != NULL; 381 382 if( isRunning ) 383 stopServer( server ); 384 385 tr_free( server->username ); 386 server->username = tr_strdup( username ); 387 dbgmsg( "setting our Username to [%s]", server->username ); 388 389 if( isRunning ) 390 startServer( server ); 391 } 392 393 char* 394 tr_rpcGetUsername( const tr_rpc_server * server ) 395 { 396 return tr_strdup( server->username ? server->username : "" ); 397 } 398 399 void 400 tr_rpcSetPassword( tr_rpc_server * server, 401 const char * password ) 402 { 403 const int isRunning = server->ctx != NULL; 404 405 if( isRunning ) 406 stopServer( server ); 407 408 tr_free( server->password ); 409 server->password = tr_strdup( password ); 410 dbgmsg( "setting our Password to [%s]", server->password ); 411 412 if( isRunning ) 413 startServer( server ); 414 } 415 416 char* 417 tr_rpcGetPassword( const tr_rpc_server * server ) 418 { 419 return tr_strdup( server->password ? server->password : "" ); 420 } 421 422 void 423 tr_rpcSetPasswordEnabled( tr_rpc_server * server, 424 int isEnabled ) 425 { 426 const int isRunning = server->ctx != NULL; 427 428 if( isRunning ) 429 stopServer( server ); 430 431 server->isPasswordEnabled = isEnabled; 432 dbgmsg( "setting 'password enabled' to %d", isEnabled ); 433 434 if( isRunning ) 435 startServer( server ); 436 } 437 438 int 439 tr_rpcIsPasswordEnabled( const tr_rpc_server * server ) 440 { 441 return server->isPasswordEnabled; 442 } 443 444 /**** 445 ***** LIFE CYCLE 446 ****/ 335 447 336 448 void … … 351 463 int isEnabled, 352 464 int port, 353 const char * acl ) 465 const char * acl, 466 int isPasswordEnabled, 467 const char * username, 468 const char * password ) 354 469 { 355 470 char * errmsg; … … 370 485 s->out = evbuffer_new( ); 371 486 s->acl = tr_strdup( acl ); 487 s->username = tr_strdup( username ); 488 s->password = tr_strdup( password ); 489 s->isPasswordEnabled = isPasswordEnabled; 372 490 373 491 if( isEnabled )
Note: See TracChangeset
for help on using the changeset viewer.