aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-02-02 18:24:26 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-02-02 18:24:26 +0000
commit87664716d2c1c43e4386099e3ce3f4b11d56e76e (patch)
tree00ca1371c8847099335b7fd358fca2dea73a8f66
parent36491e787c8be5b32b93f5c3b20edd9aa9d4c4e9 (diff)
downloadsmtpd-starttls-proxy-87664716d2c1c43e4386099e3ce3f4b11d56e76e.tar.gz
Make it build. (No, it won't work.)
-rw-r--r--.gitignore1
-rw-r--r--package/deps.mak15
-rw-r--r--src/qmail-smtpc/deps-exe/qmail-smtpc1
-rw-r--r--src/qmail-smtpc/dns.c30
-rw-r--r--src/qmail-smtpc/qmail-smtpc.c15
-rw-r--r--src/qmail-smtpc/qmail-smtpc.h6
-rw-r--r--src/qmail-smtpc/qmailr.h6
-rw-r--r--src/qmail-smtpc/qmailr_control.c3
-rw-r--r--src/qmail-smtpc/smtproutes.c10
9 files changed, 58 insertions, 29 deletions
diff --git a/.gitignore b/.gitignore
index 6277dc2..1a3076b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
/src/include/smtpd-starttls-proxy/config.h
/smtpd-starttls-proxy-io
/qmail-smtpc
+/qmail-smtpc-io
diff --git a/package/deps.mak b/package/deps.mak
index f17b9c0..64de93c 100644
--- a/package/deps.mak
+++ b/package/deps.mak
@@ -2,19 +2,24 @@
# This file has been generated by tools/gen-deps.sh
#
-src/qmail-smtpc/qmail-smtpc.o src/qmail-smtpc/qmail-smtpc.lo: src/qmail-smtpc/qmail-smtpc.c src/qmail-smtpc/qmailr.h src/include/smtpd-starttls-proxy/config.h
+src/qmail-smtpc/qmail-smtpc.h: src/qmail-smtpc/qmailr.h
+src/qmail-smtpc/dns.o src/qmail-smtpc/dns.lo: src/qmail-smtpc/dns.c src/qmail-smtpc/qmail-smtpc.h src/qmail-smtpc/qmailr.h
+src/qmail-smtpc/qmail-smtpc.o src/qmail-smtpc/qmail-smtpc.lo: src/qmail-smtpc/qmail-smtpc.c src/qmail-smtpc/qmail-smtpc.h src/qmail-smtpc/qmailr.h src/include/smtpd-starttls-proxy/config.h
+src/qmail-smtpc/qmailr_control.o src/qmail-smtpc/qmailr_control.lo: src/qmail-smtpc/qmailr_control.c src/qmail-smtpc/qmailr.h
src/qmail-smtpc/qmailr_error.o src/qmail-smtpc/qmailr_error.lo: src/qmail-smtpc/qmailr_error.c src/include/smtpd-starttls-proxy/config.h
src/qmail-smtpc/qmailr_tcpto.o src/qmail-smtpc/qmailr_tcpto.lo: src/qmail-smtpc/qmailr_tcpto.c src/qmail-smtpc/qmailr.h src/include/smtpd-starttls-proxy/config.h
-src/qmail-smtpc/smtproutes.o src/qmail-smtpc/smtproutes.lo: src/qmail-smtpc/smtproutes.c src/qmail-smtpc/qmailr.h src/include/smtpd-starttls-proxy/config.h
+src/qmail-smtpc/qmailr_tls.o src/qmail-smtpc/qmailr_tls.lo: src/qmail-smtpc/qmailr_tls.c src/qmail-smtpc/qmailr.h src/include/smtpd-starttls-proxy/config.h
+src/qmail-smtpc/qmailr_utils.o src/qmail-smtpc/qmailr_utils.lo: src/qmail-smtpc/qmailr_utils.c src/qmail-smtpc/qmailr.h
+src/qmail-smtpc/smtproutes.o src/qmail-smtpc/smtproutes.lo: src/qmail-smtpc/smtproutes.c src/qmail-smtpc/qmail-smtpc.h src/qmail-smtpc/qmailr.h src/include/smtpd-starttls-proxy/config.h
src/smtpd-starttls-proxy/smtpd-starttls-proxy-io.o src/smtpd-starttls-proxy/smtpd-starttls-proxy-io.lo: src/smtpd-starttls-proxy/smtpd-starttls-proxy-io.c
ifeq ($(strip $(STATIC_LIBS_ARE_PIC)),)
-libqmailr.a.xyzzy: src/qmail-smtpc/qmailr_error.o src/qmail-smtpc/qmailr_tcpto.o
+libqmailr.a.xyzzy: src/qmail-smtpc/qmailr_control.o src/qmail-smtpc/qmailr_error.o src/qmail-smtpc/qmailr_tcpto.o src/qmail-smtpc/qmailr_tls.o src/qmail-smtpc/qmailr_utils.o
else
-libqmailr.a.xyzzy:src/qmail-smtpc/qmailr_error.lo src/qmail-smtpc/qmailr_tcpto.lo
+libqmailr.a.xyzzy:src/qmail-smtpc/qmailr_control.lo src/qmail-smtpc/qmailr_error.lo src/qmail-smtpc/qmailr_tcpto.lo src/qmail-smtpc/qmailr_tls.lo src/qmail-smtpc/qmailr_utils.lo
endif
qmail-smtpc: EXTRA_LIBS :=
-qmail-smtpc: src/qmail-smtpc/qmail-smtpc.o src/qmail-smtpc/smtproutes.o libqmailr.a.xyzzy -lskarnet
+qmail-smtpc: src/qmail-smtpc/qmail-smtpc.o src/qmail-smtpc/dns.o src/qmail-smtpc/smtproutes.o libqmailr.a.xyzzy -ls6dns -lskarnet
smtpd-starttls-proxy-io: EXTRA_LIBS := ${SOCKET_LIB} ${SYSCLOCK_LIB}
smtpd-starttls-proxy-io: src/smtpd-starttls-proxy/smtpd-starttls-proxy-io.o -lskarnet
INTERNAL_LIBS := libqmailr.a.xyzzy
diff --git a/src/qmail-smtpc/deps-exe/qmail-smtpc b/src/qmail-smtpc/deps-exe/qmail-smtpc
index b0b5a08..5bb5360 100644
--- a/src/qmail-smtpc/deps-exe/qmail-smtpc
+++ b/src/qmail-smtpc/deps-exe/qmail-smtpc
@@ -1,4 +1,5 @@
dns.o
smtproutes.o
libqmailr.a.xyzzy
+-ls6dns
-lskarnet
diff --git a/src/qmail-smtpc/dns.c b/src/qmail-smtpc/dns.c
index a469019..52ec552 100644
--- a/src/qmail-smtpc/dns.c
+++ b/src/qmail-smtpc/dns.c
@@ -23,7 +23,7 @@ static int mx_cmp (void const *a, void const *b)
void dns_init (void)
{
- if (!s6dns_init_options(0)) qmail_tempsys("Unable to init DNS") ;
+ if (!s6dns_init_options(0)) qmailr_tempsys("Unable to init DNS") ;
}
void dns_canon (char const *host, char const *const *recip, unsigned int n, size_t *recippos, genalloc *mxpos, stralloc *storage)
@@ -38,7 +38,7 @@ void dns_canon (char const *host, char const *const *recip, unsigned int n, size
char const *at = strrchr(recip[i], '@') ;
if (!at) qmailr_perm("Invalid recipient") ;
atpos[i] = at - recip[i] ;
- if (!s6dns_domain_fromstring_noqualify_encode(&info[i].q, at+1, strlen(at+1))
+ if (!s6dns_domain_fromstring_noqualify_encode(&info[i].q, at+1, strlen(at+1)))
qmailr_tempsys("Unable to DNS-encode recipient domain") ;
cnames[i].ds = genalloc_zero ;
cnames[i].rtype = S6DNS_T_CNAME ;
@@ -48,7 +48,7 @@ void dns_canon (char const *host, char const *const *recip, unsigned int n, size
info[i].parsefunc = &s6dns_message_parse_answer_domain ;
info[i].data = cnames + i ;
}
- if (!s6dns_domain_fromstring_noqualify_encode(&info[n].q, host, strlen(host))
+ if (!s6dns_domain_fromstring_noqualify_encode(&info[n].q, host, strlen(host)))
qmailr_tempsys("Unable to DNS-encode recipient domain") ;
if (mxpos)
@@ -66,11 +66,11 @@ void dns_canon (char const *host, char const *const *recip, unsigned int n, size
for (unsigned int i = 0 ; i < n ; i++)
{
recippos[i] = storage->len ;
- box_encode(recip[i], atpos[i], storage) ;
+ // TODO: box_encode(recip[i], atpos[i], storage) ;
if (!stralloc_catb(storage, "@", 1)) dienomem() ;
if (!info[i].status && genalloc_len(s6dns_domain_t, &cnames[i].ds))
{
- if (!s6dns_domain_decode(genalloc_s(s6dns_domain_t, &cnames[i].ds))
+ if (!s6dns_domain_decode(genalloc_s(s6dns_domain_t, &cnames[i].ds)))
qmailr_tempsys("Unable to parse CNAME") ;
if (!stralloc_readyplus(storage, 256)) dienomem() ;
recippos[i] = storage->len ;
@@ -92,7 +92,7 @@ void dns_canon (char const *host, char const *const *recip, unsigned int n, size
{
if (!s6dns_domain_decode(&mxs[i].exchange)) qmailr_tempsys("Unable to parse MX record") ;
if (!stralloc_readyplus(storage, 256)) dienomem() ;
- genalloc_catb(size_t, mxpos, storage->len) ;
+ genalloc_catb(size_t, mxpos, storage->len, 1) ;
storage->len += s6dns_domain_tostring(storage->s + storage->len, 255, &mxs[i].exchange) ;
storage->s[storage->len++] = 0 ;
}
@@ -112,7 +112,7 @@ void dns_ip_of_mx (size_t const *pos, unsigned int n, mxip *tab, stralloc *stora
s6dns_resolve_t info[N] ;
for (unsigned int i = 0 ; i < n ; i++)
{
- if (!s6dns_domain_fromstring_noqualify_encode(&info[i].q, storage->s + pos[i], strlen(storage->s + pos[i]))
+ if (!s6dns_domain_fromstring_noqualify_encode(&info[i].q, storage->s + pos[i], strlen(storage->s + pos[i])))
qmailr_tempsys("Unable to DNS-encode MX") ;
ip4[i] = stralloc_zero ;
info[i].qtype = S6DNS_T_A ;
@@ -141,16 +141,16 @@ void dns_ip_of_mx (size_t const *pos, unsigned int n, mxip *tab, stralloc *stora
{
for (unsigned int j = 0 ; j < ip4[i].len ; j += 4)
{
- if (bsearch(ip4.s + j, ipme4, n4, 4, &qmailr_memcmp4))
+ if (bsearch(ip4[i].s + j, ipme4, n4, 4, &qmailr_memcmp4))
{
memmove(ip4[i].s + j, ip4[i].s + ip4[i].len - 4, 4) ;
ip4[i].len -= 4 ;
}
}
- random_unsort(ip4.s, ip4.len >> 2, 4) ;
+ random_unsort(ip4[i].s, ip4[i].len >> 2, 4) ;
tab[i].pos4 = storage->len ;
- tab[i].n4 = ip4.len >> 2 ;
- if (!stralloc_catb(&storage, ip4.s, ip4.len)) dienomem() ;
+ tab[i].n4 = ip4[i].len >> 2 ;
+ if (!stralloc_catb(storage, ip4[i].s, ip4[i].len)) dienomem() ;
stralloc_free(ip4 + i) ;
}
@@ -159,16 +159,16 @@ void dns_ip_of_mx (size_t const *pos, unsigned int n, mxip *tab, stralloc *stora
{
for (unsigned int j = 0 ; j < ip6[i].len ; j += 16)
{
- if (bsearch(ip6.s + j, ipme6, n6, 16, &qmailr_memcmp16))
+ if (bsearch(ip6[i].s + j, ipme6, n6, 16, &qmailr_memcmp16))
{
memmove(ip6[i].s + j, ip6[i].s + ip6[i].len - 16, 16) ;
ip6[i].len -= 16 ;
}
}
- random_unsort(ip6.s, ip6.len >> 4, 16) ;
+ random_unsort(ip6[i].s, ip6[i].len >> 4, 16) ;
tab[i].pos6 = storage->len ;
- tab[i].n6 = ip6.len >> 4 ;
- if (!stralloc_catb(&storage, ip6.s, ip6.len)) dienomem() ;
+ tab[i].n6 = ip6[i].len >> 4 ;
+ if (!stralloc_catb(storage, ip6[i].s, ip6[i].len)) dienomem() ;
stralloc_free(ip6 + i) ;
}
#endif
diff --git a/src/qmail-smtpc/qmail-smtpc.c b/src/qmail-smtpc/qmail-smtpc.c
index 6496be7..f194700 100644
--- a/src/qmail-smtpc/qmail-smtpc.c
+++ b/src/qmail-smtpc/qmail-smtpc.c
@@ -29,12 +29,13 @@ int main (int argc, char const *const *argv)
uint16_t port = 25 ;
int r ;
- if (argc-- < 4) dieusage() ; argv++ ;
+ if (argc-- < 4) dieusage() ;
+ argv++ ;
if (chdir(SMTPD_STARTTLS_PROXY_QMAIL_HOME) == -1) qmailr_temp("Unable to chdir to " SMTPD_STARTTLS_PROXY_QMAIL_HOME) ;
if (sig_altignore(SIGPIPE) == -1) qmailr_tempsys("Unable to ignore SIGPIPE") ;
host = *argv++ ; argc-- ;
tain_now_set_stopwatch_g() ;
- qmailr_dns_init() ;
+ dns_init() ;
/* init control */
@@ -42,13 +43,13 @@ int main (int argc, char const *const *argv)
if (r == -1) qmailr_tempsys("Unable to read control/me") ;
else if (!r) qmailr_temp("Invalid control/me") ;
- r = qmail_control_read("control/helohost", &storage, &helopos) ;
+ r = qmailr_control_read("control/helohost", &storage, &helopos) ;
if (r == -1) qmailr_tempsys("Unable to read control/helohost") ;
else if (!r) helopos = mepos ;
- r = qmail_control_readint("control/timeoutconnect", &timeoutconnect, &storage) ;
+ r = qmailr_control_readint("control/timeoutconnect", &timeoutconnect, &storage) ;
if (r == -1) qmailr_tempsys("Unable to read control/timeoutconnect") ;
- r = qmail_control_readint("control/timeoutremote", &timeoutremote, &storage) ;
+ r = qmailr_control_readint("control/timeoutremote", &timeoutremote, &storage) ;
if (r == -1) qmailr_tempsys("Unable to read control/timeoutremote") ;
if (!qmailr_control_readiplist("control/ipme", &ipme4, &ipme6))
@@ -73,6 +74,8 @@ int main (int argc, char const *const *argv)
smtproutes_free(&routes) ;
}
+ // TODO: box_encode(&senderpos) ;
+
{
genalloc mxpos = GENALLOC_ZERO ;
int usehost ;
@@ -83,7 +86,7 @@ int main (int argc, char const *const *argv)
unsigned int mxn = usehost ? 1 : genalloc_len(size_t, &mxpos) ;
mxip mxind[mxn] ;
- dns_ip_of_mx(usehost ? &hostpos : genalloc_s(size_t, &mxpos), mxn, mxip, storage, ipme4.s, ipme4.len >> 2, ipme6.s, ipme6.len >> 4) ;
+ dns_ip_of_mx(usehost ? &hostpos : genalloc_s(size_t, &mxpos), mxn, mxind, &storage, ipme4.s, ipme4.len >> 2, ipme6.s, ipme6.len >> 4) ;
genalloc_free(size_t, &mxpos) ;
}
diff --git a/src/qmail-smtpc/qmail-smtpc.h b/src/qmail-smtpc/qmail-smtpc.h
index a109d07..05431c8 100644
--- a/src/qmail-smtpc/qmail-smtpc.h
+++ b/src/qmail-smtpc/qmail-smtpc.h
@@ -1,10 +1,14 @@
/* ISC license. */
+#ifndef QMAIL_SMTPC_H
+#define QMAIL_SMTPC_H
+
#include <stddef.h>
#include <stdint.h>
#include <skalibs/cdb.h>
#include <skalibs/stralloc.h>
+#include <skalibs/genalloc.h>
#include "qmailr.h"
@@ -40,3 +44,5 @@ struct smtproutes_s
extern int smtproutes_init (smtproutes *) ;
extern int smtproutes_match (smtproutes const *, char const *, stralloc *, size_t *, uint16_t *) ;
extern void smtproutes_free (smtproutes *) ;
+
+#endif
diff --git a/src/qmail-smtpc/qmailr.h b/src/qmail-smtpc/qmailr.h
index d623274..803437b 100644
--- a/src/qmail-smtpc/qmailr.h
+++ b/src/qmail-smtpc/qmailr.h
@@ -1,5 +1,8 @@
/* ISC license. */
+#ifndef QMAILR_H
+#define QMAILR_H
+
#include <stddef.h>
#include <stdint.h>
@@ -39,6 +42,7 @@ extern int qmailr_tcpto_update (char const *, int, int) ;
extern int qmailr_control_read (char const *, stralloc *, size_t *) ;
extern int qmailr_control_readint (char const *file, unsigned int *, stralloc *) ;
+extern int qmailr_control_readiplist (char const *, stralloc *, stralloc *) ;
/* qmailr_tls */
@@ -56,3 +60,5 @@ struct qmailr_tls_s
#define QMAILR_TLS_ZERO { 0 }
extern int qmailr_tls_init (qmailr_tls *, stralloc *) ;
+
+#endif
diff --git a/src/qmail-smtpc/qmailr_control.c b/src/qmail-smtpc/qmailr_control.c
index a46cb22..706b0d9 100644
--- a/src/qmail-smtpc/qmailr_control.c
+++ b/src/qmail-smtpc/qmailr_control.c
@@ -9,6 +9,7 @@
#include <skalibs/fmtscan.h>
#include <skalibs/stralloc.h>
#include <skalibs/djbunix.h>
+#include <skalibs/skamisc.h>
#include "qmailr.h"
@@ -35,7 +36,7 @@ int qmailr_control_read (char const *file, stralloc *sa, size_t *pos)
int qmailr_control_readint (char const *file, unsigned int *x, stralloc *sa)
{
size_t pos ;
- int r = qmailr_control_readfile(file, sa, &pos) ;
+ int r = qmailr_control_read(file, sa, &pos) ;
if (r <= 0) return r ;
sa->len = pos ;
if (!uint0_scan(sa->s + sa->len, x)) return (errno = EPROTO, 0) ;
diff --git a/src/qmail-smtpc/smtproutes.c b/src/qmail-smtpc/smtproutes.c
index bcea080..d5b1fac 100644
--- a/src/qmail-smtpc/smtproutes.c
+++ b/src/qmail-smtpc/smtproutes.c
@@ -21,6 +21,7 @@
#include <smtpd-starttls-proxy/config.h>
#include "qmailr.h"
+#include "qmail-smtpc.h"
/*
@@ -88,7 +89,7 @@ END=a, X=b
static inline uint8_t cclass (char c)
{
static uint8_t const table[128] = "0999999999299999999999999999999998918889999898786666666666399898877777788888888888888888884958898888888888888888888888888899999" ;
- return c & 0x80 ? 9 : table[c] - '0' ;
+ return c & 0x80 ? 9 : table[(uint8_t)c] - '0' ;
}
static inline char getnext (buffer *b)
@@ -101,7 +102,7 @@ static inline char getnext (buffer *b)
static inline void smtproutes_compile (int fdr, int fdw)
{
- static uint16_t const table[10][9] =
+ static uint16_t const table[10][10] =
{
{ 0x000a, 0x0001, 0x0000, 0x0205, 0x0002, 0x000b, 0x0103, 0x0103, 0x0103, 0x000b },
{ 0x000a, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001 },
@@ -232,3 +233,8 @@ int smtproutes_match (smtproutes const *routes, char const *s, stralloc *sa, siz
if (!stralloc_catb(sa, data.s + 2, data.len - 2)) qmailr_tempsys("Unable to grow stralloc") ;
return 1 ;
}
+
+void smtproutes_free (smtproutes *routes)
+{
+ cdb_free(&routes->map) ;
+}