(rpc) fix minor path resolution glitch when serving up clutch files
This commit is contained in:
parent
b1ef118e3f
commit
d7a5cf0828
|
@ -298,32 +298,25 @@ static void
|
||||||
handle_clutch( struct evhttp_request * req,
|
handle_clutch( struct evhttp_request * req,
|
||||||
struct tr_rpc_server * server )
|
struct tr_rpc_server * server )
|
||||||
{
|
{
|
||||||
const char * uri;
|
char * pch;
|
||||||
struct evbuffer * buf = evbuffer_new( );
|
char * subpath;
|
||||||
|
char * filename;
|
||||||
|
const char * clutchDir = tr_getClutchDir( server->session );
|
||||||
|
|
||||||
assert( !strncmp( req->uri, "/transmission/web/", 18 ) );
|
assert( !strncmp( req->uri, "/transmission/web/", 18 ) );
|
||||||
|
|
||||||
evbuffer_add_printf( buf, "%s%s", tr_getClutchDir(
|
subpath = tr_strdup( req->uri + 18 );
|
||||||
server->session ), TR_PATH_DELIMITER_STR );
|
if(( pch = strchr( subpath, '?' )))
|
||||||
uri = req->uri + 18;
|
*pch = '\0';
|
||||||
if( ( *uri == '?' ) || ( *uri == '\0' ) )
|
|
||||||
evbuffer_add_printf( buf, "index.html" );
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const char * pch = strchr( uri, '?' );
|
|
||||||
if( pch )
|
|
||||||
evbuffer_add_printf( buf, "%*.*s", (int)( pch - uri ),
|
|
||||||
(int)( pch - uri ), uri );
|
|
||||||
else
|
|
||||||
evbuffer_add_printf( buf, "%s", uri );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( strstr( (const char *)EVBUFFER_DATA( buf ), ".." ) )
|
filename = *subpath
|
||||||
send_simple_response( req, 401, NULL );
|
? tr_strdup_printf( "%s%s%s", clutchDir, TR_PATH_DELIMITER_STR, subpath )
|
||||||
else
|
: tr_strdup_printf( "%s%s%s", clutchDir, TR_PATH_DELIMITER_STR, "index.html" );
|
||||||
serve_file( req, (const char *)EVBUFFER_DATA( buf ) );
|
|
||||||
|
|
||||||
evbuffer_free( buf );
|
serve_file( req, filename );
|
||||||
|
|
||||||
|
tr_free( filename );
|
||||||
|
tr_free( subpath );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue