From 224c40a52335bf1afc7662183900e143307aa5be Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 1 Nov 1997 13:22:16 +0000 Subject: a simple SMB torture tester. This will allow us to evaluate locking techniques more accurately. (This used to be commit 054e3b2ae3a8cfb98fde72becef9b05de34d2ba7) --- source3/libsmb/smberr.c | 182 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 source3/libsmb/smberr.c (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c new file mode 100644 index 0000000000..5149568c04 --- /dev/null +++ b/source3/libsmb/smberr.c @@ -0,0 +1,182 @@ +/* + Unix SMB/Netbios implementation. + Version 1.9. + Copyright (C) Andrew Tridgell 1997 + + 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 + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 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. +*/ + +#ifdef SYSLOG +#undef SYSLOG +#endif + +#include "includes.h" + +extern int DEBUGLEVEL; + +/* error code stuff - put together by Merik Karman + merik@blackadder.dsh.oz.au */ + +typedef struct +{ + char *name; + int code; + char *message; +} err_code_struct; + +/* Dos Error Messages */ +err_code_struct dos_msgs[] = { + {"ERRbadfunc",1,"Invalid function."}, + {"ERRbadfile",2,"File not found."}, + {"ERRbadpath",3,"Directory invalid."}, + {"ERRnofids",4,"No file descriptors available"}, + {"ERRnoaccess",5,"Access denied."}, + {"ERRbadfid",6,"Invalid file handle."}, + {"ERRbadmcb",7,"Memory control blocks destroyed."}, + {"ERRnomem",8,"Insufficient server memory to perform the requested function."}, + {"ERRbadmem",9,"Invalid memory block address."}, + {"ERRbadenv",10,"Invalid environment."}, + {"ERRbadformat",11,"Invalid format."}, + {"ERRbadaccess",12,"Invalid open mode."}, + {"ERRbaddata",13,"Invalid data."}, + {"ERR",14,"reserved."}, + {"ERRbaddrive",15,"Invalid drive specified."}, + {"ERRremcd",16,"A Delete Directory request attempted to remove the server's current directory."}, + {"ERRdiffdevice",17,"Not same device."}, + {"ERRnofiles",18,"A File Search command can find no more files matching the specified criteria."}, + {"ERRbadshare",32,"The sharing mode specified for an Open conflicts with existing FIDs on the file."}, + {"ERRlock",33,"A Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process."}, + {"ERRnosuchshare", 67, "You specified an invalid share name"}, + {"ERRfilexists",80,"The file named in a Create Directory, Make New File or Link request already exists."}, + {"ERRbadpipe",230,"Pipe invalid."}, + {"ERRpipebusy",231,"All instances of the requested pipe are busy."}, + {"ERRpipeclosing",232,"Pipe close in progress."}, + {"ERRnotconnected",233,"No process on other end of pipe."}, + {"ERRmoredata",234,"There is more data to be returned."}, + {"ERRinvgroup",2455,"Invalid workgroup (try the -W option)"}, + {NULL,-1,NULL}}; + +/* Server Error Messages */ +err_code_struct server_msgs[] = { + {"ERRerror",1,"Non-specific error code."}, + {"ERRbadpw",2,"Bad password - name/password pair in a Tree Connect or Session Setup are invalid."}, + {"ERRbadtype",3,"reserved."}, + {"ERRaccess",4,"The requester does not have the necessary access rights within the specified context for the requested function. The context is defined by the TID or the UID."}, + {"ERRinvnid",5,"The tree ID (TID) specified in a command was invalid."}, + {"ERRinvnetname",6,"Invalid network name in tree connect."}, + {"ERRinvdevice",7,"Invalid device - printer request made to non-printer connection or non-printer request made to printer connection."}, + {"ERRqfull",49,"Print queue full (files) -- returned by open print file."}, + {"ERRqtoobig",50,"Print queue full -- no space."}, + {"ERRqeof",51,"EOF on print queue dump."}, + {"ERRinvpfid",52,"Invalid print file FID."}, + {"ERRsmbcmd",64,"The server did not recognize the command received."}, + {"ERRsrverror",65,"The server encountered an internal error, e.g., system file unavailable."}, + {"ERRfilespecs",67,"The file handle (FID) and pathname parameters contained an invalid combination of values."}, + {"ERRreserved",68,"reserved."}, + {"ERRbadpermits",69,"The access permissions specified for a file or directory are not a valid combination. The server cannot set the requested attribute."}, + {"ERRreserved",70,"reserved."}, + {"ERRsetattrmode",71,"The attribute mode in the Set File Attribute request is invalid."}, + {"ERRpaused",81,"Server is paused."}, + {"ERRmsgoff",82,"Not receiving messages."}, + {"ERRnoroom",83,"No room to buffer message."}, + {"ERRrmuns",87,"Too many remote user names."}, + {"ERRtimeout",88,"Operation timed out."}, + {"ERRnoresource",89,"No resources currently available for request."}, + {"ERRtoomanyuids",90,"Too many UIDs active on this session."}, + {"ERRbaduid",91,"The UID is not known as a valid ID on this session."}, + {"ERRusempx",250,"Temp unable to support Raw, use MPX mode."}, + {"ERRusestd",251,"Temp unable to support Raw, use standard read/write."}, + {"ERRcontmpx",252,"Continue in MPX mode."}, + {"ERRreserved",253,"reserved."}, + {"ERRreserved",254,"reserved."}, + {"ERRnosupport",0xFFFF,"Function not supported."}, + {NULL,-1,NULL}}; + +/* Hard Error Messages */ +err_code_struct hard_msgs[] = { + {"ERRnowrite",19,"Attempt to write on write-protected diskette."}, + {"ERRbadunit",20,"Unknown unit."}, + {"ERRnotready",21,"Drive not ready."}, + {"ERRbadcmd",22,"Unknown command."}, + {"ERRdata",23,"Data error (CRC)."}, + {"ERRbadreq",24,"Bad request structure length."}, + {"ERRseek",25 ,"Seek error."}, + {"ERRbadmedia",26,"Unknown media type."}, + {"ERRbadsector",27,"Sector not found."}, + {"ERRnopaper",28,"Printer out of paper."}, + {"ERRwrite",29,"Write fault."}, + {"ERRread",30,"Read fault."}, + {"ERRgeneral",31,"General failure."}, + {"ERRbadshare",32,"An open conflicts with an existing open."}, + {"ERRlock",33,"A Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process."}, + {"ERRwrongdisk",34,"The wrong disk was found in a drive."}, + {"ERRFCBUnavail",35,"No FCBs are available to process request."}, + {"ERRsharebufexc",36,"A sharing buffer has been exceeded."}, + {NULL,-1,NULL}}; + + +struct +{ + int code; + char *class; + err_code_struct *err_msgs; +} err_classes[] = { + {0,"SUCCESS",NULL}, + {0x01,"ERRDOS",dos_msgs}, + {0x02,"ERRSRV",server_msgs}, + {0x03,"ERRHRD",hard_msgs}, + {0x04,"ERRXOS",NULL}, + {0xE1,"ERRRMX1",NULL}, + {0xE2,"ERRRMX2",NULL}, + {0xE3,"ERRRMX3",NULL}, + {0xFF,"ERRCMD",NULL}, + {-1,NULL,NULL}}; + + +/**************************************************************************** +return a SMB error string from a SMB buffer +****************************************************************************/ +char *smb_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) + sprintf(ret,"%s - %s (%s)",err_classes[i].class, + err[j].name,err[j].message); + else + sprintf(ret,"%s - %s",err_classes[i].class,err[j].name); + return ret; + } + } + + sprintf(ret,"%s - %d",err_classes[i].class,num); + return ret; + } + + sprintf(ret,"Error: Unknown error (%d,%d)",class,num); + return(ret); +} -- cgit From e357d9106895b165bfa3f8331b9f186004c9a6cd Mon Sep 17 00:00:00 2001 From: Luke Leighton Date: Sun, 9 Nov 1997 17:30:10 +0000 Subject: attempting to mark up 32 bit error codes, needed for NT domains. separated out smb server-mode password validation into a separate file. added called and calling netbios names to client gen state: referenced section in rfc1002.txt. created workstation trust account checking code in ntclient.c there might be a bug in reply_session_setup_andX. i indented and added { } around single-line if statements: the lm password checking code now doesn't look right (around the GUEST_SESSSETUP bits). *no code semantics have been changed by the indentation process*. (This used to be commit f27966957fa7f16d337a4a58719239d036deab4c) --- source3/libsmb/smberr.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 5149568c04..35cd0bf88f 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -151,9 +151,28 @@ return a SMB error string from a SMB buffer char *smb_errstr(char *inbuf) { static pstring ret; + int i,j; + BOOL nt_errors = (SVAL(inbuf,smb_flg2) & FLAGS2_32_BIT_ERROR_CODES) == FLAGS2_32_BIT_ERROR_CODES; + + if (nt_errors) + { + char *nt_errstr = NULL; + uint32 nt_err = IVAL(inbuf, smb_rcls); + uint16 nt_num = nt_err & 0x0000ffff; + uint16 class = (nt_err & 0xffff0000) >> 16; + + /* maybe lookup the error message in the nt error codes... */ + if ((nt_errstr = get_nt_error_msg(nt_num)) != NULL) + { + sprintf(ret,"NT Error: (%4x, %s)", class, nt_errstr); + return ret; + } + sprintf(ret,"NT Error: Unknown error (%4x %4x)", class, nt_num); + } + else + { 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) @@ -176,7 +195,8 @@ char *smb_errstr(char *inbuf) sprintf(ret,"%s - %d",err_classes[i].class,num); return ret; } - - sprintf(ret,"Error: Unknown error (%d,%d)",class,num); + sprintf(ret,"Error: Unknown error (%4x,%d)", class, num); + } + return(ret); } -- cgit From 77aec4ae6307c0ad0b843bbf23d64ccb1aaf7476 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 10 Nov 1997 19:23:17 +0000 Subject: Rolled back tree state to 11:59pm 8th November 1997 EST to remove problems. Jeremy (This used to be commit 4a36ac236c2ad634f05efcd0179875d09988614a) --- source3/libsmb/smberr.c | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 35cd0bf88f..5149568c04 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -151,28 +151,9 @@ return a SMB error string from a SMB buffer char *smb_errstr(char *inbuf) { static pstring ret; - int i,j; - BOOL nt_errors = (SVAL(inbuf,smb_flg2) & FLAGS2_32_BIT_ERROR_CODES) == FLAGS2_32_BIT_ERROR_CODES; - - if (nt_errors) - { - char *nt_errstr = NULL; - uint32 nt_err = IVAL(inbuf, smb_rcls); - uint16 nt_num = nt_err & 0x0000ffff; - uint16 class = (nt_err & 0xffff0000) >> 16; - - /* maybe lookup the error message in the nt error codes... */ - if ((nt_errstr = get_nt_error_msg(nt_num)) != NULL) - { - sprintf(ret,"NT Error: (%4x, %s)", class, nt_errstr); - return ret; - } - sprintf(ret,"NT Error: Unknown error (%4x %4x)", class, nt_num); - } - else - { 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) @@ -195,8 +176,7 @@ char *smb_errstr(char *inbuf) sprintf(ret,"%s - %d",err_classes[i].class,num); return ret; } - sprintf(ret,"Error: Unknown error (%4x,%d)", class, num); - } - + + sprintf(ret,"Error: Unknown error (%d,%d)",class,num); return(ret); } -- cgit From 55f400bd84f26027f5ec9b7fa06b22895de7557c Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 22 Jan 1998 13:27:43 +0000 Subject: This is *not* a big change (although it looks like one). This is merely updating the Copyright statements from 1997 to 1998. It's a once a year thing :-). NO OTHER CHANGES WERE MADE. Jeremy. (This used to be commit b9c16977231efb274e08856f7f3f4408dad6d96c) --- source3/libsmb/smberr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 5149568c04..e8c4544394 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -1,7 +1,7 @@ /* Unix SMB/Netbios implementation. Version 1.9. - Copyright (C) Andrew Tridgell 1997 + Copyright (C) Andrew Tridgell 1998 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 -- cgit From f888868f46a5418bac9ab528497136c152895305 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 12 May 1998 00:55:32 +0000 Subject: This is a security audit change of the main source. It removed all ocurrences of the following functions : sprintf strcpy strcat The replacements are slprintf, safe_strcpy and safe_strcat. It should not be possible to use code in Samba that uses sprintf, strcpy or strcat, only the safe_equivalents. Once Andrew has fixed the slprintf implementation then this code will be moved back to the 1.9.18 code stream. Jeremy. (This used to be commit 2d774454005f0b54e5684cf618da7060594dfcbb) --- source3/libsmb/smberr.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index e8c4544394..c284d18ba6 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -165,18 +165,18 @@ char *smb_errstr(char *inbuf) if (num == err[j].code) { if (DEBUGLEVEL > 0) - sprintf(ret,"%s - %s (%s)",err_classes[i].class, + slprintf(ret, sizeof(ret) - 1, "%s - %s (%s)",err_classes[i].class, err[j].name,err[j].message); else - sprintf(ret,"%s - %s",err_classes[i].class,err[j].name); + slprintf(ret, sizeof(ret) - 1, "%s - %s",err_classes[i].class,err[j].name); return ret; } } - sprintf(ret,"%s - %d",err_classes[i].class,num); + slprintf(ret, sizeof(ret) - 1, "%s - %d",err_classes[i].class,num); return ret; } - sprintf(ret,"Error: Unknown error (%d,%d)",class,num); + slprintf(ret, sizeof(ret) - 1, "Error: Unknown error (%d,%d)",class,num); return(ret); } -- cgit From 8afebcdd7e055cd6c6f9eb69f9ba652b4e1ab591 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sun, 21 Jun 1998 12:44:34 +0000 Subject: Remove the copyright to Canon Information Systems Australia, as we don't want them to have the copyright. Added a new DOSERR response code that Win95 returns, unimp, unimplemented. Added code to ignore errors on setting remote time, as Win 95 does not like the time being changed on a directory. Win NT and Samba are OK at this. This is the next to last clean-ups here. Next is to properly handle restore times on directories (except for Win95--see above). Now have Jay's changes in and have fixed a bug reported by Tim Lee. (This used to be commit dc9436bae4493b71ba92970d6cc49dbb33cd55cd) --- source3/libsmb/smberr.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index c284d18ba6..ee751c0f80 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -58,6 +58,7 @@ err_code_struct dos_msgs[] = { {"ERRnofiles",18,"A File Search command can find no more files matching the specified criteria."}, {"ERRbadshare",32,"The sharing mode specified for an Open conflicts with existing FIDs on the file."}, {"ERRlock",33,"A Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process."}, + {"ERRunsup", 50, "The operation is unsupported"}, {"ERRnosuchshare", 67, "You specified an invalid share name"}, {"ERRfilexists",80,"The file named in a Create Directory, Make New File or Link request already exists."}, {"ERRbadpipe",230,"Pipe invalid."}, -- cgit From 64578c0589a3a741f81fb55c16eeb882128da00b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 29 Jul 1998 03:08:05 +0000 Subject: merge from the autoconf2 branch to the main branch (This used to be commit 3bda7ac417107a7b01d91805ca71c4330657ed21) --- source3/libsmb/smberr.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index ee751c0f80..c2d8884d73 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -18,9 +18,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifdef SYSLOG -#undef SYSLOG -#endif +#define NO_SYSLOG #include "includes.h" -- cgit From 74576a48fdf71e4264a892fda58302053f809670 Mon Sep 17 00:00:00 2001 From: Luke Leighton Date: Wed, 9 Dec 1998 16:28:04 +0000 Subject: adding some enumerate services code, client and server. (This used to be commit dacf5b152bf74cc3ee9a816911384a5eb0e77afa) --- source3/libsmb/smberr.c | 65 +++++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 26 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index c2d8884d73..4fd9165c69 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -147,35 +147,48 @@ struct /**************************************************************************** return a SMB error string from a SMB buffer ****************************************************************************/ -char *smb_errstr(char *inbuf) +char *smb_err_msg(uint8 class, uint32 num) { - static pstring ret; - int class = CVAL(inbuf,smb_rcls); - int num = SVAL(inbuf,smb_err); - int i,j; + 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) + for (i=0;err_classes[i].class;i++) + { + if (err_classes[i].code == class) { - 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; + err_code_struct *err = err_classes[i].err_msgs; + if (err != NULL) + { + 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, "Error: Unknown error (%d,%d)",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); +} +/**************************************************************************** +return a SMB error string from a SMB buffer +****************************************************************************/ +char *smb_errstr(char *inbuf) +{ + return smb_err_msg(CVAL(inbuf,smb_rcls), SVAL(inbuf,smb_err)); } -- cgit From a971a74717f1a9d8c966c623b735e079da2f67ae Mon Sep 17 00:00:00 2001 From: Luke Leighton Date: Wed, 9 Dec 1998 18:59:12 +0000 Subject: bugfix in smb_err_msg (This used to be commit 870bccb174337dec5cc14a5e7740662de56e629c) --- source3/libsmb/smberr.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 4fd9165c69..85827dde28 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -176,11 +176,10 @@ char *smb_err_msg(uint8 class, uint32 num) } } } - + 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); -- cgit From cae3620b2e8abbe35f0369a82d5461cb596475a3 Mon Sep 17 00:00:00 2001 From: Luke Leighton Date: Thu, 24 Jun 1999 18:58:08 +0000 Subject: safe string error reporting functions (found a potential buffer overflow of a pstrcpy into an fstring). (This used to be commit ac0060443de800fec9042b69b299ff2e9128a31c) --- source3/libsmb/smberr.c | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 85827dde28..228eee5892 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -143,13 +143,19 @@ struct {0xFF,"ERRCMD",NULL}, {-1,NULL,NULL}}; +char *smb_err_msg(uint8 class, uint32 num) +{ + static pstring ret; + smb_safe_err_msg(class, num, ret, sizeof(ret)); + return ret; +} + /**************************************************************************** return a SMB error string from a SMB buffer ****************************************************************************/ -char *smb_err_msg(uint8 class, uint32 num) +BOOL smb_safe_err_msg(uint8 class, uint32 num, char *ret, size_t len) { - static pstring ret; int i,j; for (i=0;err_classes[i].class;i++) @@ -165,29 +171,42 @@ char *smb_err_msg(uint8 class, uint32 num) { if (DEBUGLEVEL > 0) { - slprintf(ret, sizeof(ret) - 1, "%s - %s (%s)",err_classes[i].class, + slprintf(ret, len - 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); + slprintf(ret, len - 1, "%s - %s",err_classes[i].class,err[j].name); } - return ret; + return True; } } } - slprintf(ret, sizeof(ret) - 1, "%s - %d",err_classes[i].class, num); - return ret; + slprintf(ret, len - 1, "%s - %d",err_classes[i].class, num); + return True; } } - slprintf(ret, sizeof(ret) - 1, "Error: Unknown error (%d,%d)",class,num); - return(ret); + + slprintf(ret, len - 1, "Error: Unknown error (%d,%d)",class,num); + return False; } + +/**************************************************************************** +return a SMB error string from a SMB buffer +****************************************************************************/ +BOOL smb_safe_errstr(char *inbuf, char *msg, size_t len) +{ + return smb_safe_err_msg(CVAL(inbuf,smb_rcls), SVAL(inbuf,smb_err), + msg, len); +} + /**************************************************************************** return a SMB error string from a SMB buffer ****************************************************************************/ char *smb_errstr(char *inbuf) { - return smb_err_msg(CVAL(inbuf,smb_rcls), SVAL(inbuf,smb_err)); + static fstring errmsg; + (void)smb_safe_errstr(inbuf, errmsg, sizeof(errmsg)); + return errmsg; } -- cgit From 3db52feb1f3b2c07ce0b06ad4a7099fa6efe3fc7 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 13 Dec 1999 13:27:58 +0000 Subject: first pass at updating head branch to be to be the same as the SAMBA_2_0 branch (This used to be commit 453a822a76780063dff23526c35408866d0c0154) --- source3/libsmb/smberr.c | 85 ++++++++++++++++--------------------------------- 1 file changed, 27 insertions(+), 58 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 228eee5892..c2d8884d73 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -143,70 +143,39 @@ struct {0xFF,"ERRCMD",NULL}, {-1,NULL,NULL}}; -char *smb_err_msg(uint8 class, uint32 num) -{ - static pstring ret; - smb_safe_err_msg(class, num, ret, sizeof(ret)); - return ret; -} - /**************************************************************************** return a SMB error string from a SMB buffer ****************************************************************************/ -BOOL smb_safe_err_msg(uint8 class, uint32 num, char *ret, size_t len) +char *smb_errstr(char *inbuf) { - int i,j; - - for (i=0;err_classes[i].class;i++) - { - if (err_classes[i].code == class) + 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) { - err_code_struct *err = err_classes[i].err_msgs; - if (err != NULL) - { - for (j=0;err[j].name;j++) - { - if (num == err[j].code) - { - if (DEBUGLEVEL > 0) - { - slprintf(ret, len - 1, "%s - %s (%s)",err_classes[i].class, - err[j].name,err[j].message); - } - else - { - slprintf(ret, len - 1, "%s - %s",err_classes[i].class,err[j].name); - } - return True; - } - } - } - slprintf(ret, len - 1, "%s - %d",err_classes[i].class, num); - return True; + 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, len - 1, "Error: Unknown error (%d,%d)",class,num); - return False; -} - -/**************************************************************************** -return a SMB error string from a SMB buffer -****************************************************************************/ -BOOL smb_safe_errstr(char *inbuf, char *msg, size_t len) -{ - return smb_safe_err_msg(CVAL(inbuf,smb_rcls), SVAL(inbuf,smb_err), - msg, len); -} - -/**************************************************************************** -return a SMB error string from a SMB buffer -****************************************************************************/ -char *smb_errstr(char *inbuf) -{ - static fstring errmsg; - (void)smb_safe_errstr(inbuf, errmsg, sizeof(errmsg)); - return errmsg; + 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); } -- cgit From 87fbb7092b8f8b2f0db0f361c3d625e19de57cd9 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 4 Jul 2001 07:15:53 +0000 Subject: The big character set handling changeover! This commit gets rid of all our old codepage handling and replaces it with iconv. All internal strings in Samba are now in "unix" charset, which may be multi-byte. See internals.doc and my posting to samba-technical for a more complete explanation. (This used to be commit debb471267960e56005a741817ebd227ecfc512a) --- source3/libsmb/smberr.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index c2d8884d73..924fa76d71 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -164,10 +164,12 @@ char *smb_errstr(char *inbuf) 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); + 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); + slprintf(ret, sizeof(ret) - 1, "%s - %s", + err_classes[i].class,err[j].name); return ret; } } -- cgit From 2ccfea3de7b2b7dc0be2438c3adb3f7be82a2dfc Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 10 Aug 2001 06:00:33 +0000 Subject: A rewrite of the error handling in the libsmb client code. I've separated out the error handling into a bunch of separate functions rather than all being handled in one big function. Fetch error codes from the last received packet: void cli_dos_error(struct cli_state *cli, uint8 *eclass, uint32 *num); uint32 cli_nt_error(struct cli_state *); Convert errors to UNIX errno values: int cli_errno_from_dos(uint8 eclass, uint32 num); int cli_errno_from_nt(uint32 status); int cli_errno(struct cli_state *cli); Detect different kinds of errors: BOOL cli_is_dos_error(struct cli_state *cli); BOOL cli_is_nt_error(struct cli_state *cli); BOOL cli_is_error(struct cli_state *cli); This also means we now support CAP_STATUS32 as we can decode and understand NT errors instead of just DOS errors. Yay! Ported a whole bunch of files in libsmb to use this new API instead of the just the DOS error. (This used to be commit 6dbdb0d813f3c7ab20b38baa1223b0b479aadec9) --- source3/libsmb/smberr.c | 53 +++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 26 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 924fa76d71..9648786ea5 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -36,34 +36,35 @@ typedef struct /* Dos Error Messages */ err_code_struct dos_msgs[] = { - {"ERRbadfunc",1,"Invalid function."}, - {"ERRbadfile",2,"File not found."}, - {"ERRbadpath",3,"Directory invalid."}, - {"ERRnofids",4,"No file descriptors available"}, - {"ERRnoaccess",5,"Access denied."}, - {"ERRbadfid",6,"Invalid file handle."}, + {"ERRbadfunc",ERRbadfunc,"Invalid function."}, + {"ERRbadfile",ERRbadfile,"File not found."}, + {"ERRbadpath",ERRbadpath,"Directory invalid."}, + {"ERRnofids",ERRnofids,"No file descriptors available"}, + {"ERRnoaccess",ERRnoaccess,"Access denied."}, + {"ERRbadfid",ERRbadfid,"Invalid file handle."}, {"ERRbadmcb",7,"Memory control blocks destroyed."}, - {"ERRnomem",8,"Insufficient server memory to perform the requested function."}, - {"ERRbadmem",9,"Invalid memory block address."}, - {"ERRbadenv",10,"Invalid environment."}, + {"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",12,"Invalid open mode."}, - {"ERRbaddata",13,"Invalid data."}, - {"ERR",14,"reserved."}, - {"ERRbaddrive",15,"Invalid drive specified."}, - {"ERRremcd",16,"A Delete Directory request attempted to remove the server's current directory."}, - {"ERRdiffdevice",17,"Not same device."}, - {"ERRnofiles",18,"A File Search command can find no more files matching the specified criteria."}, - {"ERRbadshare",32,"The sharing mode specified for an Open conflicts with existing FIDs on the file."}, - {"ERRlock",33,"A Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process."}, - {"ERRunsup", 50, "The operation is unsupported"}, - {"ERRnosuchshare", 67, "You specified an invalid share name"}, - {"ERRfilexists",80,"The file named in a Create Directory, Make New File or Link request already exists."}, - {"ERRbadpipe",230,"Pipe invalid."}, - {"ERRpipebusy",231,"All instances of the requested pipe are busy."}, - {"ERRpipeclosing",232,"Pipe close in progress."}, - {"ERRnotconnected",233,"No process on other end of pipe."}, - {"ERRmoredata",234,"There is more data to be returned."}, + {"ERRbadaccess",ERRbadaccess,"Invalid open mode."}, + {"ERRbaddata",ERRbaddata,"Invalid data."}, + {"ERR",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."}, + {"ERRnofiles",ERRnofiles,"A File Search command can find no more files matching the specified criteria."}, + {"ERRbadshare",ERRbadshare,"The sharing mode specified for an Open conflicts with existing FIDs on the file."}, + {"ERRlock",ERRlock,"A Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process."}, + {"ERRunsup", ERRunsup, "The operation is unsupported"}, + {"ERRnosuchshare", ERRnosuchshare, "You specified an invalid share name"}, + {"ERRfilexists",ERRfilexists,"The file named in a Create Directory, Make New File or Link request already exists."}, + {"ERRinvalidname",ERRinvalidname, "Invalid name"}, + {"ERRbadpipe",ERRbadpipe,"Pipe invalid."}, + {"ERRpipebusy",ERRpipebusy,"All instances of the requested pipe are busy."}, + {"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)"}, {NULL,-1,NULL}}; -- cgit From fd6ea431617d91c5f5c6b07cb26910f4900c1515 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 3 Sep 2001 08:50:59 +0000 Subject: the next step in our error code handling change - added WERROR for win32 error codes - added a configure test for immediate structures still lots to do, so its not enabled by default, but the main structure is there (This used to be commit 24f9ab683dec52587ee56717e821b49c0fa3d70f) --- source3/libsmb/smberr.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 9648786ea5..e6ecfefb34 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -182,3 +182,14 @@ char *smb_errstr(char *inbuf) 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; +} -- cgit From fbc1f326f445a2826a10155fe0122c779bb1f80e Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 3 Sep 2001 10:38:13 +0000 Subject: more NTSTATUS/WERROR conversion (This used to be commit ad648c5cd8ebe4be8304379117f403d7673dcbc8) --- source3/libsmb/smberr.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index e6ecfefb34..00966aed43 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -193,3 +193,14 @@ char *werror_str(WERROR status) 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); +} + -- cgit From d53d5beeb29c0024556aae2f66f1d5bfe63960e5 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 5 Sep 2001 11:32:59 +0000 Subject: use cli_is_error() instead of looking in smb_rcls, otherwise NT status codes don't work correctly (This used to be commit 55d5828e608671f070a9e96938be0d16d50aeb26) --- source3/libsmb/smberr.c | 59 +++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 31 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 00966aed43..c881b54203 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -148,39 +148,36 @@ struct /**************************************************************************** return a SMB error string from a 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); } -- cgit From dc1fc3ee8ec2199bc73bb5d7ec711c6800f61d65 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 2 Oct 2001 04:29:50 +0000 Subject: Removed 'extern int DEBUGLEVEL' as it is now in the smb.h header. (This used to be commit 2d0922b0eabfdc0aaf1d0797482fef47ed7fde8e) --- source3/libsmb/smberr.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index c881b54203..0b59b5b1a5 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -22,8 +22,6 @@ #include "includes.h" -extern int DEBUGLEVEL; - /* error code stuff - put together by Merik Karman merik@blackadder.dsh.oz.au */ @@ -200,4 +198,3 @@ WERROR map_werror_from_unix(int error) NTSTATUS status = map_nt_error_from_unix(error); return ntstatus_to_werror(status); } - -- cgit From fab88997b021ad66dd7f03220d95d1f7ee315140 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 29 Oct 2001 08:12:44 +0000 Subject: This patch applied, except without the structure changes to nmblib.c Andrew Bartlett. From kai@cmail.ru Mon Oct 29 18:50:42 2001 Date: Fri, 19 Oct 2001 17:26:06 +0300 From: Andrew V. Samoilov To: samba-technical@lists.samba.org Subject: [patch]: makes some arrays const to be shared between processes Hi! This patch makes some arrays const. So these arrays go to text/rodata segment and are shared between all of the processes which use shared library with these arrays. Regards, Andrew V. Samoilov. P.S. Please cc your answer to kai@cmail.ru, I don't subscribed to this list. ChangeLog: * cliconnect.c (prots): Make const. * clierror.c (rap_errmap): Likewise. * nmblib.c (nmb_header_opcode_names): Likewise. (lookup_opcode_name): Make opcode_namep const. Eliminate i. * nterr.c (nt_err_code_struct): Typedef const. * smberr.c (err_code_struct): Make const. (err_classes): Likewise. (This used to be commit cb84485a2b0e1fdcb6fa90e0bfb97e125ae1b3dd) --- source3/libsmb/smberr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 0b59b5b1a5..66256d2385 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -25,7 +25,7 @@ /* error code stuff - put together by Merik Karman merik@blackadder.dsh.oz.au */ -typedef struct +typedef const struct { char *name; int code; @@ -125,7 +125,7 @@ err_code_struct hard_msgs[] = { {NULL,-1,NULL}}; -struct +const struct { int code; char *class; -- cgit From 554d387ab33220e7dc02d7a8c1aba854277b92f3 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 23 Nov 2001 05:37:40 +0000 Subject: Added constants and error message for dos error code 1326 (logon failure). (This used to be commit 6ce1eec09de64f19d969a67fc236abd4ae277926) --- source3/libsmb/smberr.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 66256d2385..a43e4764e8 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -25,6 +25,17 @@ /* error code stuff - put together by Merik Karman merik@blackadder.dsh.oz.au */ + +/* 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; @@ -64,6 +75,7 @@ err_code_struct dos_msgs[] = { {"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)"}, + {"ERRlogonfailure",ERRlogonfailure,"Logon failure"}, {NULL,-1,NULL}}; /* Server Error Messages */ -- cgit From a71f3f66a1b47a70e402c4d82736f376449b923c Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 25 Nov 2001 02:35:37 +0000 Subject: Add a new torture test to extract a NT->DOS error map from an NT member of a samba domain. The PDC must be running a special authenticaion module that spits out NT errors based on username. Andrew Bartlett (This used to be commit adc7a6048c13342b79b6228beafb5142c50f318d) --- source3/libsmb/smberr.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index a43e4764e8..d0aa8f6024 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -156,7 +156,51 @@ const 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 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_dos_errstr(char *inbuf) { -- cgit From bca2bcd87e3054c46651563024d1a91bcdf42d78 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 4 Dec 2001 00:46:12 +0000 Subject: Added error message for ERRdiskfull. (This used to be commit 9f5d7e8a04c36395570247bc5e1b7b3fc5d1a322) --- source3/libsmb/smberr.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index d0aa8f6024..71e609ff3a 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -76,6 +76,7 @@ err_code_struct dos_msgs[] = { {"ERRmoredata",ERRmoredata,"There is more data to be returned."}, {"ERRinvgroup",2455,"Invalid workgroup (try the -W option)"}, {"ERRlogonfailure",ERRlogonfailure,"Logon failure"}, + {"ERRdiskfull",ERRdiskfull,"Disk full"}, {NULL,-1,NULL}}; /* Server Error Messages */ -- cgit From 80437a4cc0d88f47fb20901abf28590c35f3b09a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 3 Jan 2002 08:36:47 +0000 Subject: Update the NT_STATUS -> DOS error table. This new table is rather different to the old one (see diff posted to the list for a sorted list of differences) and needs a *lot* of testing. It does however seem to line up much better with what NT is using, as exampled by the change to the OBJECT_NAME_COLLISION DOS error, it now matches win2k where it didn't before. I can't see any critical errors we now get wrong, and I know that the auth errors are correct as per my on-the-wire observations. This table was produced (and I hope to comment this better later) by using the ERRMAPEXTRACT smbtorture tool, a Win2k domain member and the 'name_to_ntstatus' auth module on the HEAD PDC. This module returned the username as the error, and the NT box was forced to give me a dos error becouse thats all I negotiated on that connection. Hence the map. Andrew Bartlett (This used to be commit a855dfb2e0b899d03087860e5462c2aed3ca4cad) --- source3/libsmb/smberr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 71e609ff3a..b6e6f03740 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -51,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."}, @@ -74,7 +74,7 @@ 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"}, {NULL,-1,NULL}}; -- cgit From bf4c3d3659081a034110cffb2ae6bf5bd3767a22 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sun, 6 Jan 2002 03:41:29 +0000 Subject: Added a get_dos_error_msg() function to mirror the get_nt_error_msg() One day I'll get around to refactoring the DOS error handling so it mirrors the NT error handling code. (This used to be commit f4535721d350f3068e8dfb612331eb609ea03da0) --- source3/libsmb/smberr.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index b6e6f03740..3ef4eaf989 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -77,6 +77,7 @@ err_code_struct dos_msgs[] = { {"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 */ @@ -181,6 +182,16 @@ char *smb_dos_err_name(uint8 class, uint16 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. -- cgit From cd68afe31256ad60748b34f7318a180cfc2127cc Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 30 Jan 2002 06:08:46 +0000 Subject: Removed version number from file header. Changed "SMB/Netbios" to "SMB/CIFS" in file header. (This used to be commit 6a58c9bd06d0d7502a24bf5ce5a2faf0a146edfa) --- source3/libsmb/smberr.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 3ef4eaf989..757629a2d5 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -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 -- cgit From a4cce223d6873400b053872a6e3b2eb8621eea45 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sun, 17 Mar 2002 06:04:15 +0000 Subject: Added dos_errstr() function. Not all errors in list yet. (This used to be commit ddb5753e36b8c5efb48ce5c82c16d970fb8e76b6) --- source3/libsmb/smberr.c | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 757629a2d5..84b3f507e6 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -245,18 +245,6 @@ char *smb_dos_errstr(char *inbuf) 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 *****************************************************************************/ -- cgit From bb2dc1a6339c567f1802f5fa33e593bd7f73fbd3 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 9 Oct 2002 22:50:31 +0000 Subject: Added unknown info level. Jeremy. (This used to be commit 7634a58ec83ed7b40fe8ac95b0486b1ac00c59e4) --- source3/libsmb/smberr.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 84b3f507e6..724c8edd54 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -77,6 +77,7 @@ err_code_struct dos_msgs[] = { {"ERRlogonfailure",ERRlogonfailure,"Logon failure"}, {"ERRdiskfull",ERRdiskfull,"Disk full"}, {"ERRgeneral",ERRgeneral, "General failure"}, + {"ERRunknownlevel",ERRunknownlevel, "Unknown info level"}, {NULL,-1,NULL}}; /* Server Error Messages */ -- cgit From 634c54310c92c48dd4eceec602e230a021bdcfc5 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 3 Jan 2003 08:28:12 +0000 Subject: Merge from HEAD - make Samba compile with -Wwrite-strings without additional warnings. (Adds a lot of const). Andrew Bartlett (This used to be commit 3a7458f9472432ef12c43008414925fd1ce8ea0c) --- source3/libsmb/smberr.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 724c8edd54..82efbdb689 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -37,9 +37,9 @@ typedef const struct { - char *name; + const char *name; int code; - char *message; + const char *message; } err_code_struct; /* Dos Error Messages */ @@ -142,7 +142,7 @@ err_code_struct hard_msgs[] = { const struct { int code; - char *class; + const char *class; err_code_struct *err_msgs; } err_classes[] = { {0,"SUCCESS",NULL}, @@ -160,7 +160,7 @@ 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 class, uint16 num) { static pstring ret; int i,j; @@ -184,7 +184,7 @@ char *smb_dos_err_name(uint8 class, uint16 num) /* Return a string for a DOS error */ -char *get_dos_error_msg(WERROR result) +const char *get_dos_error_msg(WERROR result) { uint16 errnum; @@ -196,7 +196,7 @@ 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 class) { static pstring ret; int i; -- cgit From 19ca97a70f6b7b41d251eaa76e4d3c980c6eedff Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 24 Jun 2005 20:25:18 +0000 Subject: r7882: Looks like a large patch - but what it actually does is make Samba safe for using our headers and linking with C++ modules. Stops us from using C++ reserved keywords in our code. Jeremy (This used to be commit 9506b8e145982b1160a2f0aee5c9b7a54980940a) --- source3/libsmb/smberr.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 82efbdb689..b014fb947e 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -142,7 +142,7 @@ err_code_struct hard_msgs[] = { const struct { int code; - const char *class; + const char *e_class; err_code_struct *err_msgs; } err_classes[] = { {0,"SUCCESS",NULL}, @@ -160,13 +160,13 @@ const struct /**************************************************************************** return a SMB error name from a class and code ****************************************************************************/ -const char *smb_dos_err_name(uint8 class, uint16 num) +const char *smb_dos_err_name(uint8 e_class, uint16 num) { static pstring ret; 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++) @@ -178,7 +178,7 @@ const char *smb_dos_err_name(uint8 class, uint16 num) return ret; } - slprintf(ret, sizeof(ret) - 1, "Error: Unknown error class (%d,%d)",class,num); + slprintf(ret, sizeof(ret) - 1, "Error: Unknown error class (%d,%d)",e_class,num); return(ret); } @@ -196,18 +196,18 @@ const char *get_dos_error_msg(WERROR result) /**************************************************************************** return a SMB error class name as a string. ****************************************************************************/ -const char *smb_dos_err_class(uint8 class) +const char *smb_dos_err_class(uint8 e_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; + 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); + slprintf(ret, sizeof(ret) - 1, "Error: Unknown class (%d)",e_class); return(ret); } @@ -217,32 +217,32 @@ 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); } -- cgit From ab398643a4e44211696ef5ce72b62ab7ecee7bc9 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 19 Jul 2005 02:37:04 +0000 Subject: r8572: Remove crufty #define NO_SYSLOG as it's not used at all anymore. (This used to be commit 985dbb47d925e79c1195ca219f7ab5d6648b22b8) --- source3/libsmb/smberr.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index b014fb947e..a21063e52a 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -17,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 -- cgit From 54abd2aa66069e6baf7769c496f46d9dba18db39 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 30 Sep 2005 17:13:37 +0000 Subject: r10656: BIG merge from trunk. Features not copied over * \PIPE\unixinfo * winbindd's {group,alias}membership new functions * winbindd's lookupsids() functionality * swat (trunk changes to be reverted as per discussion with Deryck) (This used to be commit 939c3cb5d78e3a2236209b296aa8aba8bdce32d3) --- source3/libsmb/smberr.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index a21063e52a..82a06bde2b 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -75,6 +75,7 @@ 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}}; -- cgit From d824b98f80ba186030cbb70b3a1e5daf80469ecd Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 9 Jul 2007 19:25:36 +0000 Subject: r23779: Change from v2 or later to v3 or later. Jeremy. (This used to be commit 407e6e695b8366369b7c76af1ff76869b45347b3) --- source3/libsmb/smberr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 82a06bde2b..ffb6305190 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -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, -- cgit From 5e54558c6dea67b56bbfaba5698f3a434d3dffb6 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 10 Jul 2007 00:52:41 +0000 Subject: r23784: use the GPLv3 boilerplate as recommended by the FSF and the license text (This used to be commit b0132e94fc5fef936aa766fb99a306b3628e9f07) --- source3/libsmb/smberr.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index ffb6305190..1d81011d92 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -13,8 +13,7 @@ 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 . */ #include "includes.h" -- cgit From 6069670f1bebc37527c8363a72a653e43fff7c0b Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 11 Nov 2007 15:30:01 +0100 Subject: Some pstring removal Hi! Feel free to push :-) Volker From 7fae6b3709a973bd0a5a13d3f5c880c61d5e35de Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 11 Nov 2007 15:28:59 +0100 Subject: [PATCH] Remove some static pstrings (This used to be commit c3a66b4ee97a902c5cf43c3bb145541849a029ed) --- source3/libsmb/smberr.c | 60 +++++++++++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 24 deletions(-) (limited to 'source3/libsmb/smberr.c') diff --git a/source3/libsmb/smberr.c b/source3/libsmb/smberr.c index 1d81011d92..f4a13983f0 100644 --- a/source3/libsmb/smberr.c +++ b/source3/libsmb/smberr.c @@ -160,7 +160,7 @@ return a SMB error name from a class and code ****************************************************************************/ 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].e_class;i++) @@ -172,12 +172,15 @@ const char *smb_dos_err_name(uint8 e_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)",e_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 */ @@ -196,17 +199,19 @@ return a SMB error class name as a string. ****************************************************************************/ const char *smb_dos_err_class(uint8 e_class) { - static pstring ret; + char *result; 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); + + result = talloc_asprintf(talloc_tos(), "Error: Unknown class (%d)", + e_class); + SMB_ASSERT(result != NULL); + return result; } /**************************************************************************** @@ -214,11 +219,11 @@ return a SMB string from an SMB buffer ****************************************************************************/ char *smb_dos_errstr(char *inbuf) { - static pstring ret; + char *result; int e_class = CVAL(inbuf,smb_rcls); int num = SVAL(inbuf,smb_err); 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) { @@ -226,22 +231,29 @@ char *smb_dos_errstr(char *inbuf) 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].e_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].e_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].e_class,num); - return ret; + + result = talloc_asprintf(talloc_tos(), "%s - %d", + err_classes[i].e_class, num); + goto done; } - - slprintf(ret, sizeof(ret) - 1, "Error: Unknown error (%d,%d)",e_class,num); - return(ret); + + result = talloc_asprintf(talloc_tos(), "Error: Unknown error (%d,%d)", + e_class, num); + done: + SMB_ASSERT(result != NULL); + return result; } /***************************************************************************** -- cgit