bug-mailfromd


Search for: Advanced

Re: [Bug-mailfromd] spam getting through in 9.0 on custom module


> 
> >
> > I have this code/module[1]. It looks like this is not working any more
> > since upgrading to 9.0 I have. Nothing is being matched. Any idea what
> > this can be? Or maybe there is a new solution for this?
> >
> >
> > match_dnsbl_ret ($client_addr, "rbl.example.com", "127.0.0.32/32",
> > "127.0.0.2/32")
> >
> >
> >
> > [1]
> > static func match_dnsbl_range(string address, string zone, string
> > iprange)
> >   returns number
> > do
> >   if iprange = 'ANY'
> >     set iprange '127.0.0.0/8'
> >   fi
> >
> >   if address matches
> >     '^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$'
> >     string res resolve ("\4.\3.\2.\1", zone)
> >     if res == "0"
> >       return 0
> >     fi
> >     if match_cidr (res, iprange)
> >       set dnsbl_result res
> >       return 1
> >     else
> >       return 0
> >     fi
> >   else
> >     throw e_invip "%address: invalid IP address"
> >   fi
> >   # never reached
> > done
> >
> > func match_dnsbl_ret(string address, string zone, string ...)
> >   returns number
> > do
> >   loop for number i 1,
> >        while i < $# - @zone,
> >        set i i + 1
> >   do
> >     if match_dnsbl_range(address, zone, $(i))
> >       return 1
> >     fi
> >   done
> >   return 0
> > done
> >
> >
> 
> When I update code to this, with
> 
> Thus,
> primitive_resolve("192.0.2.1", "rev.example.com")
> is equivalent to
> primitive_resolve("1.2.0.192.rev.example.com")
> 
> I am getting this error.
> primitive_resolve: cannot resolve host name 169.214.85.209.
> 
> While dig is just fine (empty result)
> dig +short @ns2  186.130.2.198.rev.example.com
> 
> Changing code to this string res resolve("186.130.2.198",
> "rbl.example.com")
> returns nothing
> 
> While dig gives me
> []# dig +short @ns2  186.130.2.198.rbl.example.com
> 127.0.0.2
> 
> Somehow it looks like this resolving is not working, but match_dnsbl
> ($client_addr, "zen.spamhaus.org", "ANY" is doing fine.
> 
> 

changed it to this

static func match_dnsbl_range(string address, string zone, string iprange)
  returns number
do
  if iprange = 'ANY'
    set iprange '127.0.0.0/8'
  fi

  string res 0

  if is_ipstr(address) = 1
    set n dns_query(DNS_TYPE_A, reverse_ipstr(address) . "." . zone)
    if n >= 0
      set res dns_reply_string(n, 0)
    fi

    if res == "0"
      return 0
    fi
    if match_cidr (res, iprange)
      set dnsbl_result res
      return 1
    else
      return 0
    fi
  else
    throw e_invip "%address: invalid IP address"
  fi
done

func match_dnsbl_ret(string address, string zone, string ...)
  returns number
do
  loop for number i 1,
       while i < $# - @zone,
       set i i + 1
  do
    if match_dnsbl_range(address, zone, $(i))
      return 1
    fi
  done
  return 0
done