diff options
Diffstat (limited to 'src/tls/s6tls_clean_and_exec.c')
-rw-r--r-- | src/tls/s6tls_clean_and_exec.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/tls/s6tls_clean_and_exec.c b/src/tls/s6tls_clean_and_exec.c index 9432e3a..9c1026b 100644 --- a/src/tls/s6tls_clean_and_exec.c +++ b/src/tls/s6tls_clean_and_exec.c @@ -1,6 +1,7 @@ /* ISC license. */ -#include <stddef.h> +#include <string.h> +#include <stdlib.h> #include <skalibs/posixplz.h> #include <skalibs/bytestr.h> @@ -9,6 +10,12 @@ #include "s6tls-internal.h" +static int startswith (void const *a, void const *b) +{ + char const *bb = *(char const *const *)b ; + return strncmp(a, bb, strlen(bb)) ; +} + void s6tls_clean_and_exec (char const *const *argv, uint32_t options, char const *modif, size_t modiflen) { if (options & 1) @@ -17,25 +24,20 @@ void s6tls_clean_and_exec (char const *const *argv, uint32_t options, char const { "CADIR=", "CAFILE=", - "KEYFILE=", + "CERTFILE:", "CERTFILE=", - "TLS_UID=", - "TLS_GID=", "KEYFILE:", - "CERTFILE:", - 0 + "KEYFILE=", + "TLS_GID=", + "TLS_UID=" } ; char const *const *envp = (char const *const *)environ ; size_t m = 0 ; size_t n = env_len(envp) ; char const *newenvp[n + 1] ; for (; *envp ; envp++) - { - char const *const *var = toclean ; - for (; *var ; var++) - if (str_start(*envp, *var)) break ; - if (!*var) newenvp[m++] = *envp ; - } + if (!bsearch(*envp, toclean, sizeof(toclean)/sizeof(char const *), sizeof(char const *), &startswith)) + newenvp[m++] = *envp ; newenvp[m] = 0 ; xmexec_fm(argv, newenvp, m, modif, modiflen) ; } |