summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--librpc/rpc/binding.c2
-rw-r--r--librpc/rpc/binding_handle.c1
-rw-r--r--librpc/rpc/dcerpc_error.c1
-rw-r--r--librpc/rpc/dcerpc_util.c1
-rw-r--r--librpc/rpc/rpc_common.h101
-rw-r--r--librpc/wscript_build5
-rw-r--r--source3/wscript_build14
-rw-r--r--source4/librpc/rpc/dcerpc.c1
-rw-r--r--source4/librpc/rpc/dcerpc_smb.c1
-rw-r--r--source4/librpc/rpc/dcerpc_smb2.c1
-rw-r--r--source4/librpc/rpc/dcerpc_sock.c1
-rw-r--r--source4/librpc/rpc/dcerpc_util.c1
-rwxr-xr-xsource4/librpc/wscript_build6
-rw-r--r--source4/rpc_server/common/reply.c1
-rw-r--r--source4/rpc_server/dcerpc_server.c1
-rw-r--r--source4/rpc_server/dcesrv_auth.c1
-rw-r--r--source4/torture/rpc/epmapper.c1
17 files changed, 126 insertions, 14 deletions
diff --git a/librpc/rpc/binding.c b/librpc/rpc/binding.c
index b7c3a40a0d..2a0295b1e8 100644
--- a/librpc/rpc/binding.c
+++ b/librpc/rpc/binding.c
@@ -27,6 +27,8 @@
#include "librpc/gen_ndr/ndr_epmapper.h"
#include "librpc/gen_ndr/ndr_misc.h"
#include "librpc/rpc/dcerpc.h"
+#include "rpc_common.h"
+
#undef strcasecmp
#undef strncasecmp
diff --git a/librpc/rpc/binding_handle.c b/librpc/rpc/binding_handle.c
index 93c0fd4f00..9ad7a9bde8 100644
--- a/librpc/rpc/binding_handle.c
+++ b/librpc/rpc/binding_handle.c
@@ -23,6 +23,7 @@
#include <tevent.h>
#include "../lib/util/tevent_ntstatus.h"
#include "librpc/rpc/dcerpc.h"
+#include "rpc_common.h"
struct dcerpc_binding_handle {
void *private_data;
diff --git a/librpc/rpc/dcerpc_error.c b/librpc/rpc/dcerpc_error.c
index 17095e5057..7c98386664 100644
--- a/librpc/rpc/dcerpc_error.c
+++ b/librpc/rpc/dcerpc_error.c
@@ -21,6 +21,7 @@
#include "includes.h"
#include "librpc/rpc/dcerpc.h"
+#include "rpc_common.h"
struct dcerpc_fault_table {
const char *errstr;
diff --git a/librpc/rpc/dcerpc_util.c b/librpc/rpc/dcerpc_util.c
index 1db43df34a..a405ca8966 100644
--- a/librpc/rpc/dcerpc_util.c
+++ b/librpc/rpc/dcerpc_util.c
@@ -26,6 +26,7 @@
#include "lib/util/tevent_ntstatus.h"
#include "librpc/rpc/dcerpc.h"
#include "librpc/gen_ndr/ndr_dcerpc.h"
+#include "rpc_common.h"
/* we need to be able to get/set the fragment length without doing a full
decode */
diff --git a/librpc/rpc/rpc_common.h b/librpc/rpc/rpc_common.h
new file mode 100644
index 0000000000..3f5216bdec
--- /dev/null
+++ b/librpc/rpc/rpc_common.h
@@ -0,0 +1,101 @@
+#ifndef __DEFAULT_LIBRPC_RPCCOMMON_H__
+#define __DEFAULT_LIBRPC_RPCCOMMON_H__
+
+/* The following definitions come from ../librpc/rpc/dcerpc_error.c */
+
+
+/* The following definitions come from ../librpc/rpc/binding.c */
+
+const char *epm_floor_string(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor);
+const char *dcerpc_floor_get_rhs_data(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor);
+enum dcerpc_transport_t dcerpc_transport_by_endpoint_protocol(int prot);
+
+/* The following definitions come from ../librpc/rpc/dcerpc_util.c */
+
+void dcerpc_set_frag_length(DATA_BLOB *blob, uint16_t v);
+uint16_t dcerpc_get_frag_length(const DATA_BLOB *blob);
+void dcerpc_set_auth_length(DATA_BLOB *blob, uint16_t v);
+uint8_t dcerpc_get_endian_flag(DATA_BLOB *blob);
+
+/**
+* @brief Pull a dcerpc_auth structure, taking account of any auth
+* padding in the blob. For request/response packets we pass
+* the whole data blob, so auth_data_only must be set to false
+* as the blob contains data+pad+auth and no just pad+auth.
+*
+* @param pkt - The ncacn_packet strcuture
+* @param mem_ctx - The mem_ctx used to allocate dcerpc_auth elements
+* @param pkt_trailer - The packet trailer data, usually the trailing
+* auth_info blob, but in the request/response case
+* this is the stub_and_verifier blob.
+* @param auth - A preallocated dcerpc_auth *empty* structure
+* @param auth_length - The length of the auth trail, sum of auth header
+* lenght and pkt->auth_length
+* @param auth_data_only - Whether the pkt_trailer includes only the auth_blob
+* (+ padding) or also other data.
+*
+* @return - A NTSTATUS error code.
+*/
+NTSTATUS dcerpc_pull_auth_trailer(struct ncacn_packet *pkt,
+ TALLOC_CTX *mem_ctx,
+ DATA_BLOB *pkt_trailer,
+ struct dcerpc_auth *auth,
+ uint32_t *auth_length,
+ bool auth_data_only);
+struct tevent_req *dcerpc_read_ncacn_packet_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct tstream_context *stream);
+NTSTATUS dcerpc_read_ncacn_packet_recv(struct tevent_req *req,
+ TALLOC_CTX *mem_ctx,
+ struct ncacn_packet **pkt,
+ DATA_BLOB *buffer);
+
+/* The following definitions come from ../librpc/rpc/binding_handle.c */
+
+struct dcerpc_binding_handle *_dcerpc_binding_handle_create(TALLOC_CTX *mem_ctx,
+ const struct dcerpc_binding_handle_ops *ops,
+ const struct GUID *object,
+ const struct ndr_interface_table *table,
+ void *pstate,
+ size_t psize,
+ const char *type,
+ const char *location);
+void *_dcerpc_binding_handle_data(struct dcerpc_binding_handle *h);
+void dcerpc_binding_handle_set_sync_ev(struct dcerpc_binding_handle *h,
+ struct tevent_context *ev);
+bool dcerpc_binding_handle_is_connected(struct dcerpc_binding_handle *h);
+uint32_t dcerpc_binding_handle_set_timeout(struct dcerpc_binding_handle *h,
+ uint32_t timeout);
+struct tevent_req *dcerpc_binding_handle_raw_call_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct dcerpc_binding_handle *h,
+ const struct GUID *object,
+ uint32_t opnum,
+ uint32_t in_flags,
+ const uint8_t *in_data,
+ size_t in_length);
+NTSTATUS dcerpc_binding_handle_raw_call_recv(struct tevent_req *req,
+ TALLOC_CTX *mem_ctx,
+ uint8_t **out_data,
+ size_t *out_length,
+ uint32_t *out_flags);
+struct tevent_req *dcerpc_binding_handle_disconnect_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct dcerpc_binding_handle *h);
+NTSTATUS dcerpc_binding_handle_disconnect_recv(struct tevent_req *req);
+struct tevent_req *dcerpc_binding_handle_call_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct dcerpc_binding_handle *h,
+ const struct GUID *object,
+ const struct ndr_interface_table *table,
+ uint32_t opnum,
+ TALLOC_CTX *r_mem,
+ void *r_ptr);
+NTSTATUS dcerpc_binding_handle_call_recv(struct tevent_req *req);
+NTSTATUS dcerpc_binding_handle_call(struct dcerpc_binding_handle *h,
+ const struct GUID *object,
+ const struct ndr_interface_table *table,
+ uint32_t opnum,
+ TALLOC_CTX *r_mem,
+ void *r_ptr);
+#endif /* __DEFAULT_LIBRPC_RPCCOMMON_H__ */
diff --git a/librpc/wscript_build b/librpc/wscript_build
index 1c41af377f..354dec14b7 100644
--- a/librpc/wscript_build
+++ b/librpc/wscript_build
@@ -565,3 +565,8 @@ bld.SAMBA_LIBRARY('ndr',
depends_on='PIDL_MISC',
vnum='0.0.1'
)
+
+bld.SAMBA_LIBRARY('rpccommon',
+ source='rpc/dcerpc_error.c rpc/binding.c rpc/dcerpc_util.c rpc/binding_handle.c',
+ deps='ndr tevent NDR_DCERPC LIBTSOCKET',
+ private_library=True)
diff --git a/source3/wscript_build b/source3/wscript_build
index 1c8c2a15e8..0008bd016e 100644
--- a/source3/wscript_build
+++ b/source3/wscript_build
@@ -122,10 +122,6 @@ LIBNMB_SRC = '''libsmb/unexpected.c libsmb/namecache.c libsmb/nmblib.c
libsmb/namequery.c libsmb/conncache.c
libads/dns.c libads/sitename_cache.c'''
-DCE_RPC_ERR_SRC = '../librpc/rpc/dcerpc_error.c'
-
-LIBSMB_ERR_SRC = '''${DCE_RPC_ERR_SRC}'''
-
LIBNTLMSSP_SRC = '''
libsmb/ntlmssp.c
libsmb/ntlmssp_wrap.c'''
@@ -152,10 +148,8 @@ LIBMSRPC_SRC = '''
rpc_client/rpc_transport_np.c
rpc_client/rpc_transport_sock.c
rpc_client/rpc_transport_tstream.c
- ../librpc/rpc/binding.c
- ../librpc/rpc/dcerpc_util.c
librpc/rpc/dcerpc_helpers.c
- ../librpc/rpc/binding_handle.c'''
+ '''
#
# registry-related objects
@@ -684,7 +678,7 @@ bld.SAMBA3_SUBSYSTEM('msrpc3',
source='${LIBMSRPC_SRC}',
deps='''ndr ndr-util NDR_SECURITY NDR_DCERPC NDR_SCHANNEL
RPC_NDR_EPMAPPER COMMON_SCHANNEL LIBCLI_AUTH
- LIBTSOCKET krb5''',
+ LIBTSOCKET krb5 rpccommon''',
vars=locals())
bld.SAMBA3_SUBSYSTEM('LIBMSRPC_GEN',
@@ -773,8 +767,8 @@ bld.SAMBA3_SUBSYSTEM('LIB_NONSMBD',
vars=locals())
bld.SAMBA3_SUBSYSTEM('LIBSMB_ERR',
- source=LIBSMB_ERR_SRC,
- deps='errors3 SECRETS3 ldap lber MSRPC_PARSE LIBCLI_AUTH',
+ source='',
+ deps='errors3 SECRETS3 ldap lber MSRPC_PARSE LIBCLI_AUTH rpccommon',
vars=locals())
bld.SAMBA3_SUBSYSTEM('LIBNTLMSSP',
diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c
index 5a31b6a2bb..3b67512f91 100644
--- a/source4/librpc/rpc/dcerpc.c
+++ b/source4/librpc/rpc/dcerpc.c
@@ -31,6 +31,7 @@
#include "auth/gensec/gensec.h"
#include "param/param.h"
#include "lib/util/tevent_ntstatus.h"
+#include "librpc/rpc/rpc_common.h"
_PUBLIC_ NTSTATUS dcerpc_init(struct loadparm_context *lp_ctx)
{
diff --git a/source4/librpc/rpc/dcerpc_smb.c b/source4/librpc/rpc/dcerpc_smb.c
index 947a9c5f65..5a404556c8 100644
--- a/source4/librpc/rpc/dcerpc_smb.c
+++ b/source4/librpc/rpc/dcerpc_smb.c
@@ -25,6 +25,7 @@
#include "libcli/composite/composite.h"
#include "librpc/rpc/dcerpc.h"
#include "librpc/rpc/dcerpc_proto.h"
+#include "librpc/rpc/rpc_common.h"
/* transport private information used by SMB pipe transport */
struct smb_private {
diff --git a/source4/librpc/rpc/dcerpc_smb2.c b/source4/librpc/rpc/dcerpc_smb2.c
index fbd847680f..46dc379f80 100644
--- a/source4/librpc/rpc/dcerpc_smb2.c
+++ b/source4/librpc/rpc/dcerpc_smb2.c
@@ -27,6 +27,7 @@
#include "libcli/raw/ioctl.h"
#include "librpc/rpc/dcerpc.h"
#include "librpc/rpc/dcerpc_proto.h"
+#include "librpc/rpc/rpc_common.h"
/* transport private information used by SMB2 pipe transport */
struct smb2_private {
diff --git a/source4/librpc/rpc/dcerpc_sock.c b/source4/librpc/rpc/dcerpc_sock.c
index 4ab8c35091..782710c6c4 100644
--- a/source4/librpc/rpc/dcerpc_sock.c
+++ b/source4/librpc/rpc/dcerpc_sock.c
@@ -29,6 +29,7 @@
#include "librpc/rpc/dcerpc.h"
#include "librpc/rpc/dcerpc_proto.h"
#include "libcli/resolve/resolve.h"
+#include "librpc/rpc/rpc_common.h"
/* transport private information used by general socket pipe transports */
struct sock_private {
diff --git a/source4/librpc/rpc/dcerpc_util.c b/source4/librpc/rpc/dcerpc_util.c
index d27b0f3f5b..a84e967020 100644
--- a/source4/librpc/rpc/dcerpc_util.c
+++ b/source4/librpc/rpc/dcerpc_util.c
@@ -31,6 +31,7 @@
#include "librpc/rpc/dcerpc_proto.h"
#include "auth/credentials/credentials.h"
#include "param/param.h"
+#include "librpc/rpc/rpc_common.h"
/*
find a dcerpc call on an interface by name
diff --git a/source4/librpc/wscript_build b/source4/librpc/wscript_build
index c9c4a22508..0d6589ec80 100755
--- a/source4/librpc/wscript_build
+++ b/source4/librpc/wscript_build
@@ -154,11 +154,9 @@ bld.SAMBA_SUBSYSTEM('RPC_NDR_WINSIF',
bld.SAMBA_LIBRARY('dcerpc',
source='''rpc/dcerpc.c rpc/dcerpc_auth.c rpc/dcerpc_schannel.c
rpc/dcerpc_util.c rpc/dcerpc_smb.c rpc/dcerpc_smb2.c rpc/dcerpc_sock.c
- rpc/dcerpc_connect.c rpc/dcerpc_secondary.c ../../librpc/rpc/binding.c
- ../../librpc/rpc/dcerpc_error.c ../../librpc/rpc/dcerpc_util.c
- ../../librpc/rpc/binding_handle.c''',
+ rpc/dcerpc_connect.c rpc/dcerpc_secondary.c''',
pc_files='dcerpc.pc',
- deps='samba_socket LIBCLI_RESOLVE LIBCLI_SMB LIBCLI_SMB2 ndr NDR_DCERPC RPC_NDR_EPMAPPER NDR_SCHANNEL RPC_NDR_NETLOGON RPC_NDR_MGMT gensec LIBCLI_AUTH LIBCLI_RAW LP_RESOLVE UTIL_TEVENT',
+ deps='samba_socket LIBCLI_RESOLVE LIBCLI_SMB LIBCLI_SMB2 ndr NDR_DCERPC RPC_NDR_EPMAPPER NDR_SCHANNEL RPC_NDR_NETLOGON RPC_NDR_MGMT gensec LIBCLI_AUTH LIBCLI_RAW LP_RESOLVE UTIL_TEVENT rpccommon',
autoproto='rpc/dcerpc_proto.h',
public_deps='credentials tevent talloc',
public_headers='rpc/dcerpc.h ../../librpc/gen_ndr/mgmt.h ../../librpc/gen_ndr/ndr_mgmt.h ../../librpc/gen_ndr/ndr_mgmt_c.h ../../librpc/gen_ndr/epmapper.h ../../librpc/gen_ndr/ndr_epmapper.h ../../librpc/gen_ndr/ndr_epmapper_c.h',
diff --git a/source4/rpc_server/common/reply.c b/source4/rpc_server/common/reply.c
index 83660c209b..92bd552ad1 100644
--- a/source4/rpc_server/common/reply.c
+++ b/source4/rpc_server/common/reply.c
@@ -38,6 +38,7 @@
#include "lib/socket/socket.h"
#include "smbd/process_model.h"
#include "lib/messaging/irpc.h"
+#include "librpc/rpc/rpc_common.h"
/*
diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c
index 1371ad9b36..fd26740ddc 100644
--- a/source4/rpc_server/dcerpc_server.c
+++ b/source4/rpc_server/dcerpc_server.c
@@ -38,6 +38,7 @@
#include "lib/socket/socket.h"
#include "smbd/process_model.h"
#include "lib/messaging/irpc.h"
+#include "librpc/rpc/rpc_common.h"
/* this is only used when the client asks for an unknown interface */
#define DUMMY_ASSOC_GROUP 0x0FFFFFFF
diff --git a/source4/rpc_server/dcesrv_auth.c b/source4/rpc_server/dcesrv_auth.c
index 4c91fcb392..1e6aa24c82 100644
--- a/source4/rpc_server/dcesrv_auth.c
+++ b/source4/rpc_server/dcesrv_auth.c
@@ -30,6 +30,7 @@
#include "auth/gensec/gensec.h"
#include "auth/auth.h"
#include "param/param.h"
+#include "librpc/rpc/rpc_common.h"
/*
parse any auth information from a dcerpc bind request
diff --git a/source4/torture/rpc/epmapper.c b/source4/torture/rpc/epmapper.c
index 94e4652acd..fad6abecf7 100644
--- a/source4/torture/rpc/epmapper.c
+++ b/source4/torture/rpc/epmapper.c
@@ -24,6 +24,7 @@
#include "librpc/rpc/dcerpc_proto.h"
#include "torture/rpc/torture_rpc.h"
#include "lib/util/util_net.h"
+#include "librpc/rpc/rpc_common.h"
/*
display any protocol tower