[jcifs] Problem with jcifs.UniAddress.isValidDnsName(String)

Michael B Allen mba2000 at ioplex.com
Fri Nov 18 20:35:18 GMT 2005


On Fri, 7 Oct 2005 16:11:58 -0400
Michael B Allen <mba2000 at ioplex.com> wrote:

> On Fri, 7 Oct 2005 14:37:20 -0400
> Michael B Allen <mba2000 at ioplex.com> wrote:
> 
> > > I'm wondering if the method actually serves any purpose except to be
> > > broken. Its only reference is:
> > > 
> > >     if( isValidDnsName( hostname ) == false ) {
> > >         throw new UnknownHostException( hostname );
> > >     }
> > >     addr = InetAddress.getByName( hostname );
> > > 
> > > Consider that InetAddress.getByName(hostname) throws the same
> > > UnknownHostException as the 'if' statement, and is more effective at
> > > detecting invalid hostnames than any method call or regex. Could the
> > > method and call be removed entirely?
> > 
> > Clearly this check is designed to subvert the DNS lookup because
> > it may *succeed* and then the resolver will not try the next lookup
> > method. Unfortunately I don't understand the code comment and I don't
> > recall what the original problem was.
> 
> I just remembered why this is in here. You can have a NetBIOS hostname
> like '1' and I *think* InetAddress.getByName() would incorrectly interpret
> this as an IP address and NOT throw an UnknownHostException (at the time
> I checked, probably Java 1.2 days). So this code tried to dodge this
> in the case where resolvOrder had DNS before NBT. Otherwise getByName
> would return a bogus InetAddress and the loop would not continue on to
> try NbtAddress.getByName().
> 
> So it's Sun's fault not me!

I believe I've fixed this. I have replaced isValidDnsName with a method
isAllDigits so that if the supplied name contains only digits it will
not be resolved with DNS.

Also, I have verified that Java 1.4 still exhibits the same behavior
of successfully resolving a name that contains only digits (e.g. 111222
yields 111222/0.1.178.118).

Mike


More information about the jcifs mailing list