Rev 11337: Merge upstream in file:///home/jelmer/bzr.samba/4.0-debian/

Jelmer Vernooij jelmer at samba.org
Wed Mar 14 00:49:30 GMT 2007


At file:///home/jelmer/bzr.samba/4.0-debian/

------------------------------------------------------------
revno: 11337
revision-id: jelmer at samba.org-20070314004908-5sp56w25mdcchc25
parent: jelmer at samba.org-20070313220806-dy2c6heftmkku0tt
parent: svn-v2:21837 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 4.0-debian
timestamp: Wed 2007-03-14 01:49:08 +0100
message:
  Merge upstream
modified:
  debian/libsamba-dev.install    svn-v2:1044 at fc4039ab-9d04-0410-8cac-899223bdd6b0-branches%2fsamba4-libsamba%2ddev.install
  debian/libsamba0.install       svn-v2:1044 at fc4039ab-9d04-0410-8cac-899223bdd6b0-branches%2fsamba4-libsamba0.install
  source/lib/registry/registry.h svn-v2:10026 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2flib%2fregistry%2fregistry.h
  source/librpc/config.mk        svn-v2:3433 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2flibrpc%2fconfig.mk
  source/rpc_server/dcerpc_server.c svn-v2:6 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2frpc_server%2fdcerpc_server.c
  source/rpc_server/dcerpc_server.h svn-v2:6 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2frpc_server%2fdcerpc_server.h
  source/script/tests/mk-openldap.sh svn-v2:21069 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fscript%2ftests%2fmk%2dopenldap.sh
  source/torture/config.mk       svn-v2:860 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2ftorture%2fconfig.mk
    ------------------------------------------------------------
    revno: 11321.1.419
    merged: svn-v2:21837 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0
    parent: svn-v2:21836 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0
    parent: jelmer at samba.org-20070314004236-61z780bclp4np4o0
    committer: jelmer
    timestamp: Wed 2007-03-14 00:44:29 +0000
    message:
      Make dcerpc_mgmt a separate library again, as the linker leaves it out when it's part of dcerpc.
        ------------------------------------------------------------
        revno: 11321.1.418.1.1
        merged: jelmer at samba.org-20070314004236-61z780bclp4np4o0
        parent: svn-v2:21836 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0
        committer: Jelmer Vernooij <jelmer at samba.org>
        branch nick: SAMBA_4_0
        timestamp: Wed 2007-03-14 01:42:36 +0100
        message:
          Make dcerpc_mgmt a separate library again, as the linker leaves it out when it's part of dcerpc.
    ------------------------------------------------------------
    revno: 11321.1.418
    merged: svn-v2:21836 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0
    parent: svn-v2:21835 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0
    committer: abartlet
    timestamp: Tue 2007-03-13 23:16:09 +0000
    message:
      Assume that if an OpenLDAP system is 'modular' then everything is a
      module, so we have to bring in syncprov too.
      
      Andrew Bartlett
    ------------------------------------------------------------
    revno: 11321.1.417
    merged: svn-v2:21835 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0
    parent: svn-v2:21834 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0
    committer: tridge
    timestamp: Tue 2007-03-13 22:58:23 +0000
    message:
      
      fixed a rpc server bug where we failed to remove a call from one
      linked list when moving it to another. This could cause a valgrind
      error under the RPC-SCANNER test.
=== modified file 'debian/libsamba-dev.install'
--- a/debian/libsamba-dev.install	2007-03-13 21:50:58 +0000
+++ b/debian/libsamba-dev.install	2007-03-14 00:49:08 +0000
@@ -102,6 +102,7 @@
 usr/lib/pkgconfig/dcerpc_atsvc.pc
 usr/lib/pkgconfig/dcerpc_samr.pc
 usr/lib/pkgconfig/dcerpc_svcctl.pc
+usr/lib/pkgconfig/dcerpc_mgmt.pc
 usr/lib/pkgconfig/samba-net.pc
 usr/lib/pkgconfig/socket_wrapper.pc
 usr/lib/pkgconfig/cli_wrepl.pc
@@ -121,6 +122,7 @@
 usr/lib/libsamba3.so
 usr/lib/libdcerpc_svcctl.so
 usr/lib/libdcerpc_samr.so
+usr/lib/libdcerpc_mgmt.so
 usr/lib/libtorture.so
 usr/lib/libcli_wrepl.so
 usr/lib/libcli_smb.so

=== modified file 'debian/libsamba0.install'
--- a/debian/libsamba0.install	2007-03-13 21:50:58 +0000
+++ b/debian/libsamba0.install	2007-03-14 00:49:08 +0000
@@ -10,6 +10,7 @@
 usr/lib/libtorture.so.*
 usr/lib/libdcerpc_samr.so.*
 usr/lib/libdcerpc_svcctl.so.*
+usr/lib/libdcerpc_mgmt.so.*
 usr/lib/libwinbind-client.so.*
 usr/lib/libsmbcalls.so.*
 usr/lib/libdcerpc_atsvc.so.*

=== modified file 'source/lib/registry/registry.h'
--- a/source/lib/registry/registry.h	2007-03-13 20:44:14 +0000
+++ b/source/lib/registry/registry.h	2007-03-14 00:44:29 +0000
@@ -183,6 +183,10 @@
 struct auth_session_info;
 struct event_context;
 
+#ifndef _PUBLIC_
+#define _PUBLIC_
+#endif
+
 _PUBLIC_ WERROR reg_open_local (TALLOC_CTX *mem_ctx, 
 				struct registry_context **ctx, 
 				struct auth_session_info *session_info, 

=== modified file 'source/librpc/config.mk'
--- a/source/librpc/config.mk	2007-03-13 20:51:53 +0000
+++ b/source/librpc/config.mk	2007-03-14 00:49:08 +0000
@@ -412,9 +412,12 @@
 OBJ_FILES = gen_ndr/ndr_initshutdown_c.o
 PUBLIC_DEPENDENCIES = dcerpc NDR_INITSHUTDOWN
 
-[SUBSYSTEM::RPC_NDR_MGMT]
+[LIBRARY::dcerpc_mgmt]
 OBJ_FILES = gen_ndr/ndr_mgmt_c.o
 PRIVATE_DEPENDENCIES = NDR_MGMT
+VERSION = 0.0.1
+SO_VERSION = 0
+DESCRIPTION = DCE/RPC client library - MGMT
 
 [SUBSYSTEM::RPC_NDR_PROTECTED_STORAGE]
 OBJ_FILES = gen_ndr/ndr_protected_storage_c.o
@@ -483,7 +486,7 @@
 		rpc/dcerpc_connect.o
 PRIVATE_DEPENDENCIES = \
 		samba-socket LIBCLI_RESOLVE LIBCLI_SMB LIBCLI_SMB2 \
-		LIBNDR NDR_DCERPC RPC_NDR_EPMAPPER RPC_NDR_MGMT \
+		LIBNDR NDR_DCERPC RPC_NDR_EPMAPPER \
 		NDR_SCHANNEL RPC_NDR_NETLOGON \
 		gensec LIBCLI_AUTH LIBCLI_RAW CREDENTIALS
 # End SUBSYSTEM dcerpc

=== modified file 'source/rpc_server/dcerpc_server.c'
--- a/source/rpc_server/dcerpc_server.c	2007-02-28 17:02:28 +0000
+++ b/source/rpc_server/dcerpc_server.c	2007-03-13 22:58:23 +0000
@@ -401,6 +401,43 @@
 }
 
 /*
+  move a call from an existing linked list to the specified list. This
+  prevents bugs where we forget to remove the call from a previous
+  list when moving it.
+ */
+static void dcesrv_call_set_list(struct dcesrv_call_state *call, 
+				 enum dcesrv_call_list list)
+{
+	switch (call->list) {
+	case DCESRV_LIST_NONE:
+		break;
+	case DCESRV_LIST_CALL_LIST:
+		DLIST_REMOVE(call->conn->call_list, call);
+		break;
+	case DCESRV_LIST_FRAGMENTED_CALL_LIST:
+		DLIST_REMOVE(call->conn->incoming_fragmented_call_list, call);
+		break;
+	case DCESRV_LIST_PENDING_CALL_LIST:
+		DLIST_REMOVE(call->conn->pending_call_list, call);
+		break;
+	}
+	call->list = list;
+	switch (list) {
+	case DCESRV_LIST_NONE:
+		break;
+	case DCESRV_LIST_CALL_LIST:
+		DLIST_ADD_END(call->conn->call_list, call, struct dcesrv_call_state *);
+		break;
+	case DCESRV_LIST_FRAGMENTED_CALL_LIST:
+		DLIST_ADD_END(call->conn->incoming_fragmented_call_list, call, struct dcesrv_call_state *);
+		break;
+	case DCESRV_LIST_PENDING_CALL_LIST:
+		DLIST_ADD_END(call->conn->pending_call_list, call, struct dcesrv_call_state *);
+		break;
+	}
+}
+
+/*
   return a dcerpc fault
 */
 static NTSTATUS dcesrv_fault(struct dcesrv_call_state *call, uint32_t fault_code)
@@ -433,7 +470,7 @@
 	dcerpc_set_frag_length(&rep->blob, rep->blob.length);
 
 	DLIST_ADD_END(call->replies, rep, struct data_blob_list_item *);
-	DLIST_ADD_END(call->conn->call_list, call, struct dcesrv_call_state *);
+	dcesrv_call_set_list(call, DCESRV_LIST_CALL_LIST);
 
 	return NT_STATUS_OK;	
 }
@@ -472,7 +509,7 @@
 	dcerpc_set_frag_length(&rep->blob, rep->blob.length);
 
 	DLIST_ADD_END(call->replies, rep, struct data_blob_list_item *);
-	DLIST_ADD_END(call->conn->call_list, call, struct dcesrv_call_state *);
+	dcesrv_call_set_list(call, DCESRV_LIST_CALL_LIST);
 
 	return NT_STATUS_OK;	
 }
@@ -612,7 +649,7 @@
 	dcerpc_set_frag_length(&rep->blob, rep->blob.length);
 
 	DLIST_ADD_END(call->replies, rep, struct data_blob_list_item *);
-	DLIST_ADD_END(call->conn->call_list, call, struct dcesrv_call_state *);
+	dcesrv_call_set_list(call, DCESRV_LIST_CALL_LIST);
 
 	return NT_STATUS_OK;
 }
@@ -750,7 +787,7 @@
 	dcerpc_set_frag_length(&rep->blob, rep->blob.length);
 
 	DLIST_ADD_END(call->replies, rep, struct data_blob_list_item *);
-	DLIST_ADD_END(call->conn->call_list, call, struct dcesrv_call_state *);
+	dcesrv_call_set_list(call, DCESRV_LIST_CALL_LIST);
 
 	return NT_STATUS_OK;
 }
@@ -814,7 +851,7 @@
 	}
 
 	/* add the call to the pending list */
-	DLIST_ADD_END(call->conn->pending_call_list, call, struct dcesrv_call_state *);
+	dcesrv_call_set_list(call, DCESRV_LIST_PENDING_CALL_LIST);
 
 	if (call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
 		return NT_STATUS_OK;
@@ -905,8 +942,7 @@
 	} while (stub.length != 0);
 
 	/* move the call from the pending to the finished calls list */
-	DLIST_REMOVE(call->conn->pending_call_list, call);
-	DLIST_ADD_END(call->conn->call_list, call, struct dcesrv_call_state *);
+	dcesrv_call_set_list(call, DCESRV_LIST_CALL_LIST);
 
 	if (call->conn->call_list && call->conn->call_list->replies) {
 		if (call->conn->transport.report_output_data) {
@@ -968,6 +1004,15 @@
 }
 
 /*
+  remove the call from the right list when freed
+ */
+static int dcesrv_call_dequeue(struct dcesrv_call_state *call)
+{
+	dcesrv_call_set_list(call, DCESRV_LIST_NONE);
+	return 0;
+}
+
+/*
   process some input to a dcerpc endpoint server.
 */
 NTSTATUS dcesrv_input_process(struct dcesrv_connection *dce_conn)
@@ -987,6 +1032,9 @@
 	call->msg_ctx		= dce_conn->msg_ctx;
 	call->state_flags	= call->conn->state_flags;
 	call->time		= timeval_current();
+	call->list              = DCESRV_LIST_NONE;
+
+	talloc_set_destructor(call, dcesrv_call_dequeue);
 
 	blob = dce_conn->partial_input;
 	blob.length = dcerpc_get_frag_length(&blob);
@@ -1071,13 +1119,12 @@
 	   just put it on the incoming_fragmented_call_list and wait for the rest */
 	if (call->pkt.ptype == DCERPC_PKT_REQUEST &&
 	    !(call->pkt.pfc_flags & DCERPC_PFC_FLAG_LAST)) {
-		DLIST_ADD_END(dce_conn->incoming_fragmented_call_list, call, 
-			      struct dcesrv_call_state *);
+		dcesrv_call_set_list(call, DCESRV_LIST_FRAGMENTED_CALL_LIST);
 		return NT_STATUS_OK;
 	} 
 	
 	/* This removes any fragments we may have had stashed away */
-	DLIST_REMOVE(dce_conn->incoming_fragmented_call_list, call);
+	dcesrv_call_set_list(call, DCESRV_LIST_NONE);
 
 	switch (call->pkt.ptype) {
 	case DCERPC_PKT_BIND:
@@ -1184,7 +1231,7 @@
 
 	if (call->replies == NULL) {
 		/* we're done with the whole call */
-		DLIST_REMOVE(dce_conn->call_list, call);
+		dcesrv_call_set_list(call, DCESRV_LIST_NONE);
 		talloc_free(call);
 	}
 

=== modified file 'source/rpc_server/dcerpc_server.h'
--- a/source/rpc_server/dcerpc_server.h	2007-01-10 10:52:09 +0000
+++ b/source/rpc_server/dcerpc_server.h	2007-03-13 22:58:23 +0000
@@ -71,6 +71,13 @@
 	const void *private;
 };
 
+enum dcesrv_call_list {
+	DCESRV_LIST_NONE,
+	DCESRV_LIST_CALL_LIST,
+	DCESRV_LIST_FRAGMENTED_CALL_LIST,
+	DCESRV_LIST_PENDING_CALL_LIST
+};
+
 /* the state of an ongoing dcerpc call */
 struct dcesrv_call_state {
 	struct dcesrv_call_state *next, *prev;
@@ -78,6 +85,11 @@
 	struct dcesrv_connection_context *context;
 	struct ncacn_packet pkt;
 
+	/*
+	  which list this request is in, if any
+	 */
+	enum dcesrv_call_list list;
+
 	/* the backend can mark the call
 	 * with DCESRV_CALL_STATE_FLAG_ASYNC
 	 * that will cause the frontend to not touch r->out

=== modified file 'source/script/tests/mk-openldap.sh'
--- a/source/script/tests/mk-openldap.sh	2007-03-12 00:16:24 +0000
+++ b/source/script/tests/mk-openldap.sh	2007-03-13 23:16:09 +0000
@@ -103,6 +103,7 @@
     cat > $MODCONF <<EOF 
 modulepath	/usr/lib/ldap
 moduleload	back_bdb
+moduleload	syncprov
 EOF
 }
 

=== modified file 'source/torture/config.mk'
--- a/source/torture/config.mk	2007-03-13 20:44:14 +0000
+++ b/source/torture/config.mk	2007-03-14 00:44:29 +0000
@@ -161,7 +161,7 @@
 PUBLIC_DEPENDENCIES = \
 		NDR_TABLE RPC_NDR_UNIXINFO dcerpc_samr RPC_NDR_WINREG RPC_NDR_INITSHUTDOWN \
 		RPC_NDR_OXIDRESOLVER RPC_NDR_EVENTLOG RPC_NDR_ECHO RPC_NDR_SVCCTL \
-		RPC_NDR_NETLOGON dcerpc_atsvc RPC_NDR_DRSUAPI \
+		RPC_NDR_NETLOGON dcerpc_atsvc dcerpc_mgmt RPC_NDR_DRSUAPI \
 		RPC_NDR_LSA RPC_NDR_EPMAPPER RPC_NDR_DFS RPC_NDR_SPOOLSS \
 		RPC_NDR_SRVSVC RPC_NDR_WKSSVC RPC_NDR_ROT RPC_NDR_DSSETUP \
 		RPC_NDR_REMACT RPC_NDR_OXIDRESOLVER WB_HELPER LIBSAMBA-NET \



More information about the samba-cvs mailing list