svn commit: trunk/busybox/networking

vda at busybox.net vda at busybox.net
Thu Nov 16 08:12:09 PST 2006


Author: vda
Date: 2006-11-16 08:12:09 -0800 (Thu, 16 Nov 2006)
New Revision: 16537

Log:
httpd: stop being silly with setenv


Modified:
   trunk/busybox/networking/httpd.c


Changeset:
Modified: trunk/busybox/networking/httpd.c
===================================================================
--- trunk/busybox/networking/httpd.c	2006-11-16 09:55:20 UTC (rev 16536)
+++ trunk/busybox/networking/httpd.c	2006-11-16 16:12:09 UTC (rev 16537)
@@ -716,52 +716,22 @@
 
 #if ENABLE_FEATURE_HTTPD_CGI
 /****************************************************************************
- *
- > $Function: addEnv()
- *
- * $Description: Add an environment variable setting to the global list.
- *    A NAME=VALUE string is allocated, filled, and added to the list of
- *    environment settings passed to the cgi execution script.
- *
- * $Parameters:
- *  (char *) name_before_underline - The first part environment variable name.
- *  (char *) name_after_underline  - The second part environment variable name.
- *  (char *) value  . . The value to which the env variable is set.
- *
- * $Return: (void)
- *
- * $Errors: Silently returns if the env runs out of space to hold the new item
- *
+ * setenv helpers
  ****************************************************************************/
-static void addEnv(const char *name_before_underline,
-			const char *name_after_underline, const char *value)
+static void setenv1(const char *name, const char *value)
 {
-	char *s = NULL;
-	const char *underline;
-
 	if (!value)
 		value = "";
-	underline = *name_after_underline ? "_" : "";
-	asprintf(&s, "%s%s%s=%s", name_before_underline, underline,
-						      name_after_underline, value);
-	if (s) {
-		putenv(s);
-	}
+	setenv(name, value, 1);
 }
-
-#if ENABLE_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV || ENABLE_FEATURE_HTTPD_WITHOUT_INETD
-/* set environs SERVER_PORT and REMOTE_PORT */
-static void addEnvPort(const char *port_name)
+static void setenv_long(const char *name, long value)
 {
-	char buf[16];
-
-	sprintf(buf, "%u", config->port);
-	addEnv(port_name, "PORT", buf);
+	char buf[sizeof(value)*3 + 1];
+	sprintf(buf, "%ld", value);
+	setenv(name, buf, 1);
 }
 #endif
-#endif          /* CONFIG_FEATURE_HTTPD_CGI */
 
-
 #if ENABLE_FEATURE_HTTPD_BASIC_AUTH
 /****************************************************************************
  *
@@ -1058,52 +1028,49 @@
 				}
 				*script = '/';          /* is directory, find next '/' */
 			}
-			addEnv("PATH", "INFO", script);   /* set /PATH_INFO or NULL */
-			addEnv("PATH",           "",         getenv("PATH"));
-			addEnv("REQUEST",        "METHOD",   request);
+			setenv1("PATH_INFO", script);   /* set /PATH_INFO or "" */
+			setenv1("PATH", getenv("PATH")); /* Huh?? */
+			setenv1("REQUEST_METHOD", request);
 			if (config->query) {
 				char *uri = alloca(strlen(purl) + 2 + strlen(config->query));
 				if (uri)
 					sprintf(uri, "%s?%s", purl, config->query);
-				addEnv("REQUEST",        "URI",   uri);
+				setenv1("REQUEST_URI", uri);
 			} else {
-				addEnv("REQUEST",        "URI",   purl);
+				setenv1("REQUEST_URI", purl);
 			}
 			if (script != NULL)
 				*script = '\0';         /* reduce /PATH_INFO */
 			 /* SCRIPT_FILENAME required by PHP in CGI mode */
 			if (realpath(purl + 1, realpath_buff))
-				addEnv("SCRIPT", "FILENAME", realpath_buff);
+				setenv1("SCRIPT_FILENAME", realpath_buff);
 			else
-				*realpath_buff = 0;
+				*realpath_buff = '\0';
 			/* set SCRIPT_NAME as full path: /cgi-bin/dirs/script.cgi */
-			addEnv("SCRIPT_NAME",    "",         purl);
-			addEnv("QUERY_STRING",   "",         config->query);
-			addEnv("SERVER",         "SOFTWARE", httpdVersion);
-			addEnv("SERVER",         "PROTOCOL", "HTTP/1.0");
-			addEnv("GATEWAY_INTERFACE", "",      "CGI/1.1");
-			addEnv("REMOTE",         "ADDR",     config->rmt_ip_str);
+			setenv1("SCRIPT_NAME", purl);
+			setenv1("QUERY_STRING", config->query);
+			setenv1("SERVER_SOFTWARE", httpdVersion);
+			putenv("SERVER_PROTOCOL=HTTP/1.0");
+			putenv("GATEWAY_INTERFACE=CGI/1.1");
+			setenv1("REMOTE_ADDR", config->rmt_ip_str);
 #if ENABLE_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
-			addEnvPort("REMOTE");
+			setenv_long("REMOTE_PORT", config->port);
 #endif
 			if (bodyLen) {
-				char sbl[32];
-
-				sprintf(sbl, "%d", bodyLen);
-				addEnv("CONTENT", "LENGTH", sbl);
+				setenv_long("CONTENT_LENGTH", bodyLen);
 			}
 			if (cookie)
-				addEnv("HTTP", "COOKIE", cookie);
+				setenv1("HTTP_COOKIE", cookie);
 			if (content_type)
-				addEnv("CONTENT", "TYPE", content_type);
+				setenv1("CONTENT_TYPE", content_type);
 #if ENABLE_FEATURE_HTTPD_BASIC_AUTH
 			if (config->remoteuser) {
-				addEnv("REMOTE", "USER", config->remoteuser);
-				addEnv("AUTH_TYPE", "", "Basic");
+				setenv1("REMOTE_USER", config->remoteuser);
+				putenv("AUTH_TYPE=Basic");
 			}
 #endif
 			if (config->referer)
-				addEnv("HTTP", "REFERER", config->referer);
+				setenv1("HTTP_REFERER", config->referer);
 
 			/* set execve argp[0] without path */
 			argp[0] = strrchr(purl, '/') + 1;
@@ -1985,7 +1952,7 @@
 		if (p)
 			setenv("PATH", p, 1);
 # if ENABLE_FEATURE_HTTPD_WITHOUT_INETD
-		addEnvPort("SERVER");
+		setenv_long("SERVER_PORT", config->port);
 # endif
 	}
 #endif



More information about the busybox-cvs mailing list