aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2017-10-20 13:23:47 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2017-10-20 14:35:20 +0300
commit5cf28509ada303e8995113af9390d10553c60bef (patch)
tree6ef3c94ee4bf7350f8a3d26331ae4d0c260ccf11 /src
parent04a44fafaa2baf0be206a457febca5540b7e3f4a (diff)
downloadmailfromd-5cf28509ada303e8995113af9390d10553c60bef.tar.gz
mailfromd-5cf28509ada303e8995113af9390d10553c60bef.tar.bz2
Rewrite base dns functions using adns.
* configure.ac: Require libadns. * lib/dns.c: Rewrite. * lib/dns.h (dns_resolve_ipstr, dns_resolve_hostname): Simplify parameters. (dns_reply): Remove max, last_len, and last_max.
Diffstat (limited to 'src')
-rw-r--r--src/builtin/dns.bi12
-rw-r--r--src/spf.c26
2 files changed, 10 insertions, 28 deletions
diff --git a/src/builtin/dns.bi b/src/builtin/dns.bi
index 137cccc8..c23aaf31 100644
--- a/src/builtin/dns.bi
+++ b/src/builtin/dns.bi
@@ -63,4 +63,4 @@ ipaddr_cmp(const void *a, const void *b)
{
- GACOPYZ_UINT32_T ipa = ntohl(**(GACOPYZ_UINT32_T**)a);
- GACOPYZ_UINT32_T ipb = ntohl(**(GACOPYZ_UINT32_T**)b);
+ GACOPYZ_UINT32_T ipa = ntohl(*(GACOPYZ_UINT32_T*)a);
+ GACOPYZ_UINT32_T ipb = ntohl(*(GACOPYZ_UINT32_T*)b);
if (ipa < ipb)
@@ -82,3 +82,3 @@ MF_DEFUN(dns_getaddr, STRING, STRING string)
MF_OBSTACK_BEGIN();
- qsort(r.base, r.count, sizeof r.base[0], ipaddr_cmp);
+ qsort(r.data.ip, r.count, sizeof r.data.ip[0], ipaddr_cmp);
for (i = 0; i < r.count; i++) {
@@ -87,3 +87,3 @@ MF_DEFUN(dns_getaddr, STRING, STRING string)
- addr.s_addr = dns_reply_ip(&r, i);
+ addr.s_addr = r.data.ip[i];
q = inet_ntoa(addr);
@@ -127,3 +127,3 @@ MF_DEFUN(dns_getname, STRING, STRING ipstr)
- qsort(r.base, r.count, sizeof r.base[0], hostname_cmp);
+ qsort(r.data.str, r.count, sizeof r.data.str[0], hostname_cmp);
@@ -133,3 +133,3 @@ MF_DEFUN(dns_getname, STRING, STRING ipstr)
MF_OBSTACK_1GROW(' ');
- MF_OBSTACK_GROW((char*)r.base[i]);
+ MF_OBSTACK_GROW((char*)r.data.str[i]);
}
diff --git a/src/spf.c b/src/spf.c
index edec1d45..05fbd538 100644
--- a/src/spf.c
+++ b/src/spf.c
@@ -643,3 +643,3 @@ mech_a(spf_data *dat, spf_term_arg *arg, unsigned long masklen)
for (i = 0; i < r.count; i++) {
- if (ntohl(dns_reply_ip(&r, i) & netmask) == addr.s_addr) {
+ if (ntohl(r.data.ip[i] & netmask) == addr.s_addr) {
res = spf_term_match;
@@ -809,3 +809,3 @@ mod_exp(spf_data *dat, spf_term_arg *arg, unsigned long masklen)
for (i = 0; i < r.count; i++) {
- mu_opool_appendz(dat->tmpool, r.base[i]);
+ mu_opool_appendz(dat->tmpool, r.data.str[i]);
}
@@ -1197,5 +1197,2 @@ spf_check_host_internal(spf_query_t *q, spf_answer_t *a, size_t loopno)
{
- char **txt_rec;
- size_t txt_num;
- int i;
char *spf_rec = NULL;
@@ -1226,3 +1223,3 @@ spf_check_host_internal(spf_query_t *q, spf_answer_t *a, size_t loopno)
- switch (spf_lookup(q->domain, &txt_rec, &txt_num)) {
+ switch (spf_lookup(q->domain, &spf_rec)) {
case dns_success:
@@ -1239,17 +1236,2 @@ spf_check_host_internal(spf_query_t *q, spf_answer_t *a, size_t loopno)
- /* Select SPF1 records */
- for (i = 0; txt_rec[i]; i++) {
- if (memcmp(txt_rec[i], "v=spf1", 6) == 0
- && (txt_rec[i][6] == 0 || mu_isspace(txt_rec[i][6]))) {
- mu_debug(MF_SOURCE_SPF, MU_DEBUG_TRACE6,
- ("record: %s", txt_rec[i]));
- if (spf_rec) {
- SPF_RETURN(spf_perm_error,
- "too many SPF records published");
- }
- spf_rec = txt_rec[i];
- break;
- }
- }
-
mu_debug(MF_SOURCE_SPF, MU_DEBUG_TRACE0,
@@ -1263,3 +1245,3 @@ spf_check_host_internal(spf_query_t *q, spf_answer_t *a, size_t loopno)
spf_data_free(&dat);
- mu_argcv_free(txt_num, txt_rec);
+ free(spf_rec);

Return to:

Send suggestions and report system problems to the System administrator.