diff -ru cgiwrap-4.1/cgiwrap.c cgiwrap-4.1-bs/cgiwrap.c --- cgiwrap-4.1/cgiwrap.c 2008-06-16 16:34:37.000000000 +0200 +++ cgiwrap-4.1-bs/cgiwrap.c 2010-04-21 16:12:44.431392749 +0200 @@ -36,6 +36,7 @@ int main (int argc, char *argv[]) { char *userStr; /* User name */ + char *pt_path; char *scrStr; /* Name of script */ char *scriptPath; /* Path to script file */ char *cgiBaseDir; /* Base directory for cgi scripts in user's dir */ @@ -141,7 +142,10 @@ /* Determine the base directory where this user's CGI scripts are to be stored */ DEBUG_Msg(""); - cgiBaseDir = GetBaseDirectory(user); + //cgiBaseDir = GetBaseDirectory(user); + pt_path = FetchPT(); + DEBUG_Str("PATH_TRANSLATED z FetchPT(): ", pt_path); + cgiBaseDir = getBasedir(pt_path); DEBUG_Str("Script Base Directory: ", cgiBaseDir); #if defined(CONF_MULTIUSER_CGI_DIR) DEBUG_Str("MultiUser Script Base Directory: ", CONF_MULTIUSER_CGI_DIR); @@ -151,7 +155,9 @@ if ( !DirExists(cgiBaseDir) ) #endif { - MSG_Error_NoScriptDir(); + cgiBaseDir = GetBaseDirectory(user); + DEBUG_Str("Script Base Directory2: ", cgiBaseDir); + //MSG_Error_NoScriptDir(); } /* Get the script name from the given data */ Only in cgiwrap-4.1-bs: cgiwrap.c.orig diff -ru cgiwrap-4.1/fetch.c cgiwrap-4.1-bs/fetch.c --- cgiwrap-4.1/fetch.c 2008-06-16 16:34:37.000000000 +0200 +++ cgiwrap-4.1-bs/fetch.c 2010-04-21 16:16:10.773900019 +0200 @@ -34,12 +34,14 @@ DEBUG_Msg("\n"); userStr = (char *) 0; - pathInfoString = getenv("PATH_INFO"); + //pathInfoString = getenv("PATH_INFO"); + pathInfoString = getenv("PATH_TRANSLATED"); if ( pathInfoString ) /* use PATH_INFO */ { if ( pathInfoString[0] != 0 ) { - DEBUG_Msg("Trying to extract user from PATH_INFO."); + //DEBUG_Msg("Trying to extract user from PATH_INFO."); + DEBUG_Msg("Trying to extract user from PATH_TRANSLATED."); userStr = GetPathComponents(1, pathInfoString); } @@ -82,6 +84,10 @@ return userStr; } +char *FetchPT(void) { + return getenv("PATH_TRANSLATED"); +} + char *FetchScriptString( char *basedir ) { char *tempStr, *tempStr2; @@ -99,7 +105,8 @@ { DEBUG_Msg("Trying to extract script from PATH_INFO"); - scrStr = StripPathComponents(1,pathInfoString); + //scrStr = StripPathComponents(1,pathInfoString); + scrStr = StripPathComponents(0,pathInfoString); if ( ! strlen(scrStr) ) { scrStr = 0; } DEBUG_Str("Extracted PATH_INFO", scrStr); Only in cgiwrap-4.1-bs: fetch.c.orig diff -ru cgiwrap-4.1/fetch.h cgiwrap-4.1-bs/fetch.h --- cgiwrap-4.1/fetch.h 2008-06-16 16:34:37.000000000 +0200 +++ cgiwrap-4.1-bs/fetch.h 2010-04-21 16:10:14.423934798 +0200 @@ -26,3 +26,4 @@ char *FetchUserString(void); char *FetchScriptString(char *basedir); +char *FetchPT(void); Only in cgiwrap-4.1-bs: fetch.h.orig diff -ru cgiwrap-4.1/util.c cgiwrap-4.1-bs/util.c --- cgiwrap-4.1/util.c 2008-06-16 16:34:37.000000000 +0200 +++ cgiwrap-4.1-bs/util.c 2010-04-21 16:20:17.478653598 +0200 @@ -840,6 +840,53 @@ } +char *GetPathComponent(int count, char *path) +{ + char *tmp; + int i, j, found; + int done; + int len; + + tmp = strdup(path); + len = strlen(tmp); + + /* First skip over any leading /'s */ + i = 0; + done = 0; + while ( i