[jcifs] jcifs bug
Christopher R.Hertel
crh at ubiqx.mn.org
Sun Mar 24 04:29:39 EST 2002
On Fri, Mar 22, 2002 at 08:43:55PM -0500, Michael B.Allen wrote:
:
> > You should be able to completely parse the URL string into component
> > pieces and then handle the server vs. workgroup question as part of the
> > semantics of the connection establishment.
>
> In practice this doesn't work.
Then there is an error in my specification. The syntactic parsing of the
URL string *must* come before the semantics. This is the kind of problem
that the RFC2396 guys were worried about.
> You'll push lookup code into the code
> used to represent the resource and you will end up with serious state
> consistentcy issues or major clauses all over the place. In theory
> it's possible but it's just a theory and one that I believe may have
> been proven false at one point.
I need to see that again so I can fix this.
> If we were just representing one type
> of resource it might not be a big deal but the workgroup v.s. server
> complicates things enough that it is better to eliminate that variable
> up-front.
I would agree, but the scales are weighted quite heavily on either side.
This needs a bit more discussion.
>
> >
> > In our case, the <authority> field will typically be in the form of a
> > "Server-based Naming Authority", which means:
> >
> > <authority> :== <userinfo>@<host>:<port>
> >
> > If the <userinfo> portion is present, then the following semantic rule
> > applies (assuming I'm not talking through my shorts): Since the browse
> > service does not require authentication, the specification of <userinfo>
> > indicates that the request is for an smb server, not a workgroup.
>
> This isn't the problem. It's the -- is foo in smb://foo a workgroup or
> server? -- issue.
Putting aside the question of <userinfo>, consider:
smb://<authority>
given that, couldn't you simply parse the field into:
<userinfo>@<host>:<port>
..and then do an NBT name lookup on <host>#1D? That is all you would
need to do to find out if the <host> field represents a workgroup. If you
get no reply to the <host>#1D name query, then the workgroup does not
(practially speaking) exist on the local LAN.
In parallel, you would perform whatever operations are needed to determine
whether the <authority> string represents an SMB server.
I need to code this up myself some time to be sure it works as I think it
should, but it should...I think.
> > > You can see this URL is "overloaded". So a query (actually two concurrent
> > > queries) must go out on the wire. Otherwise there would be no reason to
> > > go out on the wire; name resolution could be handled lazily.
> >
> > How do you mean lazily? Just curious.
>
> If you return an object for which it's underlying resources have not
> been resolved the resouce would need to be lazily resolved like lazy
> read/write of a file system.
Makes sense... but you are right that in the smb://foo case you must send
the queries right away in order to discover if foo is an smbserver,
workgroup, or both.
Chridz -)-----
--
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 jcifs
mailing list