diff options
| author | Sam Varshavchik | 2019-10-02 08:05:50 -0400 |
|---|---|---|
| committer | Sam Varshavchik | 2019-10-02 08:05:50 -0400 |
| commit | 4be1002d33838edbc78d508ef60cea198c94eb02 (patch) | |
| tree | 2dcbf23deb0b9634590abd8412f03de358de1785 /rfc1035 | |
| parent | ee1f8e9ae175c44b00a68d274d9fcf57570f7b91 (diff) | |
| download | courier-libs-4be1002d33838edbc78d508ef60cea198c94eb02.tar.bz2 | |
If either ipv4 or ipv6 lookup succeeeds, ignore the other's SOFTFAIL.
Diffstat (limited to 'rfc1035')
| -rw-r--r-- | rfc1035/rfc1035mxlist.c | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/rfc1035/rfc1035mxlist.c b/rfc1035/rfc1035mxlist.c index de2448e..48c5f3c 100644 --- a/rfc1035/rfc1035mxlist.c +++ b/rfc1035/rfc1035mxlist.c @@ -91,6 +91,7 @@ static int add_arecords(struct rfc1035_res *res, struct rfc1035_mxlist **list, { #if RFC1035_IPV6 struct in6_addr in; + int rc2; int first_a=RFC1035_TYPE_A; int second_a=RFC1035_TYPE_AAAA; const char *prefer_ipv6=getenv("ESMTP_PREFER_IPV6_MX"); @@ -134,30 +135,41 @@ records weren't found. if (mxreply && !(opts & RFC1035_MX_QUERYALL)) { - if ((rc=harvest_records(res, list, mxreply, mxpreference, - mxname, second_a, &found, HARVEST_NODUPE, - port)) - != RFC1035_MX_OK) - return (rc); + rc2=harvest_records(res, list, mxreply, mxpreference, + mxname, second_a, &found, HARVEST_NODUPE, + port); + + if (rc2 != RFC1035_MX_OK && rc2 != RFC1035_MX_SOFTERR) + return rc2; + + rc=harvest_records(res, list, mxreply, mxpreference, + mxname, first_a, &found, 0, port); - if ((rc=harvest_records(res, list, mxreply, mxpreference, - mxname, first_a, &found, 0, port)) - != RFC1035_MX_OK) + if (rc != RFC1035_MX_OK && rc != RFC1035_MX_SOFTERR) return (rc); + if (rc == RFC1035_MX_SOFTERR && rc2 == RFC1035_MX_SOFTERR) + return rc; + if (found) return (RFC1035_MX_OK); } - if ((rc=harvest_records(res, list, mxreply, mxpreference, mxname, - second_a, &found, HARVEST_AUTOQUERY|HARVEST_NODUPE, port)) - != RFC1035_MX_OK) - return (rc); + rc2=harvest_records(res, list, mxreply, mxpreference, mxname, + second_a, &found, HARVEST_AUTOQUERY|HARVEST_NODUPE, + port); - if ((rc=harvest_records(res, list, mxreply, mxpreference, mxname, - first_a, &found, HARVEST_AUTOQUERY, port)) - != RFC1035_MX_OK) + if (rc2 != RFC1035_MX_OK && rc2 != RFC1035_MX_SOFTERR) + return rc2; + + rc=harvest_records(res, list, mxreply, mxpreference, mxname, + first_a, &found, HARVEST_AUTOQUERY, port); + + if (rc != RFC1035_MX_OK && rc != RFC1035_MX_SOFTERR) return (rc); + if (rc == RFC1035_MX_SOFTERR && rc2 == RFC1035_MX_SOFTERR) + return rc; + if (found) return (RFC1035_MX_OK); #else |
