summaryrefslogtreecommitdiff
path: root/source4/rpc_server
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2008-05-19 11:40:25 +1000
committerAndrew Tridgell <tridge@samba.org>2008-05-19 11:40:25 +1000
commit03eb236f20e6efef9993e8beabfbae16787f32fb (patch)
tree40de32d36e412da0f028cc2822f47555ff8d0ffc /source4/rpc_server
parent66cbf7eb59ab4a29dca1d30850c9aeb35a598b3d (diff)
parent022ab33222539276272b7399a5df310e1c548ca0 (diff)
downloadsamba-03eb236f20e6efef9993e8beabfbae16787f32fb.tar.gz
samba-03eb236f20e6efef9993e8beabfbae16787f32fb.tar.bz2
samba-03eb236f20e6efef9993e8beabfbae16787f32fb.zip
Merge commit 'origin/v4-0-test' into vfs_smb2
(This used to be commit 733937e87a1adcc19492ea2bd138e705701901b6)
Diffstat (limited to 'source4/rpc_server')
-rw-r--r--source4/rpc_server/config.mk50
-rw-r--r--source4/rpc_server/dcerpc_server.c12
2 files changed, 40 insertions, 22 deletions
diff --git a/source4/rpc_server/config.mk b/source4/rpc_server/config.mk
index 974d12c882..6b1813544e 100644
--- a/source4/rpc_server/config.mk
+++ b/source4/rpc_server/config.mk
@@ -3,14 +3,15 @@
################################################
# Start SUBSYSTEM DCERPC_COMMON
[SUBSYSTEM::DCERPC_COMMON]
-PRIVATE_PROTO_HEADER = common/proto.h
#
# End SUBSYSTEM DCERPC_COMMON
################################################
-DCERPC_COMMON_OBJ_FILES = $(addprefix rpc_server/common/, server_info.o share_info.o)
+DCERPC_COMMON_OBJ_FILES = $(addprefix $(rpc_serversrcdir)/common/, server_info.o share_info.o)
-PUBLIC_HEADERS += rpc_server/common/common.h
+$(eval $(call proto_header_template,$(rpc_serversrcdir)/common/proto.h,$(DCERPC_COMMON_OBJ_FILES:.o=.c)))
+
+PUBLIC_HEADERS += $(rpc_serversrcdir)/common/common.h
################################################
# Start MODULE dcerpc_rpcecho
@@ -21,7 +22,7 @@ PRIVATE_DEPENDENCIES = NDR_ECHO
# End MODULE dcerpc_rpcecho
################################################
-dcerpc_rpcecho_OBJ_FILES = rpc_server/echo/rpc_echo.o
+dcerpc_rpcecho_OBJ_FILES = $(rpc_serversrcdir)/echo/rpc_echo.o
################################################
# Start MODULE dcerpc_epmapper
@@ -32,7 +33,7 @@ PRIVATE_DEPENDENCIES = NDR_EPMAPPER
# End MODULE dcerpc_epmapper
################################################
-dcerpc_epmapper_OBJ_FILES = rpc_server/epmapper/rpc_epmapper.o
+dcerpc_epmapper_OBJ_FILES = $(rpc_serversrcdir)/epmapper/rpc_epmapper.o
################################################
# Start MODULE dcerpc_remote
@@ -44,20 +45,22 @@ PRIVATE_DEPENDENCIES = \
# End MODULE dcerpc_remote
################################################
-dcerpc_remote_OBJ_FILES = rpc_server/remote/dcesrv_remote.o
+dcerpc_remote_OBJ_FILES = $(rpc_serversrcdir)/remote/dcesrv_remote.o
################################################
# Start MODULE dcerpc_srvsvc
[MODULE::dcerpc_srvsvc]
INIT_FUNCTION = dcerpc_server_srvsvc_init
-PRIVATE_PROTO_HEADER = srvsvc/proto.h
SUBSYSTEM = DCESRV
PRIVATE_DEPENDENCIES = \
DCERPC_COMMON NDR_SRVSVC share
# End MODULE dcerpc_srvsvc
################################################
-dcerpc_srvsvc_OBJ_FILES = $(addprefix rpc_server/srvsvc/, dcesrv_srvsvc.o srvsvc_ntvfs.o)
+
+dcerpc_srvsvc_OBJ_FILES = $(addprefix $(rpc_serversrcdir)/srvsvc/, dcesrv_srvsvc.o srvsvc_ntvfs.o)
+
+$(eval $(call proto_header_template,$(rpc_serversrcdir)/srvsvc/proto.h,$(dcerpc_srvsvc_OBJ_FILES:.o=.c)))
################################################
# Start MODULE dcerpc_wkssvc
@@ -69,7 +72,7 @@ PRIVATE_DEPENDENCIES = \
# End MODULE dcerpc_wkssvc
################################################
-dcerpc_wkssvc_OBJ_FILES = rpc_server/wkssvc/dcesrv_wkssvc.o
+dcerpc_wkssvc_OBJ_FILES = $(rpc_serversrcdir)/wkssvc/dcesrv_wkssvc.o
################################################
# Start MODULE dcerpc_unixinfo
@@ -85,13 +88,12 @@ PRIVATE_DEPENDENCIES = \
# End MODULE dcerpc_unixinfo
################################################
-dcerpc_unixinfo_OBJ_FILES = rpc_server/unixinfo/dcesrv_unixinfo.o
+dcerpc_unixinfo_OBJ_FILES = $(rpc_serversrcdir)/unixinfo/dcesrv_unixinfo.o
################################################
# Start MODULE dcesrv_samr
[MODULE::dcesrv_samr]
INIT_FUNCTION = dcerpc_server_samr_init
-PRIVATE_PROTO_HEADER = samr/proto.h
SUBSYSTEM = DCESRV
PRIVATE_DEPENDENCIES = \
SAMDB \
@@ -100,7 +102,9 @@ PRIVATE_DEPENDENCIES = \
# End MODULE dcesrv_samr
################################################
-dcesrv_samr_OBJ_FILES = $(addprefix rpc_server/samr/, dcesrv_samr.o samr_password.o)
+dcesrv_samr_OBJ_FILES = $(addprefix $(rpc_serversrcdir)/samr/, dcesrv_samr.o samr_password.o)
+
+$(eval $(call proto_header_template,$(rpc_serversrcdir)/samr/proto.h,$(dcesrv_samr_OBJ_FILES:.o=.c)))
################################################
# Start MODULE dcerpc_winreg
@@ -113,7 +117,7 @@ PRIVATE_DEPENDENCIES = \
# End MODULE dcerpc_winreg
################################################
-dcerpc_winreg_OBJ_FILES = rpc_server/winreg/rpc_winreg.o
+dcerpc_winreg_OBJ_FILES = $(rpc_serversrcdir)/winreg/rpc_winreg.o
################################################
# Start MODULE dcerpc_netlogon
@@ -128,14 +132,13 @@ PRIVATE_DEPENDENCIES = \
# End MODULE dcerpc_netlogon
################################################
-dcerpc_netlogon_OBJ_FILES = rpc_server/netlogon/dcerpc_netlogon.o
+dcerpc_netlogon_OBJ_FILES = $(rpc_serversrcdir)/netlogon/dcerpc_netlogon.o
################################################
# Start MODULE dcerpc_lsa
[MODULE::dcerpc_lsarpc]
INIT_FUNCTION = dcerpc_server_lsa_init
SUBSYSTEM = DCESRV
-PRIVATE_PROTO_HEADER= lsa/proto.h
PRIVATE_DEPENDENCIES = \
SAMDB \
DCERPC_COMMON \
@@ -145,7 +148,9 @@ PRIVATE_DEPENDENCIES = \
# End MODULE dcerpc_lsa
################################################
-dcerpc_lsarpc_OBJ_FILES = $(addprefix rpc_server/lsa/, dcesrv_lsa.o lsa_init.o lsa_lookup.o)
+dcerpc_lsarpc_OBJ_FILES = $(addprefix $(rpc_serversrcdir)/lsa/, dcesrv_lsa.o lsa_init.o lsa_lookup.o)
+
+$(eval $(call proto_header_template,$(rpc_serversrcdir)/lsa/proto.h,$(dcerpc_lsarpc_OBJ_FILES:.o=.c)))
################################################
@@ -162,7 +167,7 @@ PRIVATE_DEPENDENCIES = \
# End MODULE dcerpc_spoolss
################################################
-dcerpc_spoolss_OBJ_FILES = rpc_server/spoolss/dcesrv_spoolss.o
+dcerpc_spoolss_OBJ_FILES = $(rpc_serversrcdir)/spoolss/dcesrv_spoolss.o
################################################
# Start MODULE dcerpc_drsuapi
@@ -176,31 +181,32 @@ PRIVATE_DEPENDENCIES = \
# End MODULE dcerpc_drsuapi
################################################
-dcerpc_drsuapi_OBJ_FILES = rpc_server/drsuapi/dcesrv_drsuapi.o
+dcerpc_drsuapi_OBJ_FILES = $(rpc_serversrcdir)/drsuapi/dcesrv_drsuapi.o
################################################
# Start SUBSYSTEM dcerpc_server
[SUBSYSTEM::dcerpc_server]
-PRIVATE_PROTO_HEADER = dcerpc_server_proto.h
PRIVATE_DEPENDENCIES = \
LIBCLI_AUTH \
LIBNDR \
dcerpc
-dcerpc_server_OBJ_FILES = $(addprefix rpc_server/, \
+dcerpc_server_OBJ_FILES = $(addprefix $(rpc_serversrcdir)/, \
dcerpc_server.o \
dcesrv_auth.o \
dcesrv_mgmt.o \
handles.o)
+$(eval $(call proto_header_template,$(rpc_serversrcdir)/dcerpc_server_proto.h,$(dcerpc_server_OBJ_FILES:.o=.c)))
+
# End SUBSYSTEM DCERPC
################################################
-PUBLIC_HEADERS += rpc_server/dcerpc_server.h
+PUBLIC_HEADERS += $(rpc_serversrcdir)/dcerpc_server.h
[MODULE::DCESRV]
INIT_FUNCTION = server_service_rpc_init
SUBSYSTEM = smbd
PRIVATE_DEPENDENCIES = dcerpc_server
-DCESRV_OBJ_FILES = rpc_server/service_rpc.o
+DCESRV_OBJ_FILES = $(rpc_serversrcdir)/service_rpc.o
diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c
index 1962a97d5b..e0351bb259 100644
--- a/source4/rpc_server/dcerpc_server.c
+++ b/source4/rpc_server/dcerpc_server.c
@@ -445,6 +445,7 @@ static NTSTATUS dcesrv_fault(struct dcesrv_call_state *call, uint32_t fault_code
{
struct ncacn_packet pkt;
struct data_blob_list_item *rep;
+ uint8_t zeros[4];
NTSTATUS status;
/* setup a bind_ack */
@@ -458,6 +459,9 @@ static NTSTATUS dcesrv_fault(struct dcesrv_call_state *call, uint32_t fault_code
pkt.u.fault.cancel_count = 0;
pkt.u.fault.status = fault_code;
+ ZERO_STRUCT(zeros);
+ pkt.u.fault._pad = data_blob_const(zeros, sizeof(zeros));
+
rep = talloc(call, struct data_blob_list_item);
if (!rep) {
return NT_STATUS_NO_MEMORY;
@@ -684,6 +688,7 @@ static NTSTATUS dcesrv_alter_new_context(struct dcesrv_call_state *call, uint32_
struct dcesrv_connection_context *context;
const struct dcesrv_interface *iface;
struct GUID uuid, *transfer_syntax_uuid;
+ NTSTATUS status;
if_version = call->pkt.u.alter.ctx_list[0].abstract_syntax.if_version;
uuid = call->pkt.u.alter.ctx_list[0].abstract_syntax.uuid;
@@ -717,6 +722,13 @@ static NTSTATUS dcesrv_alter_new_context(struct dcesrv_call_state *call, uint32_
DLIST_ADD(call->conn->contexts, context);
call->context = context;
+ if (iface) {
+ status = iface->bind(call, iface);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+ }
+
return NT_STATUS_OK;
}