Change from system() to execl() for user agent script. - bitreich-httpd - Bitre… | |
git clone git://bitreich.org/bitreich-httpd git://enlrupgkhuxnvlhsf6lc3fziv5h2h… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
LICENSE | |
--- | |
commit d91240a05f9f9ccb93d93e7bea44fc7cbf79e779 | |
parent 19ed00841160bf4661c1a2533ce9008eef47090e | |
Author: Christoph Lohmann <[email protected]> | |
Date: Sun, 3 Sep 2023 20:55:01 +0200 | |
Change from system() to execl() for user agent script. | |
Diffstat: | |
M bitreich-httpd.c | 26 ++++++++++++++++++++------ | |
1 file changed, 20 insertions(+), 6 deletions(-) | |
--- | |
diff --git a/bitreich-httpd.c b/bitreich-httpd.c | |
@@ -13,6 +13,7 @@ | |
#include <string.h> | |
#include <strings.h> | |
#include <sys/socket.h> | |
+#include <sys/wait.h> | |
#include <netdb.h> | |
#include <time.h> | |
@@ -138,12 +139,13 @@ main(int argc, char *argv[]) | |
char *wwwbase, *wwwindex, *request, *ctype, *path, *le_file, | |
*le_base, clienth[NI_MAXHOST], clientp[NI_MAXSERV], *zuccbase, | |
*requested, *header, *headerval, *hosthdr; | |
- int rlen, i; | |
+ int rlen, i, user_agent_script_pid; | |
struct sockaddr_storage clt; | |
socklen_t cltlen = sizeof(clt); | |
time_t tim; | |
hosthdr = NULL; | |
+ user_agent_script_pid = -1; | |
wwwbase = "/bitreich/www"; | |
wwwindex = "index.html"; | |
@@ -194,11 +196,16 @@ main(int argc, char *argv[]) | |
continue; | |
} | |
if (!strcasecmp(header, "user-agent")) { | |
- asprintf(&path, | |
- "/home/annna/bin/modules/http-user-agent/add-u… | |
- headerval); | |
- system(path); | |
- free(path); | |
+ user_agent_script_pid = fork(); | |
+ switch (user_agent_script_pid) { | |
+ case -1: | |
+ perror("fork"); | |
+ return 1; | |
+ case 0: | |
+ return execl("add-user-agent.sh", | |
+ "/home/annna/bin/modules/http-user-age… | |
+ headerval, 0); | |
+ } | |
} | |
if (!strcasecmp(header, "host")) { | |
rlen = strlen(headerval); | |
@@ -279,6 +286,13 @@ main(int argc, char *argv[]) | |
rlen = servefile(path, ctype, 1); | |
free(path); | |
+ if (user_agent_script_pid != -1) { | |
+ if (waitpid(user_agent_script_pid, NULL, 0) < 0) { | |
+ perror("waitpid"); | |
+ return 1; | |
+ } | |
+ } | |
+ | |
return rlen; | |
} | |