diff options
-rw-r--r-- | librpc/rpc/binding.c | 2 | ||||
-rw-r--r-- | librpc/rpc/binding_handle.c | 1 | ||||
-rw-r--r-- | librpc/rpc/dcerpc_error.c | 1 | ||||
-rw-r--r-- | librpc/rpc/dcerpc_util.c | 1 | ||||
-rw-r--r-- | librpc/rpc/rpc_common.h | 101 | ||||
-rw-r--r-- | librpc/wscript_build | 5 | ||||
-rw-r--r-- | source3/wscript_build | 14 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc.c | 1 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_smb.c | 1 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_smb2.c | 1 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_sock.c | 1 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_util.c | 1 | ||||
-rwxr-xr-x | source4/librpc/wscript_build | 6 | ||||
-rw-r--r-- | source4/rpc_server/common/reply.c | 1 | ||||
-rw-r--r-- | source4/rpc_server/dcerpc_server.c | 1 | ||||
-rw-r--r-- | source4/rpc_server/dcesrv_auth.c | 1 | ||||
-rw-r--r-- | source4/torture/rpc/epmapper.c | 1 |
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 |