/*
- 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
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#define NO_SYSLOG
-
#include "includes.h"
/* error code stuff - put together by Merik Karman
typedef const struct
{
- char *name;
+ const char *name;
int code;
- char *message;
+ const char *message;
} err_code_struct;
/* Dos Error Messages */
{"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."},
{"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 */
const struct
{
int code;
- char *class;
+ const char *e_class;
err_code_struct *err_msgs;
} err_classes[] = {
{0,"SUCCESS",NULL},
/****************************************************************************
-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
*****************************************************************************/