diff options
Diffstat (limited to 'source/libsmb/smberr.c')
-rw-r--r-- | source/libsmb/smberr.c | 162 |
1 files changed, 123 insertions, 39 deletions
diff --git a/source/libsmb/smberr.c b/source/libsmb/smberr.c index 9648786ea54..3ef4eaf989e 100644 --- a/source/libsmb/smberr.c +++ b/source/libsmb/smberr.c @@ -22,12 +22,21 @@ #include "includes.h" -extern int DEBUGLEVEL; - /* error code stuff - put together by Merik Karman merik@blackadder.dsh.oz.au */ -typedef struct + +/* There is a big list of error codes and their meanings at: + + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/errlist_7oz7.asp + + and if you don't like MSDN try: + + http://www.siris.gr/computers/library/error.htm + +*/ + +typedef const struct { char *name; int code; @@ -42,14 +51,14 @@ err_code_struct dos_msgs[] = { {"ERRnofids",ERRnofids,"No file descriptors available"}, {"ERRnoaccess",ERRnoaccess,"Access denied."}, {"ERRbadfid",ERRbadfid,"Invalid file handle."}, - {"ERRbadmcb",7,"Memory control blocks destroyed."}, + {"ERRbadmcb",ERRbadmcb,"Memory control blocks destroyed."}, {"ERRnomem",ERRnomem,"Insufficient server memory to perform the requested function."}, {"ERRbadmem",ERRbadmem,"Invalid memory block address."}, {"ERRbadenv",ERRbadenv,"Invalid environment."}, {"ERRbadformat",11,"Invalid format."}, {"ERRbadaccess",ERRbadaccess,"Invalid open mode."}, {"ERRbaddata",ERRbaddata,"Invalid data."}, - {"ERR",ERRres,"reserved."}, + {"ERRres",ERRres,"reserved."}, {"ERRbaddrive",ERRbaddrive,"Invalid drive specified."}, {"ERRremcd",ERRremcd,"A Delete Directory request attempted to remove the server's current directory."}, {"ERRdiffdevice",ERRdiffdevice,"Not same device."}, @@ -65,7 +74,10 @@ err_code_struct dos_msgs[] = { {"ERRpipeclosing",ERRpipeclosing,"Pipe close in progress."}, {"ERRnotconnected",ERRnotconnected,"No process on other end of pipe."}, {"ERRmoredata",ERRmoredata,"There is more data to be returned."}, - {"ERRinvgroup",2455,"Invalid workgroup (try the -W option)"}, + {"ERRinvgroup",ERRinvgroup,"Invalid workgroup (try the -W option)"}, + {"ERRlogonfailure",ERRlogonfailure,"Logon failure"}, + {"ERRdiskfull",ERRdiskfull,"Disk full"}, + {"ERRgeneral",ERRgeneral, "General failure"}, {NULL,-1,NULL}}; /* Server Error Messages */ @@ -127,7 +139,7 @@ err_code_struct hard_msgs[] = { {NULL,-1,NULL}}; -struct +const struct { int code; char *class; @@ -146,39 +158,111 @@ struct /**************************************************************************** -return a SMB error string from a SMB buffer +return a SMB error name from a class and code +****************************************************************************/ +char *smb_dos_err_name(uint8 class, uint16 num) +{ + static pstring ret; + int i,j; + + for (i=0;err_classes[i].class;i++) + if (err_classes[i].code == class) { + if (err_classes[i].err_msgs) { + err_code_struct *err = err_classes[i].err_msgs; + for (j=0;err[j].name;j++) + if (num == err[j].code) { + return err[j].name; + } + } + slprintf(ret, sizeof(ret) - 1, "%d",num); + return ret; + } + + slprintf(ret, sizeof(ret) - 1, "Error: Unknown error class (%d,%d)",class,num); + return(ret); +} + +/* Return a string for a DOS error */ + +char *get_dos_error_msg(WERROR result) +{ + uint16 errnum; + + errnum = W_ERROR_V(result); + + return smb_dos_err_name(ERRDOS, errnum); +} + +/**************************************************************************** +return a SMB error class name as a string. +****************************************************************************/ +char *smb_dos_err_class(uint8 class) +{ + static pstring ret; + int i; + + for (i=0;err_classes[i].class;i++) { + if (err_classes[i].code == class) { + return err_classes[i].class; + } + } + + slprintf(ret, sizeof(ret) - 1, "Error: Unknown class (%d)",class); + return(ret); +} + +/**************************************************************************** +return a SMB string from an SMB buffer ****************************************************************************/ -char *smb_errstr(char *inbuf) +char *smb_dos_errstr(char *inbuf) { - static pstring ret; - int class = CVAL(inbuf,smb_rcls); - int num = SVAL(inbuf,smb_err); - int i,j; - - for (i=0;err_classes[i].class;i++) - if (err_classes[i].code == class) - { - if (err_classes[i].err_msgs) - { - err_code_struct *err = err_classes[i].err_msgs; - for (j=0;err[j].name;j++) - if (num == err[j].code) - { - if (DEBUGLEVEL > 0) - slprintf(ret, sizeof(ret) - 1, "%s - %s (%s)", - err_classes[i].class, - err[j].name,err[j].message); - else - slprintf(ret, sizeof(ret) - 1, "%s - %s", - err_classes[i].class,err[j].name); - return ret; + static pstring ret; + int class = CVAL(inbuf,smb_rcls); + int num = SVAL(inbuf,smb_err); + int i,j; + + for (i=0;err_classes[i].class;i++) + if (err_classes[i].code == class) { + if (err_classes[i].err_msgs) { + err_code_struct *err = err_classes[i].err_msgs; + for (j=0;err[j].name;j++) + if (num == err[j].code) { + if (DEBUGLEVEL > 0) + slprintf(ret, sizeof(ret) - 1, "%s - %s (%s)", + err_classes[i].class, + err[j].name,err[j].message); + else + slprintf(ret, sizeof(ret) - 1, "%s - %s", + err_classes[i].class,err[j].name); + return ret; + } + } + + slprintf(ret, sizeof(ret) - 1, "%s - %d",err_classes[i].class,num); + return ret; } - } - - slprintf(ret, sizeof(ret) - 1, "%s - %d",err_classes[i].class,num); - return ret; - } - - slprintf(ret, sizeof(ret) - 1, "Error: Unknown error (%d,%d)",class,num); - return(ret); + + slprintf(ret, sizeof(ret) - 1, "Error: Unknown error (%d,%d)",class,num); + return(ret); +} + + +/***************************************************************************** + returns an WERROR error message. + *****************************************************************************/ +char *werror_str(WERROR status) +{ + static fstring msg; + slprintf(msg, sizeof(msg), "WIN32 code 0x%08x", W_ERROR_V(status)); + return msg; +} + + +/***************************************************************************** +map a unix errno to a win32 error + *****************************************************************************/ +WERROR map_werror_from_unix(int error) +{ + NTSTATUS status = map_nt_error_from_unix(error); + return ntstatus_to_werror(status); } |