Re: Why does checkdnsrr() default to MX??

From: 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

« previous php.internals (#77347) next »