iChange from system() to execl() for user agent script. - bitreich-httpd - Bitreich HTTPD service Err bitreich.org 70
hgit clone git://bitreich.org/bitreich-httpd git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/bitreich-httpd URL:git://bitreich.org/bitreich-httpd git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/bitreich-httpd bitreich.org 70
1Log /scm/bitreich-httpd/log.gph bitreich.org 70
1Files /scm/bitreich-httpd/files.gph bitreich.org 70
1Refs /scm/bitreich-httpd/refs.gph bitreich.org 70
1Tags /scm/bitreich-httpd/tag bitreich.org 70
1README /scm/bitreich-httpd/file/README.md.gph bitreich.org 70
1LICENSE /scm/bitreich-httpd/file/LICENSE.gph bitreich.org 70
i--- Err bitreich.org 70
1commit d91240a05f9f9ccb93d93e7bea44fc7cbf79e779 /scm/bitreich-httpd/commit/d91240a05f9f9ccb93d93e7bea44fc7cbf79e779.gph bitreich.org 70
1parent 19ed00841160bf4661c1a2533ce9008eef47090e /scm/bitreich-httpd/commit/19ed00841160bf4661c1a2533ce9008eef47090e.gph bitreich.org 70
hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70
iDate: Sun, 3 Sep 2023 20:55:01 +0200 Err bitreich.org 70
i Err bitreich.org 70
iChange from system() to execl() for user agent script. Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M bitreich-httpd.c | 26 ++++++++++++++++++++------ Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 20 insertions(+), 6 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/bitreich-httpd.c b/bitreich-httpd.c /scm/bitreich-httpd/file/bitreich-httpd.c.gph bitreich.org 70
i@@ -13,6 +13,7 @@ Err bitreich.org 70
i #include <string.h> Err bitreich.org 70
i #include <strings.h> Err bitreich.org 70
i #include <sys/socket.h> Err bitreich.org 70
i+#include <sys/wait.h> Err bitreich.org 70
i #include <netdb.h> Err bitreich.org 70
i #include <time.h> Err bitreich.org 70
i Err bitreich.org 70
i@@ -138,12 +139,13 @@ main(int argc, char *argv[]) Err bitreich.org 70
i char *wwwbase, *wwwindex, *request, *ctype, *path, *le_file, Err bitreich.org 70
i *le_base, clienth[NI_MAXHOST], clientp[NI_MAXSERV], *zuccbase, Err bitreich.org 70
i *requested, *header, *headerval, *hosthdr; Err bitreich.org 70
i- int rlen, i; Err bitreich.org 70
i+ int rlen, i, user_agent_script_pid; Err bitreich.org 70
i struct sockaddr_storage clt; Err bitreich.org 70
i socklen_t cltlen = sizeof(clt); Err bitreich.org 70
i time_t tim; Err bitreich.org 70
i Err bitreich.org 70
i hosthdr = NULL; Err bitreich.org 70
i+ user_agent_script_pid = -1; Err bitreich.org 70
i Err bitreich.org 70
i wwwbase = "/bitreich/www"; Err bitreich.org 70
i wwwindex = "index.html"; Err bitreich.org 70
i@@ -194,11 +196,16 @@ main(int argc, char *argv[]) Err bitreich.org 70
i continue; Err bitreich.org 70
i } Err bitreich.org 70
i if (!strcasecmp(header, "user-agent")) { Err bitreich.org 70
i- asprintf(&path, Err bitreich.org 70
i- "/home/annna/bin/modules/http-user-agent/add-user-agent.sh '%s'", Err bitreich.org 70
i- headerval); Err bitreich.org 70
i- system(path); Err bitreich.org 70
i- free(path); Err bitreich.org 70
i+ user_agent_script_pid = fork(); Err bitreich.org 70
i+ switch (user_agent_script_pid) { Err bitreich.org 70
i+ case -1: Err bitreich.org 70
i+ perror("fork"); Err bitreich.org 70
i+ return 1; Err bitreich.org 70
i+ case 0: Err bitreich.org 70
i+ return execl("add-user-agent.sh", Err bitreich.org 70
i+ "/home/annna/bin/modules/http-user-agent/add-user-agent.sh", Err bitreich.org 70
i+ headerval, 0); Err bitreich.org 70
i+ } Err bitreich.org 70
i } Err bitreich.org 70
i if (!strcasecmp(header, "host")) { Err bitreich.org 70
i rlen = strlen(headerval); Err bitreich.org 70
i@@ -279,6 +286,13 @@ main(int argc, char *argv[]) Err bitreich.org 70
i rlen = servefile(path, ctype, 1); Err bitreich.org 70
i free(path); Err bitreich.org 70
i Err bitreich.org 70
i+ if (user_agent_script_pid != -1) { Err bitreich.org 70
i+ if (waitpid(user_agent_script_pid, NULL, 0) < 0) { Err bitreich.org 70
i+ perror("waitpid"); Err bitreich.org 70
i+ return 1; Err bitreich.org 70
i+ } Err bitreich.org 70
i+ } Err bitreich.org 70
i+ Err bitreich.org 70
i return rlen; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
.
Response:
text/plain