diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2021-06-02 08:54:17 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2021-06-02 08:54:17 +0000 |
| commit | 9cfe27834a3014235526c60c52652399411993de (patch) | |
| tree | f548574d0090d14b73d102822c8fe8c052fa32c9 /src/tls/s6tls_sync_and_exec_app.c | |
| parent | a6c4fb25b60cbc83a4b8bdb756fcf9c69310e6ae (diff) | |
| download | s6-networking-9cfe27834a3014235526c60c52652399411993de.tar.gz | |
Correctly clean up the environment for -z
Diffstat (limited to 'src/tls/s6tls_sync_and_exec_app.c')
| -rw-r--r-- | src/tls/s6tls_sync_and_exec_app.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/src/tls/s6tls_sync_and_exec_app.c b/src/tls/s6tls_sync_and_exec_app.c index ff42d73..5c0180c 100644 --- a/src/tls/s6tls_sync_and_exec_app.c +++ b/src/tls/s6tls_sync_and_exec_app.c @@ -1,43 +1,32 @@ /* ISC license. */ -#include <stdint.h> -#include <string.h> #include <unistd.h> #include <skalibs/strerr2.h> #include <skalibs/djbunix.h> -#include <skalibs/exec.h> #include "s6tls-internal.h" -#define MAXENVSIZE 2048 +#define MAXENVSIZE 4096 void s6tls_sync_and_exec_app (char const *const *argv, int const p[4][2], pid_t pid, uint32_t options) { - char buf[sizeof(s6tls_envvars) + MAXENVSIZE] ; - size_t m = 0 ; + char buf[MAXENVSIZE] ; ssize_t r ; close(p[2][1]) ; close(p[1][1]) ; close(p[0][0]) ; if (fd_move(p[3][0], p[1][0]) < 0 || fd_move(p[3][1], p[0][1]) < 0) strerr_diefu1sys(111, "move file descriptors") ; - if (options & 1) - { - memcpy(buf + m, s6tls_envvars, sizeof(s6tls_envvars)) ; - m += sizeof(s6tls_envvars) ; - } - r = read(p[2][0], buf + m, MAXENVSIZE) ; + r = read(p[2][0], buf, MAXENVSIZE) ; if (r < 0) strerr_diefu1sys(111, "read from handshake notification pipe") ; if (!r) { int wstat ; if (wait_pid(pid, &wstat) < 0) - strerr_diefu1sys(111, "wait") ; + strerr_diefu1sys(111, "waitpid") ; _exit(wait_estatus(wstat)) ; } - if (r >= MAXENVSIZE) - strerr_dief1x(100, "SSL data too large") ; - m += r - 1 ; - xmexec_m(argv, buf, m) ; + if (r >= MAXENVSIZE) strerr_dief1x(101, "SSL data too large; recompile with a bigger MAXENVSIZE") ; + s6tls_clean_and_exec(argv, options, buf, r-1) ; } |
