diff --git a/src/sbbs3/sbbs_ini.c b/src/sbbs3/sbbs_ini.c index c7b4bb49ea0284a2cec8cb235ad580b94486d639..7f47b9546b576d2c15d62d848ecbfde04f30508a 100644 --- a/src/sbbs3/sbbs_ini.c +++ b/src/sbbs3/sbbs_ini.c @@ -47,6 +47,7 @@ static ini_bitdesc_t ftp_options[] = { static ini_bitdesc_t web_options[] = { { WEB_OPT_DEBUG_TX ,"DEBUG_TX" }, + { WEB_OPT_VIRTUAL_HOSTS ,"VIRTUAL_HOSTS" }, /* shared bits */ { BBS_OPT_NO_HOST_LOOKUP ,"NO_HOST_LOOKUP" }, diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c index 171b6a5153797c17a4c2a388814ac9d3f85d9298..7542745436dc94cc9bb31a74097199fa6ffca0bb 100644 --- a/src/sbbs3/websrvr.c +++ b/src/sbbs3/websrvr.c @@ -910,9 +910,13 @@ static BOOL check_request(http_session_t * session) FILE* file; lprintf("Validating request: %s",session->req.request); - if(session->host[0]) - sprintf(path,"%s%s%s",root_dir,session->host,session->req.request); - else + if(!(startup->options&WEB_OPT_VIRTUAL_HOSTS)) + session->host[0]=0; + if(session->host[0]) { + sprintf(path,"%s%s",root_dir,session->host); + if(isdir(path)) + sprintf(path,"%s%s%s",root_dir,session->host,session->req.request); + } else sprintf(path,"%s%s",root_dir,session->req.request); if(FULLPATH(session->req.request,path,sizeof(session->req.request))==NULL) { diff --git a/src/sbbs3/websrvr.h b/src/sbbs3/websrvr.h index e6f77ffb09040235eb17a1415ccc85fbd5cbd47f..76893a0332e7b1606a344a409b894be1cf1ad5d0 100644 --- a/src/sbbs3/websrvr.h +++ b/src/sbbs3/websrvr.h @@ -90,6 +90,7 @@ typedef struct { } web_startup_t; #define WEB_OPT_DEBUG_TX (1<<0) /* Log all transmitted responses */ +#define WEB_OPT_VIRTUAL_HOSTS (1<<1) /* Use virutal host html subdirs */ #ifdef DLLEXPORT #undef DLLEXPORT