aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmail-remote/qmailr_tls.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-02-06 02:16:08 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-02-06 02:16:08 +0000
commit5ca4a0e5b65066f41af7c670e8200b0d0eba41dd (patch)
tree76f0fdef194f6227f4903d9139157a76b18f936e /src/qmail-remote/qmailr_tls.c
parent025de935255c05d72a5c35d86c6c5c4d212247a1 (diff)
downloadsmtpd-starttls-proxy-5ca4a0e5b65066f41af7c670e8200b0d0eba41dd.tar.gz
Just name it qmail-remote after all
Diffstat (limited to 'src/qmail-remote/qmailr_tls.c')
-rw-r--r--src/qmail-remote/qmailr_tls.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/qmail-remote/qmailr_tls.c b/src/qmail-remote/qmailr_tls.c
new file mode 100644
index 0000000..6e09a82
--- /dev/null
+++ b/src/qmail-remote/qmailr_tls.c
@@ -0,0 +1,47 @@
+/* ISC license. */
+
+#include <stddef.h>
+
+#include <smtpd-starttls-proxy/config.h>
+#include "qmailr.h"
+
+int qmailr_tls_init (qmailr_tls *qt, stralloc *sa)
+{
+ static char const *tafile = SMTPD_STARTTLS_PROXY_QMAIL_HOME "/control/trustanchors" ;
+ static char const *certfile = SMTPD_STARTTLS_PROXY_QMAIL_HOME "/control/clientcert" ;
+ static char const *keyfile = SMTPD_STARTTLS_PROXY_QMAIL_HOME "/control/clientkey" ;
+ static char const *strictfile = SMTPD_STARTTLS_PROXY_QMAIL_HOME "/control/tlsstrictness" ;
+
+ qmailr_tls tmp = QMAILR_TLS_ZERO ;
+ size_t sabase = sa->len ;
+ int r = qmailr_control_read(tafile, sa, &tmp.tapos) ;
+ if (r == -1) return 0 ;
+ if (r)
+ {
+ unsigned int strictness = 0 ;
+ tmp.flagtls = 1 ;
+ if (sa->s[sa->len - 2] == '/')
+ {
+ sa->s[--sa->len - 1] = 0 ;
+ tmp.flagtadir = 1 ;
+ }
+ r = qmailr_control_read(certfile, sa, &tmp.certpos) ;
+ if (r == -1) goto err ;
+ if (r)
+ {
+ r = qmailr_control_read(keyfile, sa, &tmp.keypos) ;
+ if (r == -1) goto err ;
+ if (r) tmp.flagclientcert = 1 ;
+ }
+ r = qmailr_control_readint(strictfile, &strictness, sa) ;
+ if (r == -1) goto err ;
+ tmp.strictness = strictness & 3 ;
+ }
+
+ *qt = tmp ;
+ return 1 ;
+
+ err:
+ sa->len = sabase ;
+ return 0 ;
+}