summaryrefslogtreecommitdiff
path: root/source/libsmb/smberr.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/libsmb/smberr.c')
-rw-r--r--source/libsmb/smberr.c162
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);
}