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 Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i+#include Err bitreich.org 70 i #include Err bitreich.org 70 i #include 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 .