2003-08-13 01:53:07 +00:00
/*
Unix SMB / CIFS implementation .
client error handling routines
Copyright ( C ) Andrew Tridgell 1994 - 1998
Copyright ( C ) James Myers 2003
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include "includes.h"
/***************************************************************************
Return an error message from the last response
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2004-08-04 13:23:35 +00:00
const char * smbcli_errstr ( struct smbcli_tree * tree )
2003-08-13 01:53:07 +00:00
{
2004-02-08 00:51:07 +00:00
switch ( tree - > session - > transport - > error . etype ) {
2003-08-13 01:53:07 +00:00
case ETYPE_DOS :
2004-02-08 00:51:07 +00:00
return dos_errstr (
tree - > session - > transport - > error . e . dos . eclass ,
tree - > session - > transport - > error . e . dos . ecode ) ;
2003-08-13 01:53:07 +00:00
case ETYPE_NT :
2004-02-08 00:51:07 +00:00
return nt_errstr ( tree - > session - > transport - > error . e . nt_status ) ;
2003-08-13 01:53:07 +00:00
case ETYPE_SOCKET :
return " socket_error " ;
case ETYPE_NBT :
return " nbt_error " ;
case ETYPE_NONE :
return " no_error " ;
}
return NULL ;
}
/* Return the 32-bit NT status code from the last packet */
2004-08-04 13:23:35 +00:00
NTSTATUS smbcli_nt_error ( struct smbcli_tree * tree )
2003-08-13 01:53:07 +00:00
{
2004-02-08 00:51:07 +00:00
switch ( tree - > session - > transport - > error . etype ) {
2003-08-13 01:53:07 +00:00
case ETYPE_NT :
2004-02-08 00:51:07 +00:00
return tree - > session - > transport - > error . e . nt_status ;
2003-08-13 01:53:07 +00:00
case ETYPE_DOS :
2004-02-08 00:51:07 +00:00
return dos_to_ntstatus (
tree - > session - > transport - > error . e . dos . eclass ,
tree - > session - > transport - > error . e . dos . ecode ) ;
2003-08-13 01:53:07 +00:00
case ETYPE_SOCKET :
return NT_STATUS_UNSUCCESSFUL ;
case ETYPE_NBT :
return NT_STATUS_UNSUCCESSFUL ;
case ETYPE_NONE :
return NT_STATUS_OK ;
}
return NT_STATUS_UNSUCCESSFUL ;
}
/* Return the DOS error from the last packet - an error class and an error
code . */
2004-08-04 13:23:35 +00:00
void smbcli_dos_error ( struct smbcli_state * cli , uint8_t * eclass , uint32_t * ecode )
2003-08-13 01:53:07 +00:00
{
if ( cli - > transport - > error . etype = = ETYPE_DOS ) {
ntstatus_to_dos ( cli - > transport - > error . e . nt_status ,
eclass , ecode ) ;
return ;
}
if ( eclass ) * eclass = cli - > transport - > error . e . dos . eclass ;
if ( ecode ) * ecode = cli - > transport - > error . e . dos . ecode ;
}
/* Return true if the last packet was an error */
2004-08-04 13:23:35 +00:00
BOOL smbcli_is_error ( struct smbcli_tree * tree )
2003-08-13 01:53:07 +00:00
{
2004-08-04 13:23:35 +00:00
return NT_STATUS_IS_ERR ( smbcli_nt_error ( tree ) ) ;
2003-08-13 01:53:07 +00:00
}
/* Return true if the last error was a DOS error */
2004-08-04 13:23:35 +00:00
BOOL smbcli_is_dos_error ( struct smbcli_tree * tree )
2003-08-13 01:53:07 +00:00
{
2004-02-08 00:51:07 +00:00
return tree - > session - > transport - > error . etype = = ETYPE_DOS ;
2003-08-13 01:53:07 +00:00
}