--- /dev/null
+--- fetch.c 2008-06-16 16:34:37.000000000 +0200
++++ fetch.c.new 2009-05-19 02:35:48.473000809 +0200
+@@ -30,18 +30,34 @@
+ char *pathInfoString;
+ char *queryString;
+ char *userStr;
++ char *pch;
++ char *p[3];
++ int i=0;
+
+ 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_TRANSLATED.");
++
++ userStr = GetPathComponents(3, pathInfoString);
++ DEBUG_Str("userstr1", userStr);
++
++ pch = strtok(userStr, "/");
++
++ while (pch != NULL) {
++ p[i] = pch;
++ pch = strtok (NULL, "/");
++ i++;
++ }
+
+- userStr = GetPathComponents(1, pathInfoString);
++ userStr = p[2];
++ DEBUG_Str("userstr2", userStr);
+ }
+ else
+ {
+@@ -68,9 +84,10 @@
+ /* Handle ~ notation */
+ if (userStr)
+ {
+- if (userStr[0] == '~')
++ DEBUG_Str("userstr3", userStr);
++ if (userStr[0] == 'home')
+ {
+- userStr++;
++ userStr = userStr + 2;
+ }
+ }
+
+@@ -100,7 +117,7 @@
+ DEBUG_Msg("Trying to extract script from PATH_INFO");
+
+ scrStr = StripPathComponents(1,pathInfoString);
+- if ( ! strlen(scrStr) ) { scrStr = 0; }
++ if ( ! strlen(scrStr) ) { scrStr = StripPathComponents(0,pathInfoString); }
+
+ DEBUG_Str("Extracted PATH_INFO", scrStr);
+ }