r10656: BIG merge from trunk. Features not copied over
[vlendec/samba-autobuild/.git] / source3 / libsmb / smberr.c
index a43e4764e86be9f66eff73f769e6389de1c0facc..82a06bde2bcfbb2a3ab665bf684eb56b6b85b93b 100644 (file)
@@ -1,6 +1,5 @@
 /* 
-   Unix SMB/Netbios implementation.
-   Version 1.9.
+   Unix SMB/CIFS implementation.
    Copyright (C) Andrew Tridgell 1998
    
    This program is free software; you can redistribute it and/or modify
@@ -18,8 +17,6 @@
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
-#define NO_SYSLOG
-
 #include "includes.h"
 
 /* error code stuff - put together by Merik Karman
@@ -38,9 +35,9 @@
 
 typedef const struct
 {
-  char *name;
+  const char *name;
   int code;
-  char *message;
+  const char *message;
 } err_code_struct;
 
 /* Dos Error Messages */
@@ -51,14 +48,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."},
@@ -74,8 +71,12 @@ 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"},
+  {"ERRbaddirectory", ERRbaddirectory, "Bad directory name"},
+  {"ERRunknownlevel",ERRunknownlevel, "Unknown info level"},
   {NULL,-1,NULL}};
 
 /* Server Error Messages */
@@ -140,7 +141,7 @@ err_code_struct hard_msgs[] = {
 const struct
 {
   int code;
-  char *class;
+  const char *e_class;
   err_code_struct *err_msgs;
 } err_classes[] = { 
   {0,"SUCCESS",NULL},
@@ -156,52 +157,94 @@ const struct
 
 
 /****************************************************************************
-return a SMB error string from a SMB buffer
+return a SMB error name from a class and code
+****************************************************************************/
+const char *smb_dos_err_name(uint8 e_class, uint16 num)
+{
+       static pstring ret;
+       int i,j;
+       
+       for (i=0;err_classes[i].e_class;i++)
+               if (err_classes[i].code == e_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)",e_class,num);
+       return(ret);
+}
+
+/* Return a string for a DOS error */
+
+const 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.
+****************************************************************************/
+const char *smb_dos_err_class(uint8 e_class)
+{
+       static pstring ret;
+       int i;
+       
+       for (i=0;err_classes[i].e_class;i++) {
+               if (err_classes[i].code == e_class) {
+                       return err_classes[i].e_class;
+               }
+       }
+               
+       slprintf(ret, sizeof(ret) - 1, "Error: Unknown class (%d)",e_class);
+       return(ret);
+}
+
+/****************************************************************************
+return a SMB string from an SMB buffer
 ****************************************************************************/
 char *smb_dos_errstr(char *inbuf)
 {
        static pstring ret;
-       int class = CVAL(inbuf,smb_rcls);
+       int e_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) {
+       for (i=0;err_classes[i].e_class;i++)
+               if (err_classes[i].code == e_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_classes[i].e_class,
                                                                 err[j].name,err[j].message);
                                                else
                                                        slprintf(ret, sizeof(ret) - 1, "%s - %s",
-                                                                err_classes[i].class,err[j].name);
+                                                                err_classes[i].e_class,err[j].name);
                                                return ret;
                                        }
                        }
                        
-                       slprintf(ret, sizeof(ret) - 1, "%s - %d",err_classes[i].class,num);
+                       slprintf(ret, sizeof(ret) - 1, "%s - %d",err_classes[i].e_class,num);
                        return ret;
                }
        
-       slprintf(ret, sizeof(ret) - 1, "Error: Unknown error (%d,%d)",class,num);
+       slprintf(ret, sizeof(ret) - 1, "Error: Unknown error (%d,%d)",e_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
  *****************************************************************************/