summaryrefslogtreecommitdiff
path: root/src/tls/s6tls_clean_and_exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tls/s6tls_clean_and_exec.c')
-rw-r--r--src/tls/s6tls_clean_and_exec.c26
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) ;
}