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

Michael B Allen mba2000 at ioplex.com
Fri Oct 7 18:19:45 GMT 2005


On Fri, 7 Oct 2005 07:26:03 -0600
"Spierenburg, Peter" <peter.spierenburg at abridean.com> wrote:

> Greetings,
> 
> Forgive me for being obtuse, but I'm not exactly sure what overkill and
> unique mean in this context. Would you mind clarifying?

Meaning using a regular expression to determine if a hostname is actually
an ip address is a little more elaborate than necessary. That routine
is called quite a bit I think so a simple state machine pass would be
more appropriate like.

    state = 0
    for each character
        switch (state) {
            case 0:
                // check alnum
                state = 1
                break
            case 1:
                // check alnum + 055 (whatever that is)
                if (not at the end)
                    break;
                state = 2;
            case 2:
                // etc
            ...
    }

And for being unique I wasn't entirely correct - it is unique Sun's 1.4
JRE (we currently still support 1.3) but it looks like GNU Classpath
does have it.

Mike

> Peter.
> 
> -----Original Message-----
> From: Michael B Allen [mailto:mba2000 at ioplex.com] 
> Sent: Thursday, October 06, 2005 9:09 PM
> To: Spierenburg, Peter
> Cc: jcifs at lists.samba.org
> Subject: Re: [jcifs] Problem with
> jcifs.UniAddress.isValidDnsName(String)
> 
> Overkill and java.util.regex looks a little unique. Come up with
> something lightweight and I'll add patch it.
> 
> On Thu, 6 Oct 2005 14:40:32 -0600
> "Spierenburg, Peter" <peter.spierenburg at abridean.com> wrote:
> 
> > Greetings,
> >  
> > There appears to be a bug in the 
> > jcifs.UniAddress.isValidDnsName(String)
> > method. As it stands in the 1.2.5 release, this method rejects dns 
> > names which begin with a digit. This is unfortunate since digits are 
> > permitted first characters in dns names. As a result, I propose 
> > changing the method to use a regular expression:
> >  
> > import java.util.regex.Pattern;
> >  
> > static boolean isValidDnsName( String hostname ) {
> >     Pattern p =
> > Pattern.compile("[a-zA-Z0-9][a-zA-Z0-9\\055]*([\\056][a-zA-Z0-9][a-zA-
> > Z0
> > -9\055]*)*");
> >     return p.matcher(hostname).matches(); }
> > 
> > which I believe more accurately expresses the nature of dns names.
> > 
> > Does this seem reasonable?
> >  
> > Peter-Frank Spierenburg.
> >  
> > 
> 


More information about the jcifs mailing list