s3: only use netlogon/nbt header when needed.
[metze/samba/wip.git] / source3 / libsmb / smberr.c
index 757629a2d5290abefc846b51e99e0b24be512980..f4a13983f01e01cf7c935b67d4a654ca3f9937c9 100644 (file)
@@ -4,7 +4,7 @@
    
    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
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    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 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#define NO_SYSLOG
-
 #include "includes.h"
 
 /* error code stuff - put together by Merik Karman
@@ -37,9 +34,9 @@
 
 typedef const struct
 {
-  char *name;
+  const char *name;
   int code;
-  char *message;
+  const char *message;
 } err_code_struct;
 
 /* Dos Error Messages */
@@ -77,6 +74,8 @@ err_code_struct dos_msgs[] = {
   {"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 */
@@ -141,7 +140,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},
@@ -159,13 +158,13 @@ const struct
 /****************************************************************************
 return a SMB error name from a class and code
 ****************************************************************************/
-char *smb_dos_err_name(uint8 class, uint16 num)
+const char *smb_dos_err_name(uint8 e_class, uint16 num)
 {
-       static pstring ret;
+       char *result;
        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++)
@@ -173,17 +172,20 @@ char *smb_dos_err_name(uint8 class, uint16 num)
                                                return err[j].name;
                                        }
                        }
-                       slprintf(ret, sizeof(ret) - 1, "%d",num);
-                       return ret;
+                       result = talloc_asprintf(talloc_tos(), "%d", num);
+                       SMB_ASSERT(result != NULL);
+                       return result;
                }
        
-       slprintf(ret, sizeof(ret) - 1, "Error: Unknown error class (%d,%d)",class,num);
-       return(ret);
+       result = talloc_asprintf(talloc_tos(), "Error: Unknown error class "
+                                "(%d,%d)", e_class,num);
+       SMB_ASSERT(result != NULL);
+       return result;
 }
 
 /* Return a string for a DOS error */
 
-char *get_dos_error_msg(WERROR result)
+const char *get_dos_error_msg(WERROR result)
 {
        uint16 errnum;
 
@@ -195,19 +197,21 @@ char *get_dos_error_msg(WERROR result)
 /****************************************************************************
 return a SMB error class name as a string.
 ****************************************************************************/
-char *smb_dos_err_class(uint8 class)
+const char *smb_dos_err_class(uint8 e_class)
 {
-       static pstring ret;
+       char *result;
        int i;
-       
-       for (i=0;err_classes[i].class;i++) {
-               if (err_classes[i].code == class) {
-                       return err_classes[i].class;
+
+       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)",class);
-       return(ret);
+
+       result = talloc_asprintf(talloc_tos(), "Error: Unknown class (%d)",
+                                e_class);
+       SMB_ASSERT(result != NULL);
+       return result;
 }
 
 /****************************************************************************
@@ -215,48 +219,43 @@ return a SMB string from an SMB buffer
 ****************************************************************************/
 char *smb_dos_errstr(char *inbuf)
 {
-       static pstring ret;
-       int class = CVAL(inbuf,smb_rcls);
+       char *result;
+       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[j].name,err[j].message);
+                                                       result = talloc_asprintf(
+                                                               talloc_tos(), "%s - %s (%s)",
+                                                               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);
-                                               return ret;
+                                                       result = talloc_asprintf(
+                                                               talloc_tos(), "%s - %s",
+                                                               err_classes[i].e_class,
+                                                               err[j].name);
+                                               goto done;
                                        }
                        }
-                       
-                       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);
-}
 
+                       result = talloc_asprintf(talloc_tos(), "%s - %d",
+                                                err_classes[i].e_class, num);
+                       goto done;
+               }
 
-/*****************************************************************************
- 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;
+       result = talloc_asprintf(talloc_tos(), "Error: Unknown error (%d,%d)",
+                                e_class, num);
+ done:
+       SMB_ASSERT(result != NULL);
+       return result;
 }
 
-
 /*****************************************************************************
 map a unix errno to a win32 error
  *****************************************************************************/