Odd error message in winbind
Andrew Bartlett
abartlet at samba.org
Mon Aug 12 13:12:20 GMT 2002
Nir Soffer wrote:
>
> > Nir Soffer wrote:
> > >
> > > > > On a Linux machine, running Samba 2.2.4, we got this
> > error message:
> > > > >
> > > > > Aug 7 01:47:01 node1-mgmt winbindd[7034]: [2002/08/07
> > 01:47:01, 0]
> > > > > rpc_client/cli_pipe.c:rpc_api_pipe(359)
> > > > > Aug 7 01:47:01 node1-mgmt winbindd[7034]: cli_pipe:
> > > > return critical
> > > > > error. Error was SUCCESS - 0
> > > > >
> > > > > Previous to that error message, winbindd ran without fault
> > > > for nearly 30
> > > > > days.
> > > >
> > > > The DC 'went away'. (Which closed the pipe, and left 0
> > in the error
> > > > feild - yes we need a better way do handle this...).
> > >
> > > I guessed something to that effect, but I don't believe something
> > > happened to the DC, that's what's bothering me. I'll need
> > to check that
> > > out.
> > >
> > > So if hit this DEBUG statement
> > > DEBUG(0, ("cli_pipe: return critical error. Error was %s\n",
> > > cli_errstr(cli)));
> > >
> > > When the error is 0 I should:
> > >
> > > DEBUG(0, ("cli_pipe: Critical error - the pipe has closed.
> > The DC has
> > > probably been disconnected") )
> > >
> > > or something?
> > >
> > > need a patch?
> >
> > I'll take a patch that actually does the real job - that code needs to
> > be 'upgraded' to NTSTATUS. Follow the functions, and you will
> > eventually get to 'cli_receive_smb()'. This is what is generating the
> > error - so it should probably get the DEBUG(), and a sensible NTSTATUS
> > value should be returned down the chain.
>
> Tracking down the code leads me at the end to receive_smb, which
> probably returns a false when it fails to receive anything. But then
> again, it could fail on anything, so nailing it down there seems wrong.
>
> client_receive_smb appears to be merely a wrapper for receive_smb...
>
> Ugh. This stuff is hairy. What exactly needs to happen? Does the code
> have to see if there's BOTH an error from client_receive_smb, and if
> there's no status set, and then conclude all it is is a broken link?
If receive_smb fails, then the server has cut the link. At this point
we should unconditionally return a particular NTSTATUS error. I don't
know which one yet - pick one from include/nterr.h
> > It's really the BOOLs everywhere that causes the problem.
>
> I haven't figured that one out yet -
>
> A. What exactly _is_ the construct for keeping a status code, from
> looking at clierrstr I see that there are 3 classes of error message,
> each handled sepreately and differently (RAP messages, whatever the hell
> they may be, NT STATUS messages, and DOS and SMB messages (?!) which are
> apparently handled together? (?!?)
We can be sent either a DOS or an NT error. DOS errors are a pain to
deal with, so we normally convert these to NTSTATUS values
> B. Why not return an int value that some meaning like most C functions
> do?
Thats what the NTSTATUS is, it's a uint32 dressed up in such a way that
it is assignment incompatible with int, becouse we got a *lot* of bugs
with people getting it and BOOL confused, and therefore using the wrong
'if' test on it. (0 for succcess as opposed to 1 for success).
Andrew Bartlett
--
Andrew Bartlett abartlet at pcug.org.au
Manager, Authentication Subsystems, Samba Team abartlet at samba.org
Student Network Administrator, Hawker College abartlet at hawkerc.net
http://samba.org http://build.samba.org http://hawkerc.net
More information about the samba-technical
mailing list