From 7f8bc6a2d904bd5b5c056ec96a68ee928659324a Mon Sep 17 00:00:00 2001 From: Günther Deschner Date: Wed, 29 Oct 2008 23:21:06 +0100 Subject: errors: share dcerpc error function. Guenther --- librpc/rpc/dcerpc_error.c | 55 +++++++++++++++++++++++++++++++++++++++ source3/Makefile.in | 2 +- source3/include/proto.h | 4 +-- source3/libsmb/dcerpc_err.c | 55 --------------------------------------- source3/rpc_client/cli_pipe.c | 2 +- source3/rpc_parse/parse_prs.c | 2 +- source4/librpc/config.mk | 4 +-- source4/librpc/rpc/dcerpc_error.c | 55 --------------------------------------- 8 files changed, 62 insertions(+), 117 deletions(-) create mode 100644 librpc/rpc/dcerpc_error.c delete mode 100644 source3/libsmb/dcerpc_err.c delete mode 100644 source4/librpc/rpc/dcerpc_error.c diff --git a/librpc/rpc/dcerpc_error.c b/librpc/rpc/dcerpc_error.c new file mode 100644 index 0000000000..dbab783567 --- /dev/null +++ b/librpc/rpc/dcerpc_error.c @@ -0,0 +1,55 @@ +/* + Unix SMB/CIFS implementation. + + dcerpc fault functions + + Copyright (C) Stefan Metzmacher 2004 + + 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 3 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, see . +*/ + +#include "includes.h" +#include "librpc/rpc/dcerpc.h" + +struct dcerpc_fault_table { + const char *errstr; + uint32_t faultcode; +}; + +static const struct dcerpc_fault_table dcerpc_faults[] = +{ + { "DCERPC_FAULT_OP_RNG_ERROR", DCERPC_FAULT_OP_RNG_ERROR }, + { "DCERPC_FAULT_UNK_IF", DCERPC_FAULT_UNK_IF }, + { "DCERPC_FAULT_NDR", DCERPC_FAULT_NDR }, + { "DCERPC_FAULT_INVALID_TAG", DCERPC_FAULT_INVALID_TAG }, + { "DCERPC_FAULT_CONTEXT_MISMATCH", DCERPC_FAULT_CONTEXT_MISMATCH }, + { "DCERPC_FAULT_OTHER", DCERPC_FAULT_OTHER }, + { "DCERPC_FAULT_ACCESS_DENIED", DCERPC_FAULT_ACCESS_DENIED }, + + { NULL, 0} +}; + +_PUBLIC_ const char *dcerpc_errstr(TALLOC_CTX *mem_ctx, uint32_t fault_code) +{ + int idx = 0; + + while (dcerpc_faults[idx].errstr != NULL) { + if (dcerpc_faults[idx].faultcode == fault_code) { + return dcerpc_faults[idx].errstr; + } + idx++; + } + + return talloc_asprintf(mem_ctx, "DCERPC fault 0x%08x", fault_code); +} diff --git a/source3/Makefile.in b/source3/Makefile.in index eae7dad7a6..c737b32468 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -406,7 +406,7 @@ LIBNMB_OBJ = libsmb/unexpected.o libsmb/namecache.o libsmb/nmblib.o \ NTERR_OBJ = libsmb/nterr.o DOSERR_OBJ = libsmb/doserr.o ERRORMAP_OBJ = libsmb/errormap.o -DCE_RPC_ERR_OBJ = libsmb/dcerpc_err.o +DCE_RPC_ERR_OBJ = ../librpc/rpc/dcerpc_error.o LIBSMB_ERR_OBJ0 = $(NTERR_OBJ) $(DOSERR_OBJ) $(ERRORMAP_OBJ) $(DCE_RPC_ERR_OBJ) \ libsmb/smbdes.o libsmb/smbencrypt.o libsmb/ntlmssp_parse.o diff --git a/source3/include/proto.h b/source3/include/proto.h index f982f43a7f..65dda2ac3d 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -3072,9 +3072,9 @@ bool netlogon_creds_client_check(const struct dcinfo *dc, void netlogon_creds_client_step(struct dcinfo *dc, struct netr_Authenticator *next_cred_out); -/* The following definitions come from libsmb/dcerpc_err.c */ +/* The following definitions come from ../librpc/rpc/dcerpc_error.c */ -const char *dcerpc_errstr(uint32 fault_code); +const char *dcerpc_errstr(TALLOC_CTX *mem_ctx, uint32_t fault_code); /* The following definitions come from libsmb/doserr.c */ diff --git a/source3/libsmb/dcerpc_err.c b/source3/libsmb/dcerpc_err.c deleted file mode 100644 index 900b8d769f..0000000000 --- a/source3/libsmb/dcerpc_err.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Unix SMB/CIFS implementation. - * Copyright (C) Stefan Metzmacher 2004 - * - * 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 3 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, see . - */ - -#include "includes.h" - -struct dcerpc_fault_table { - const char *errstr; - uint32_t faultcode; -}; - -static const struct dcerpc_fault_table dcerpc_faults[] = -{ - { "DCERPC_FAULT_OP_RNG_ERROR", DCERPC_FAULT_OP_RNG_ERROR }, - { "DCERPC_FAULT_UNK_IF", DCERPC_FAULT_UNK_IF }, - { "DCERPC_FAULT_NDR", DCERPC_FAULT_NDR }, - { "DCERPC_FAULT_INVALID_TAG", DCERPC_FAULT_INVALID_TAG }, - { "DCERPC_FAULT_CONTEXT_MISMATCH", DCERPC_FAULT_CONTEXT_MISMATCH }, - { "DCERPC_FAULT_OTHER", DCERPC_FAULT_OTHER }, - { "DCERPC_FAULT_ACCESS_DENIED", DCERPC_FAULT_ACCESS_DENIED }, - - { NULL, 0} -}; - -const char *dcerpc_errstr(uint32 fault_code) -{ - char *result; - int idx = 0; - - while (dcerpc_faults[idx].errstr != NULL) { - if (dcerpc_faults[idx].faultcode == fault_code) { - return dcerpc_faults[idx].errstr; - } - idx++; - } - - result = talloc_asprintf(talloc_tos(), "DCERPC fault 0x%08x", - fault_code); - SMB_ASSERT(result != NULL); - return result; -} diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c index ca9d3392e7..f0c2f6709e 100644 --- a/source3/rpc_client/cli_pipe.c +++ b/source3/rpc_client/cli_pipe.c @@ -751,7 +751,7 @@ static NTSTATUS cli_pipe_validate_current_pdu(struct rpc_pipe_client *cli, RPC_H DEBUG(1, ("cli_pipe_validate_current_pdu: RPC fault " "code %s received from %s!\n", - dcerpc_errstr(NT_STATUS_V(fault_resp.status)), + dcerpc_errstr(debug_ctx(), NT_STATUS_V(fault_resp.status)), rpccli_pipe_txt(debug_ctx(), cli))); if (NT_STATUS_IS_OK(fault_resp.status)) { return NT_STATUS_UNSUCCESSFUL; diff --git a/source3/rpc_parse/parse_prs.c b/source3/rpc_parse/parse_prs.c index 5eb6c31ee6..504cebbb9d 100644 --- a/source3/rpc_parse/parse_prs.c +++ b/source3/rpc_parse/parse_prs.c @@ -812,7 +812,7 @@ bool prs_dcerpc_status(const char *name, prs_struct *ps, int depth, NTSTATUS *st } DEBUG(5,("%s%04x %s: %s\n", tab_depth(5,depth), ps->data_offset, name, - dcerpc_errstr(NT_STATUS_V(*status)))); + dcerpc_errstr(debug_ctx(), NT_STATUS_V(*status)))); ps->data_offset += sizeof(uint32); diff --git a/source4/librpc/config.mk b/source4/librpc/config.mk index a988dcf420..b2b9f2e7a7 100644 --- a/source4/librpc/config.mk +++ b/source4/librpc/config.mk @@ -613,8 +613,8 @@ dcerpc_VERSION = 0.0.1 dcerpc_SOVERSION = 0 dcerpc_OBJ_FILES = $(addprefix $(dcerpcsrcdir)/, dcerpc.o dcerpc_auth.o dcerpc_schannel.o dcerpc_util.o \ - dcerpc_error.o dcerpc_smb.o dcerpc_smb2.o dcerpc_sock.o dcerpc_connect.o dcerpc_secondary.o) \ - ../librpc/rpc/binding.o + dcerpc_smb.o dcerpc_smb2.o dcerpc_sock.o dcerpc_connect.o dcerpc_secondary.o) \ + ../librpc/rpc/binding.o ../librpc/rpc/dcerpc_error.o $(eval $(call proto_header_template,$(dcerpcsrcdir)/dcerpc_proto.h,$(dcerpc_OBJ_FILES:.o=.c))) diff --git a/source4/librpc/rpc/dcerpc_error.c b/source4/librpc/rpc/dcerpc_error.c deleted file mode 100644 index 6ea4563ae6..0000000000 --- a/source4/librpc/rpc/dcerpc_error.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - Unix SMB/CIFS implementation. - - dcerpc fault functions - - Copyright (C) Stefan Metzmacher 2004 - - 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 3 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, see . -*/ - -#include "includes.h" -#include "librpc/rpc/dcerpc.h" - -struct dcerpc_fault_table { - const char *errstr; - uint32_t faultcode; -}; - -static const struct dcerpc_fault_table dcerpc_faults[] = -{ - { "DCERPC_FAULT_OP_RNG_ERROR", DCERPC_FAULT_OP_RNG_ERROR }, - { "DCERPC_FAULT_UNK_IF", DCERPC_FAULT_UNK_IF }, - { "DCERPC_FAULT_NDR", DCERPC_FAULT_NDR }, - { "DCERPC_FAULT_INVALID_TAG", DCERPC_FAULT_INVALID_TAG }, - { "DCERPC_FAULT_CONTEXT_MISMATCH", DCERPC_FAULT_CONTEXT_MISMATCH }, - { "DCERPC_FAULT_OTHER", DCERPC_FAULT_OTHER }, - { "DCERPC_FAULT_ACCESS_DENIED", DCERPC_FAULT_ACCESS_DENIED }, - - { NULL, 0} -}; - -_PUBLIC_ const char *dcerpc_errstr(TALLOC_CTX *mem_ctx, uint32_t fault_code) -{ - int idx = 0; - - while (dcerpc_faults[idx].errstr != NULL) { - if (dcerpc_faults[idx].faultcode == fault_code) { - return dcerpc_faults[idx].errstr; - } - idx++; - } - - return talloc_asprintf(mem_ctx, "DCERPC fault 0x%08x", fault_code); -} -- cgit