aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-02-10 06:41:33 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-02-10 06:41:33 +0000
commit7bbbb7ef9da9dc1de07656ce53e170ed3aa4cb32 (patch)
treeb15c672ca98571649716634a083f7dd5d9a4ba30
parentd0eda7c30bda6901b5bcc8f04ded157626042da8 (diff)
downloadsmtpd-starttls-proxy-7bbbb7ef9da9dc1de07656ce53e170ed3aa4cb32.tar.gz
Use explicit stralloc to store modifs before tls
-rw-r--r--src/qmail-remote/tls.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/qmail-remote/tls.c b/src/qmail-remote/tls.c
index ec8af83..8c4c068 100644
--- a/src/qmail-remote/tls.c
+++ b/src/qmail-remote/tls.c
@@ -5,6 +5,7 @@
#include <skalibs/types.h>
#include <skalibs/env.h>
+#include <skalibs/stralloc.h>
#include <skalibs/cspawn.h>
#include <skalibs/djbunix.h>
#include <skalibs/exec.h>
@@ -19,6 +20,7 @@ void run_tls (int fdr, char const *fmtip, unsigned int timeoutconnect, unsigned
{
int fdw = dup(fdr) ;
unsigned int m = 0 ;
+ stralloc modif = STRALLOC_ZERO ;
char fmtr[UINT_FMT] ;
char fmtw[UINT_FMT] ;
char fmtt[UINT_FMT] ;
@@ -26,12 +28,12 @@ void run_tls (int fdr, char const *fmtip, unsigned int timeoutconnect, unsigned
char const *argv[20 + n] ;
if (fdw == -1) qmailr_tempusys("duplicate file descriptor") ;
- if (!env_mexec("TLS_UID", 0) || !env_mexec("TLS_GID", 0)
- || !env_mexec(qtls->flagtadir ? "CADIR" : "CAFILE", storage + qtls->tapos)) dienomem() ;
+ if (!env_addmodif(&modif, "TLS_UID", 0) || !env_addmodif(&modif, "TLS_GID", 0)
+ || !env_addmodif(&modif, qtls->flagtadir ? "CADIR" : "CAFILE", storage + qtls->tapos)) dienomem() ;
if (qtls->flagclientcert)
{
- if (!env_mexec("CERTFILE", storage + qtls->certpos)
- || !env_mexec("KEYFILE", storage + qtls->keypos)) dienomem() ;
+ if (!env_addmodif(&modif, "CERTFILE", storage + qtls->certpos)
+ || !env_addmodif(&modif, "KEYFILE", storage + qtls->keypos)) dienomem() ;
}
{
@@ -70,6 +72,6 @@ void run_tls (int fdr, char const *fmtip, unsigned int timeoutconnect, unsigned
argv[m++] = storage + helopos ;
for (unsigned int i = 0 ; i < n ; i++) argv[m++] = storage + eaddrpos[i] ;
argv[m++] = 0 ;
- mexec(argv) ;
+ mexec_m(argv, modif.s, modif.len) ;
qmailr_tempusys("exec ", argv[0]) ;
}