commit 60ba426e7e5da49c017f306be78446032cdaf1cf from: Omar Polo date: Fri Nov 06 14:07:33 2020 UTC [cgi] setenv instead of building an env + define more env variables commit - 75d233f00c010a1489d597b82b13e3d09bc01e45 commit + 60ba426e7e5da49c017f306be78446032cdaf1cf blob - 51cdc65babc246f824f93d4d676419cdc8282e15 blob + 4c258e917794e087d73fc576648c5e1fbf4661bd --- gmid.c +++ gmid.c @@ -381,24 +381,9 @@ start_cgi(const char *path, const char *query, char *expath; char addr[INET_ADDRSTRLEN]; char *argv[] = { NULL, NULL, NULL }; - char *envp[] = { - /* inherited */ - "PATH=", - /* CGI */ - "SERVER_SOFTWARE=gmid", - /* "SERVER_NAME=example.com", */ - /* "GATEWAY_INTERFACE=CGI/version" */ - "SERVER_PROTOCOL=gemini", - "SERVER_PORT=1965", - /* "PATH_INFO=" */ - /* "PATH_TRANSLATED=" */ - /* "SCRIPT_NAME=" */ - /* "QUERY_STRING=" */ - "REMOTE_ADDR=", - NULL, - }; - size_t i; + /* skip the initial ./ */ + path += 2; close(p[0]); /* close the read end */ if (dup2(p[1], 1) == -1) @@ -408,21 +393,22 @@ start_cgi(const char *path, const char *query, goto childerr; /* skip the ./ at the start of path*/ - if (asprintf(&expath, "%s%s", dir, path+2) == -1) + if (asprintf(&expath, "%s%s", dir, path) == -1) goto childerr; argv[0] = argv[1] = expath; - /* fix the envp */ - for (i = 0; envp[i] != NULL; ++i) { - if (!strcmp(envp[i], "PATH=")) - envp[i] = getenv("PATH"); - else if (!strcmp(envp[i], "REMOTE_ADDR=")) - envp[i] = addr; - /* else if (!strcmp(envp[i], "PATH_INFO")) */ - /* ... */ - } + /* fix the env */ + setenv("SERVER_SOFTWARE", "gmid", 1); + /* setenv("SERVER_NAME", "", 1); */ + /* setenv("GATEWAY_INTERFACE", "CGI/version", 1); */ + setenv("SERVER_PROTOCOL", "gemini", 1); + setenv("SERVER_PORT", "1965", 1); + setenv("PATH_INFO", path, 1); + setenv("PATH_TRANSLATED", expath, 1); + setenv("QUERY_STRING", query ? query : "", 1); + setenv("REMOTE_ADDR", addr, 1); - execvpe(expath, argv, envp); + execvp(expath, argv); goto childerr; }