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/Makefile.in | 4 +- source3/libsmb/doserr.c | 88 +++++++++++++++++++++++++++++++++++++ source3/libsmb/smberr.c | 12 ----- source3/printing/nt_printing.c | 2 +- source3/rpc_parse/parse_prs.c | 2 +- source3/rpc_server/srv_spoolss_nt.c | 14 +++--- 6 files changed, 99 insertions(+), 23 deletions(-) create mode 100644 source3/libsmb/doserr.c diff --git a/source3/Makefile.in b/source3/Makefile.in index 30f616c097..756898365b 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -152,8 +152,8 @@ LIBSMB_OBJ = libsmb/clientgen.o libsmb/cliconnect.o libsmb/clifile.o \ libsmb/nterr.o libsmb/smbdes.o libsmb/smbencrypt.o \ libsmb/smberr.o libsmb/credentials.o libsmb/pwd_cache.o \ libsmb/clioplock.o libsmb/errormap.o libsmb/clirap2.o \ - libsmb/passchange.o libsmb/unexpected.o $(RPC_PARSE_OBJ1) \ - $(LIBADS_OBJ) + libsmb/passchange.o libsmb/unexpected.o libsmb/doserr.o \ + $(RPC_PARSE_OBJ1) $(LIBADS_OBJ) LIBMSRPC_OBJ = libsmb/cli_lsarpc.o libsmb/cli_samr.o libsmb/cli_spoolss.o \ libsmb/cli_netlogon.o libsmb/cli_srvsvc.o libsmb/cli_wkssvc.o \ diff --git a/source3/libsmb/doserr.c b/source3/libsmb/doserr.c new file mode 100644 index 0000000000..5e9da2fc49 --- /dev/null +++ b/source3/libsmb/doserr.c @@ -0,0 +1,88 @@ +/* + * Unix SMB/CIFS implementation. + * DOS error routines + * Copyright (C) Tim Potter 2002. + * + * 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. + */ + +/* DOS error codes. please read doserr.h */ + +#include "includes.h" + +typedef const struct +{ + char *dos_errstr; + WERROR werror; +} werror_code_struct; + +werror_code_struct dos_errs[] = +{ + { "WERR_OK", WERR_OK }, + { "WERR_BADFILE", WERR_BADFILE }, + { "WERR_ACCESS_DENIED", WERR_ACCESS_DENIED }, + { "WERR_BADFID", WERR_BADFID }, + { "WERR_BADFUNC", WERR_BADFUNC }, + { "WERR_INSUFFICIENT_BUFFER", WERR_INSUFFICIENT_BUFFER }, + { "WERR_NO_SUCH_SHARE", WERR_NO_SUCH_SHARE }, + { "WERR_ALREADY_EXISTS", WERR_ALREADY_EXISTS }, + { "WERR_INVALID_PARAM", WERR_INVALID_PARAM }, + { "WERR_NOT_SUPPORTED", WERR_NOT_SUPPORTED }, + { "WERR_BAD_PASSWORD", WERR_BAD_PASSWORD }, + { "WERR_NOMEM", WERR_NOMEM }, + { "WERR_INVALID_NAME", WERR_INVALID_NAME }, + { "WERR_UNKNOWN_LEVEL", WERR_UNKNOWN_LEVEL }, + { "WERR_OBJECT_PATH_INVALID", WERR_OBJECT_PATH_INVALID }, + { "WERR_NO_MORE_ITEMS", WERR_NO_MORE_ITEMS }, + { "WERR_MORE_DATA", WERR_MORE_DATA }, + { "WERR_UNKNOWN_PRINTER_DRIVER", WERR_UNKNOWN_PRINTER_DRIVER }, + { "WERR_INVALID_PRINTER_NAME", WERR_INVALID_PRINTER_NAME }, + { "WERR_PRINTER_ALREADY_EXISTS", WERR_PRINTER_ALREADY_EXISTS }, + { "WERR_INVALID_DATATYPE", WERR_INVALID_DATATYPE }, + { "WERR_INVALID_ENVIRONMENT", WERR_INVALID_ENVIRONMENT }, + { "WERR_INVALID_FORM_SIZE", WERR_INVALID_FORM_SIZE }, + { "WERR_BUF_TOO_SMALL", WERR_BUF_TOO_SMALL }, + { "WERR_JOB_NOT_FOUND", WERR_JOB_NOT_FOUND }, + { "WERR_DEST_NOT_FOUND", WERR_DEST_NOT_FOUND }, + { "WERR_NOT_LOCAL_DOMAIN", WERR_NOT_LOCAL_DOMAIN }, + { "WERR_PRINTER_DRIVER_IN_USE", WERR_PRINTER_DRIVER_IN_USE }, + { "WERR_STATUS_MORE_ENTRIES ", WERR_STATUS_MORE_ENTRIES }, + { "WERR_DFS_NO_SUCH_VOL", WERR_DFS_NO_SUCH_VOL }, + { "WERR_DFS_NO_SUCH_SHARE", WERR_DFS_NO_SUCH_SHARE }, + { "WERR_DFS_NO_SUCH_SERVER", WERR_DFS_NO_SUCH_SERVER }, + { "WERR_DFS_INTERNAL_ERROR", WERR_DFS_INTERNAL_ERROR }, + { "WERR_DFS_CANT_CREATE_JUNCT", WERR_DFS_CANT_CREATE_JUNCT }, + { NULL, W_ERROR(0) } +}; + +/***************************************************************************** + returns a DOS error message. not amazingly helpful, but better than a number. + *****************************************************************************/ +char *dos_errstr(WERROR werror) +{ + static pstring msg; + int idx = 0; + + slprintf(msg, sizeof(msg), "DOS code 0x%08x", W_ERROR_V(werror)); + + while (dos_errs[idx].dos_errstr != NULL) { + if (W_ERROR_V(dos_errs[idx].werror) == + W_ERROR_V(werror)) + return dos_errs[idx].dos_errstr; + idx++; + } + + return msg; +} 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 *****************************************************************************/ diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index 4cd9a0ec91..aff3bdebed 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -3210,7 +3210,7 @@ WERROR get_a_printer(NT_PRINTER_INFO_LEVEL **pp_printer, uint32 level, fstring s break; } - DEBUG(10,("get_a_printer: [%s] level %u returning %s\n", sharename, (unsigned int)level, werror_str(result))); + DEBUG(10,("get_a_printer: [%s] level %u returning %s\n", sharename, (unsigned int)level, dos_errstr(result))); return result; } diff --git a/source3/rpc_parse/parse_prs.c b/source3/rpc_parse/parse_prs.c index 5d06cf7a7e..6d65d5cc7f 100644 --- a/source3/rpc_parse/parse_prs.c +++ b/source3/rpc_parse/parse_prs.c @@ -633,7 +633,7 @@ BOOL prs_werror(char *name, prs_struct *ps, int depth, WERROR *status) } DEBUG(5,("%s%04x %s: %s\n", tab_depth(depth), ps->data_offset, name, - werror_str(*status))); + dos_errstr(*status))); ps->data_offset += sizeof(uint32); diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index a861aa1905..850d428165 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -3858,12 +3858,12 @@ static WERROR construct_printer_driver_info_3(DRIVER_INFO_3 *info, int snum, fst ZERO_STRUCT(driver); status=get_a_printer(&printer, 2, lp_servicename(snum) ); - DEBUG(8,("construct_printer_driver_info_3: status: %s\n", werror_str(status))); + DEBUG(8,("construct_printer_driver_info_3: status: %s\n", dos_errstr(status))); if (!W_ERROR_IS_OK(status)) return WERR_INVALID_PRINTER_NAME; status=get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version); - DEBUG(8,("construct_printer_driver_info_3: status: %s\n", werror_str(status))); + DEBUG(8,("construct_printer_driver_info_3: status: %s\n", dos_errstr(status))); #if 0 /* JERRY */ @@ -3883,7 +3883,7 @@ static WERROR construct_printer_driver_info_3(DRIVER_INFO_3 *info, int snum, fst /* Yes - try again with a WinNT driver. */ version = 2; status=get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version); - DEBUG(8,("construct_printer_driver_info_3: status: %s\n", werror_str(status))); + DEBUG(8,("construct_printer_driver_info_3: status: %s\n", dos_errstr(status))); } #endif @@ -3981,12 +3981,12 @@ static WERROR construct_printer_driver_info_6(DRIVER_INFO_6 *info, int snum, fst ZERO_STRUCT(driver); status=get_a_printer(&printer, 2, lp_servicename(snum) ); - DEBUG(8,("construct_printer_driver_info_6: status: %s\n", werror_str(status))); + DEBUG(8,("construct_printer_driver_info_6: status: %s\n", dos_errstr(status))); if (!W_ERROR_IS_OK(status)) return WERR_INVALID_PRINTER_NAME; status=get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version); - DEBUG(8,("construct_printer_driver_info_6: status: %s\n", werror_str(status))); + DEBUG(8,("construct_printer_driver_info_6: status: %s\n", dos_errstr(status))); if (!W_ERROR_IS_OK(status)) { /* * Is this a W2k client ? @@ -4000,7 +4000,7 @@ static WERROR construct_printer_driver_info_6(DRIVER_INFO_6 *info, int snum, fst /* Yes - try again with a WinNT driver. */ version = 2; status=get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version); - DEBUG(8,("construct_printer_driver_info_6: status: %s\n", werror_str(status))); + DEBUG(8,("construct_printer_driver_info_6: status: %s\n", dos_errstr(status))); if (!W_ERROR_IS_OK(status)) { free_a_printer(&printer,2); return WERR_UNKNOWN_PRINTER_DRIVER; @@ -5957,7 +5957,7 @@ static WERROR enumports_level_1(NEW_BUFFER *buffer, uint32 offered, uint32 *need if(numlines) { if((ports=(PORT_INFO_1 *)malloc( numlines * sizeof(PORT_INFO_1) )) == NULL) { DEBUG(10,("Returning WERR_NOMEM [%s]\n", - werror_str(WERR_NOMEM))); + dos_errstr(WERR_NOMEM))); file_lines_free(qlines); return WERR_NOMEM; } -- cgit