Re: Why does checkdnsrr() default to MX??
| From: | Kris Craig | Date: | Fri, 19 Sep 2014 17:51:05 +0000 |
| Subject: | Re: Why does checkdnsrr() default to MX?? | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-77347@lists.php.net to get a copy of this message | ||
On Fri, Sep 19, 2014 at 10:24 AM, Adam Harvey <aharvey@php.net> wrote:
> On 19 September 2014 02:58, Chris Wright <cw@daverandom.com> wrote:
> > On 18 September 2014 20:29, Kris Craig <kris.craig@gmail.com> wrote:
> >> Hey guys,
> >>
> >> I just spent some time troubleshooting what appeared to be a DNS issue
> >> before I realized that, absent the optional $type argument, checkdnsrr()
> >> defaults to "MX". Can anybody explain why it's defaulting to
> >> "MX" and
> not
> >> "ANY"? It seems really counter-intuitive.
> >
> > This is a big wtf, especially since getmxrr() exists. A cursory search
> > of github (not the best measure I know, but easy) reveals only a few
> > cases where this function is called without the second argument, and
> > every case I've found looks like they were expecting an A record, so
> > this code is likely broken anyway.
> >
> > In other words, +1 to change this to something saner ASAP.
>
> As an alternative, could we just make the type argument mandatory in
> PHP 7 and start issuing E_DEPRECATED warnings if it's omitted in 5.6
> or 5.7?
>
> Adam
>
I like both ideas. Adam's approach would be more inconvenient for
developers, but it would also be less of a BC issue since merely changing
the default could cause some existing code to fail silently as opposed to
generating an error. On the other hand, I can't think of any such use case
in which checking all DNS entries instead of just MX would cause any
scripts to break. The only possible scenario I can think of would be if
they're using dnsrr() to check if an MX record exists and hit a host that
has an A record but not MX. That would cause it to return TRUE when
they're expecting FALSE.
I'll draft an RFC when I get a chance and include both options in it.
--Kris