--- networking/httpd.c	2007-05-30 15:15:57.000000000 +0200
+++ networking/httpd.c	2007-05-31 13:18:21.000000000 +0200
@@ -940,6 +940,97 @@
 #if ENABLE_FEATURE_HTTPD_CGI
 /****************************************************************************
  *
+ > $Function: abspath()
+ *
+ * $Description: Convert a relative path into an absolute path.
+ *
+ * $Parameters:
+ *      (const char *) name  . . . . . The given path.
+ *      (char * result)  . . . . . . . Buffer to write the relative path to.
+ *      (size_t size)  . . . . . . . . Size of result buffer.
+ *
+ * $Return: (char *)  . . . . . pointer to result. NULL on error.
+ *
+ ****************************************************************************/
+static char *abspath (const char * name, char * result, size_t size)
+{
+	char * src;
+	char * dst;
+	char * slash;
+	unsigned int slen;
+
+	if (0 == name || 0 == result)
+	{
+		return NULL;
+	}
+
+	dst = result;
+	slen = 0;
+	
+	if (name[0] != '/')
+	{
+		if (!getcwd(result, size))
+		{
+			return NULL;
+		}
+	
+		while ((*dst++) != 0) ++slen;
+		dst[-1] = '/';
+		++slen;
+	}
+
+	src = name;
+	while ((size - 2) > slen && (*dst++ = *src++) != 0) ++slen;
+	if ((size - 2) <= slen)
+	{
+		return NULL;
+	}
+	dst[-1] = '/';
+	*dst = 0;
+
+	src = dst = result + 1;
+
+	while (*src)
+	{
+		if ((*dst++ = *src++) == '/')
+		{
+			slash = dst-1;      /* address of slash */
+
+			switch (*--slash)
+			{
+				case '/':           /* found "//" */
+					dst = slash+1;      /* take off "/" */
+					break;
+
+				case '.':
+					switch (*--slash)
+					{
+						case '/':           /* found "/./" */
+							dst = slash+1;      /* take off "./" */
+							break;
+			
+						case '.':
+							if (*--slash == '/')
+							{                   /* found "/../" */
+								while (*--slash != '/')  ;
+									dst = slash+1;      /* take off "x/../" */
+							}
+							break;
+					}
+					break;
+			}
+		}
+	}
+
+	*dst = 0;
+	if (--dst > result  &&  *dst == '/')  *dst = 0;
+
+
+	return result;
+}
+
+/****************************************************************************
+ *
  > $Function: sendCgi()
  *
  * $Description: Execute a CGI script and send it's stdout back
@@ -1053,7 +1144,7 @@
 		if (script != NULL)
 			*script = '\0';         /* cut off /PATH_INFO */
 		 /* SCRIPT_FILENAME required by PHP in CGI mode */
-		if (!realpath(purl + 1, realpath_buff))
+		if (!abspath(purl + 1, realpath_buff, sizeof(realpath_buff)))
 			goto error_execing_cgi;
 		setenv1("SCRIPT_FILENAME", realpath_buff);
 		/* set SCRIPT_NAME as full path: /cgi-bin/dirs/script.cgi */
