summaryrefslogtreecommitdiffstats
path: root/qmail-remote.c
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2019-12-02 18:58:13 +0100
committermanuel <manuel@mausz.at>2019-12-02 18:58:13 +0100
commitf2ef25deb1aa356d41cdd3f6e46d9a68c48bfce0 (patch)
tree62d116f4da1d9bb772db2b5190deb4db489cd436 /qmail-remote.c
parentc8dcce86c04f318de89fa0701962d7c33964726d (diff)
downloadqmail-f2ef25deb1aa356d41cdd3f6e46d9a68c48bfce0.tar.gz
qmail-f2ef25deb1aa356d41cdd3f6e46d9a68c48bfce0.tar.bz2
qmail-f2ef25deb1aa356d41cdd3f6e46d9a68c48bfce0.zip
Rewrite 554 smtp code for web.de/gmx.net/1&1 servers
Diffstat (limited to 'qmail-remote.c')
-rw-r--r--qmail-remote.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/qmail-remote.c b/qmail-remote.c
index 0e2377e..ee1906c 100644
--- a/qmail-remote.c
+++ b/qmail-remote.c
@@ -387,7 +387,7 @@ void tls_quit(const char *s1, const char *s2)
387} 387}
388# define tls_quit_error(s) tls_quit(s, ssl_error()) 388# define tls_quit_error(s) tls_quit(s, ssl_error())
389 389
390int match_partner(const char *s, int len) 390static int match_partner(const char *s, int len)
391{ 391{
392 if (!case_diffb(partner_fqdn, len, s) && !partner_fqdn[len]) return 1; 392 if (!case_diffb(partner_fqdn, len, s) && !partner_fqdn[len]) return 1;
393 /* we also match if the name is *.domainname */ 393 /* we also match if the name is *.domainname */
@@ -398,6 +398,14 @@ int match_partner(const char *s, int len)
398 return 0; 398 return 0;
399} 399}
400 400
401static int match_suffix(const char *s, const char *suffix)
402{
403 int diff_len = str_len(s) - str_len(suffix);
404 if (diff_len >= 0 && !case_diffb(suffix, str_len(suffix), s + diff_len))
405 return 1;
406 return 0;
407}
408
401/* don't want to fail handshake if certificate can't be verified */ 409/* don't want to fail handshake if certificate can't be verified */
402int verify_cb(int preverify_ok, X509_STORE_CTX *ctx) { return 1; } 410int verify_cb(int preverify_ok, X509_STORE_CTX *ctx) { return 1; }
403 411
@@ -765,6 +773,14 @@ void smtp()
765#endif 773#endif
766 774
767 code = smtpcode(); 775 code = smtpcode();
776#ifdef TLS
777 if (code == 554 && partner_fqdn != NULL && (
778 match_suffix(partner_fqdn, "web.de") ||
779 match_suffix(partner_fqdn, "gmx.net") ||
780 match_suffix(partner_fqdn, "kundenserver.de"))) {
781 code = 454; /* 4xx, does not really matter */
782 }
783#endif
768 if (code >= 500 && code < 600) quit("DConnected to "," but greeting failed"); 784 if (code >= 500 && code < 600) quit("DConnected to "," but greeting failed");
769 if (code >= 400 && code < 500) return; /* try next MX, see RFC-2821 */ 785 if (code >= 400 && code < 500) return; /* try next MX, see RFC-2821 */
770 if (code != 220) quit("ZConnected to "," but greeting failed"); 786 if (code != 220) quit("ZConnected to "," but greeting failed");