smbc_opendir() returns -1 but sets errno to 0

Christopher R. Hertel crh at ubiqx.mn.org
Wed Nov 26 16:02:34 GMT 2003


On Wed, Nov 26, 2003 at 03:16:09PM +0100, Stephan Kulow wrote:
> On Wednesday 26 November 2003 01:51, Christopher R. Hertel wrote:
> > >  When receiving the responses, it therefore had access to
> > > the IP address from which the response originated.  Would it be an
> > > appropriate modification to libsmbclient, to cache the IP address
> > > from these responses, in order to behave in a more expected fashion?
> > 
> > Well... no, not really.  If there is a new election and some other node
> > becomes LMB then the cache would be invalid.  The real question is:  Why did
> > a query for smb://WORKGROUP_NAME/ return the IP address of something other
> > than a browser for the WORKGROUP_NAME workgroup?  Another question: Is it
> > possible that the workgroup browse list was, in fact, empty?  That can
> > happen fairly easily.
> > 
> > Ethereal... Your best friend.
> > 
> The issue is quite clear and I once discussed this problem already with Richard:
> The LMB is resolved through netbios and from the result only the host name is
> taken and then resolved over DNS - which can (as you say) result in a different
> IP.

...but that doesn't make sense.  If the code is looking up a workgroup
name to find the LMB, then sending a query for workgroup<1D> returns the
IP address of the LMB.  That's all you need.

To go through the steps you describe, the client would need to send a Node 
Status Query, scan through the list to find the <20> name to derive the 
machine base name, then send a DNS query for that name (no DNS domain), 
and then get the IP again.  ...or, perhaps do a reverse lookup to get the 
DNS name (which isn't useful).

I don't understand why the code would do that.

> And when then the server behind the IP doesn't want the connection, then
> libsmbclient is confused and returns this strange -1, errno = 0 case (which
> resulted in the nice konqueror error "Unknown error: success" for quite 
> some time :)

Then there's most definitely a bug that needs to be fixed.

> libsmbclient needs to be changed to not resolve the name _again_ when it found
> out the master browser. Just noone got to that so far. And yes, that's an invalid
> network setup, but there are tons of reports for that - just one example:
> http://bugs.kde.org/show_bug.cgi?id=58831

No, it doesn't sound like an invalid network setup.  It sounds as though 
there's something wrong in the client's workgroup resolution.  I need an 
Ethereal capture of this.  Anyone got one?

Chris -)-----

-- 
"Implementing CIFS - the Common Internet FileSystem" ISBN: 013047116X
Samba Team -- http://www.samba.org/     -)-----   Christopher R. Hertel
jCIFS Team -- http://jcifs.samba.org/   -)-----   ubiqx development, uninq.
ubiqx Team -- http://www.ubiqx.org/     -)-----   crh at ubiqx.mn.org
OnLineBook -- http://ubiqx.org/cifs/    -)-----   crh at ubiqx.org



More information about the samba-technical mailing list