diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2026-02-02 18:24:26 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2026-02-02 18:24:26 +0000 |
| commit | 87664716d2c1c43e4386099e3ce3f4b11d56e76e (patch) | |
| tree | 00ca1371c8847099335b7fd358fca2dea73a8f66 | |
| parent | 36491e787c8be5b32b93f5c3b20edd9aa9d4c4e9 (diff) | |
| download | smtpd-starttls-proxy-87664716d2c1c43e4386099e3ce3f4b11d56e76e.tar.gz | |
Make it build. (No, it won't work.)
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | package/deps.mak | 15 | ||||
| -rw-r--r-- | src/qmail-smtpc/deps-exe/qmail-smtpc | 1 | ||||
| -rw-r--r-- | src/qmail-smtpc/dns.c | 30 | ||||
| -rw-r--r-- | src/qmail-smtpc/qmail-smtpc.c | 15 | ||||
| -rw-r--r-- | src/qmail-smtpc/qmail-smtpc.h | 6 | ||||
| -rw-r--r-- | src/qmail-smtpc/qmailr.h | 6 | ||||
| -rw-r--r-- | src/qmail-smtpc/qmailr_control.c | 3 | ||||
| -rw-r--r-- | src/qmail-smtpc/smtproutes.c | 10 |
9 files changed, 58 insertions, 29 deletions
@@ -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) ; +} |
