commit - 75d233f00c010a1489d597b82b13e3d09bc01e45
commit + 60ba426e7e5da49c017f306be78446032cdaf1cf
blob - 51cdc65babc246f824f93d4d676419cdc8282e15
blob + 4c258e917794e087d73fc576648c5e1fbf4661bd
--- gmid.c
+++ gmid.c
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)
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;
}