Sfoglia il codice sorgente

Set SCRIPT_NAME CGI variable if index.cgi is used (see #368)

bel 8 anni fa
parent
commit
399a7a02e5
1 ha cambiato i file con 23 aggiunte e 6 eliminazioni
  1. 23 6
      src/civetweb.c

+ 23 - 6
src/civetweb.c

@@ -8054,7 +8054,7 @@ prepare_cgi_environment(struct mg_connection *conn,
 	const char *s;
 	struct vec var_vec;
 	char *p, src_addr[IP_ADDR_STR_LEN], http_var_name[128];
-	int i, truncated;
+	int i, truncated, uri_len;
 
 	if (conn == NULL || prog == NULL || env == NULL) {
 		return;
@@ -8097,11 +8097,28 @@ prepare_cgi_environment(struct mg_connection *conn,
 	addenv(env, "LOCAL_URI=%s", conn->request_info.local_uri);
 
 	/* SCRIPT_NAME */
-	addenv(env,
-	       "SCRIPT_NAME=%.*s",
-	       (int)strlen(conn->request_info.local_uri)
-	           - ((conn->path_info == NULL) ? 0 : (int)strlen(conn->path_info)),
-	       conn->request_info.local_uri);
+	uri_len = (int)strlen(conn->request_info.local_uri);
+	if (conn->path_info == NULL) {
+		if (conn->request_info.local_uri[uri_len - 1] != '/') {
+			/* URI: /path_to_script/script.cgi */
+			addenv(env, "SCRIPT_NAME=%s", conn->request_info.local_uri);
+		} else {
+			/* URI: /path_to_script/ ... using index.cgi */
+			char *index_file = strrchr(prog, '/');
+			if (index_file) {
+				addenv(env,
+				       "SCRIPT_NAME=%s%s",
+				       conn->request_info.local_uri,
+				       index_file + 1);
+			}
+		}
+	} else {
+		/* URI: /path_to_script/script.cgi/path_info */
+		addenv(env,
+		       "SCRIPT_NAME=%.*s",
+		       uri_len - (int)strlen(conn->path_info),
+		       conn->request_info.local_uri);
+	}
 
 	addenv(env, "SCRIPT_FILENAME=%s", prog);
 	if (conn->path_info == NULL) {