(rpc) fix minor path resolution glitch when serving up clutch files

This commit is contained in:
Charles Kerr 2008-10-02 16:24:44 +00:00
parent b1ef118e3f
commit d7a5cf0828
1 changed files with 14 additions and 21 deletions

View File

@ -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