[SCM] Samba Shared Repository - branch v3-6-test updated

Stefan Metzmacher metze at samba.org
Wed Jan 5 02:03:36 MST 2011


The branch, v3-6-test has been updated
       via  c5a3b64 s3:net_utils: use dcerpc_dssetup_DsRoleGetPrimaryDomainInformation()
       via  557d96f s3:winbindd: use dcerpc_dssetup_DsRoleGetPrimaryDomainInformation()
       via  9e81430 s3:rpcclient: use dcerpc_binding_handle based client stubs in cmd_dssetup.c
       via  de8f823 s3:build: don't use cli_epmapper.c anymore
       via  b86d609 s3:rpcclient: improve "epmmap" output
       via  b87d660 s3:rpcclient: use dcerpc_binding_handle bases client stubs in cmd_epmapper.c
       via  67a9ea8 s3:rpc_client: use dcerpc_epm_Map() and don't ignore 'result' anymore.
       via  324ea10 s3:build: don't use cli_ntsvcs.c any more.
       via  7952a49 s3:rpcclient: use dcerpc_binding_handle client stubs in cmd_ntsvcs.c
       via  8380829 s3:build: don't use cli_wbint.c any more
       via  0754428 Revert "nsswitch Add talloc depencency for nsstest"
       via  0152900 nsswitch: remove includes.h dependency from nsstest.c
       via  7daee57 nsswitch Add talloc depencency for nsstest
       via  32d111b s3:net_rpc_vampire_keytab: don't return -1 on success (bug #7899)
       via  270893e s3: Fix a memleak in receive_getdc_response
       via  97c676b s3/s4:auth SPNEGO - adaptions for the removed "const" from OIDs
      from  5ea1dd5 s3-waf: fix the build.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test


- Log -----------------------------------------------------------------
commit c5a3b64b75f9de970f92719263c921f762baf6ed
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 4 17:18:22 2011 +0100

    s3:net_utils: use dcerpc_dssetup_DsRoleGetPrimaryDomainInformation()
    
    metze
    (cherry picked from commit 4c37257f16cf2b34550a993f5423ee772254870f)

commit 557d96f45953137a81e1e11cf2455af34c87e5f8
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 4 13:55:15 2011 +0100

    s3:winbindd: use dcerpc_dssetup_DsRoleGetPrimaryDomainInformation()
    
    metze
    (cherry picked from commit f016e4d4bd86d34a39822e9fdc0f83dbf67442b7)

commit 9e81430ca721ca5c1abd1f97a481a31bb9f82804
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 4 13:51:34 2011 +0100

    s3:rpcclient: use dcerpc_binding_handle based client stubs in cmd_dssetup.c
    
    metze
    (cherry picked from commit c6aedc9750aff42a6d201addf0d4ed745743b9a2)

commit de8f82318fa177dc3548963134da3b8ab1f416c0
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 4 13:36:24 2011 +0100

    s3:build: don't use cli_epmapper.c anymore
    
    metze
    (cherry picked from commit 62aa019a1b5b0ec17e0b4494de44e80ffc793fdd)

commit b86d609e1e93884a0e9dfd931c9a2ea7271d584b
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 4 21:24:17 2011 +0100

    s3:rpcclient: improve "epmmap" output
    
    metze
    (cherry picked from commit 6dd5ccd04130a7d33bebca1a2340d339ab7b34c9)

commit b87d6600c7a4475b1a6b5083c13831d053324136
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 4 13:33:46 2011 +0100

    s3:rpcclient: use dcerpc_binding_handle bases client stubs in cmd_epmapper.c
    
    metze
    (cherry picked from commit 697d4ea8fff6fbc48aa59b17fa0ecc91bf1d233d)

commit 67a9ea8f66e002c17db9693093f577e386b4e5a1
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 4 13:32:28 2011 +0100

    s3:rpc_client: use dcerpc_epm_Map() and don't ignore 'result' anymore.
    
    metze
    (cherry picked from commit fba2fdf2651bd4ffaabb41d5e0506cbf3bcb0699)

commit 324ea1000d6db261c7147e22fc4b2dde53ec1f68
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 4 10:55:48 2011 +0100

    s3:build: don't use cli_ntsvcs.c any more.
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Tue Jan  4 17:23:17 CET 2011 on sn-devel-104
    (cherry picked from commit e1e869352565b8e1d7865a2338f8f0f3ef154519)

commit 7952a49385867378945bdbab1c3a99b1597d0520
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 4 10:52:14 2011 +0100

    s3:rpcclient: use dcerpc_binding_handle client stubs in cmd_ntsvcs.c
    
    metze
    (cherry picked from commit d99e9c389b6c0d8ed84a7b36ccadd8b43e3b19f2)

commit 8380829c3e5bb9b492ce09ec805e1bd0050f6862
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 4 13:58:25 2011 +0100

    s3:build: don't use cli_wbint.c any more
    
    metze
    (cherry picked from commit fbcbeabd655029309ee42627a0bb75d6a5820f50)

commit 0754428083e1356fe7200a68934837bbdd326873
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 4 08:43:16 2011 +0100

    Revert "nsswitch Add talloc depencency for nsstest"
    
    This reverts commit 640028d158583825ea5ffd1266f099cf8776db5d.
    
    This is not needed anymore.
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Tue Jan  4 09:38:57 CET 2011 on sn-devel-104
    (cherry picked from commit b79c0e1adbe8ad591157d92b36106484c2c18313)

commit 015290058e990a16b443578138e5fdfcca2b9167
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 4 08:42:16 2011 +0100

    nsswitch: remove includes.h dependency from nsstest.c
    
    metze
    (cherry picked from commit ce113ea02980563133c547bb0693864951ce16a5)

commit 7daee57a4aaa7f456d826dfdd7236a1ba0df24a7
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Jan 4 14:41:38 2011 +1100

    nsswitch Add talloc depencency for nsstest
    
    nsstest does not use talloc, but it includes talloc.h via includes.h,
    and so without this it cannot find the right internal header.
    
    This wasn't noticed before, as most linux developer boxes have a talloc.h.
    
    The issue was reported by Adam Tauno Williams <awilliam at whitemice.org>
    
    Andrew Bartlett
    (cherry picked from commit 640028d158583825ea5ffd1266f099cf8776db5d)
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 32d111bef6d38bc3f946e68f133d37e1f1cc25bc
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jan 3 16:58:56 2011 +0100

    s3:net_rpc_vampire_keytab: don't return -1 on success (bug #7899)
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Mon Jan  3 19:05:11 CET 2011 on sn-devel-104
    (cherry picked from commit ddbbc7b12ae8e51bc9658e3356bbeefe314f55bb)

commit 270893eef13fd5ea020fed263b4a8b5401906e49
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Jan 2 05:57:09 2011 +0100

    s3: Fix a memleak in receive_getdc_response
    
    It's the free_packet() that was missing. On the way, I've changed the
    "return false;" to a "goto fail;", which makes the patch a bit larger.
    
    Autobuild-User: Volker Lendecke <vlendec at samba.org>
    Autobuild-Date: Sun Jan  2 14:27:56 CET 2011 on sn-devel-104
    (cherry picked from commit 593c004b74693aeddfffdf80945d37bac7276969)
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 97c676b982e208babbd94353b60b3318933ca7fc
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Wed Dec 15 17:17:09 2010 +0100

    s3/s4:auth SPNEGO - adaptions for the removed "const" from OIDs
    
    This is needed in order to suppress warnings.
    (cherry picked from commit 13fa6743d86ef6e51b3243cf3045242850358b43)
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 libcli/auth/spnego_parse.c       |    8 +++-
 nsswitch/nsstest.c               |   25 +++++--------
 source3/Makefile.in              |    7 +---
 source3/librpc/wscript_build     |    5 ---
 source3/libsmb/clidgram.c        |   37 +++++++++++--------
 source3/libsmb/clispnego.c       |    4 +--
 source3/rpc_client/cli_pipe.c    |   13 ++++++-
 source3/rpcclient/cmd_dssetup.c  |    3 +-
 source3/rpcclient/cmd_epmapper.c |   72 +++++++++++++++++++++++++++++++-------
 source3/rpcclient/cmd_ntsvcs.c   |   21 +++++++----
 source3/utils/net_rpc_samsync.c  |    1 -
 source3/utils/net_util.c         |   10 ++++-
 source3/winbindd/winbindd_cm.c   |    5 ++-
 source3/wscript_build            |   14 ++------
 14 files changed, 141 insertions(+), 84 deletions(-)


Changeset truncated at 500 lines:

diff --git a/libcli/auth/spnego_parse.c b/libcli/auth/spnego_parse.c
index 27ede1b..3bf7aea 100644
--- a/libcli/auth/spnego_parse.c
+++ b/libcli/auth/spnego_parse.c
@@ -49,10 +49,12 @@ static bool read_negTokenInit(struct asn1_data *asn1, TALLOC_CTX *mem_ctx,
 			token->mechTypes = talloc(NULL, const char *);
 			for (i = 0; !asn1->has_error &&
 				     0 < asn1_tag_remaining(asn1); i++) {
+				char *oid;
 				token->mechTypes = talloc_realloc(NULL,
 								  token->mechTypes,
 								  const char *, i+2);
-				asn1_read_OID(asn1, token->mechTypes, token->mechTypes + i);
+				asn1_read_OID(asn1, token->mechTypes, &oid);
+				token->mechTypes[i] = oid;
 			}
 			token->mechTypes[i] = NULL;
 
@@ -184,6 +186,7 @@ static bool read_negTokenTarg(struct asn1_data *asn1, TALLOC_CTX *mem_ctx,
 
 	while (!asn1->has_error && 0 < asn1_tag_remaining(asn1)) {
 		uint8_t context;
+		char *oid;
 		if (!asn1_peek_uint8(asn1, &context)) {
 			asn1->has_error = true;
 			break;
@@ -199,7 +202,8 @@ static bool read_negTokenTarg(struct asn1_data *asn1, TALLOC_CTX *mem_ctx,
 			break;
 		case ASN1_CONTEXT(1):
 			asn1_start_tag(asn1, ASN1_CONTEXT(1));
-			asn1_read_OID(asn1, mem_ctx, &token->supportedMech);
+			asn1_read_OID(asn1, mem_ctx, &oid);
+			token->supportedMech = oid;
 			asn1_end_tag(asn1);
 			break;
 		case ASN1_CONTEXT(2):
diff --git a/nsswitch/nsstest.c b/nsswitch/nsstest.c
index 8742b32..d84e028 100644
--- a/nsswitch/nsstest.c
+++ b/nsswitch/nsstest.c
@@ -18,16 +18,9 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "includes.h"
+#include "replace.h"
 #include "nsswitch/nsstest.h"
 
-#ifdef malloc
-#undef malloc
-#endif
-#ifdef realloc
-#undef realloc
-#endif
-
 static const char *so_path = "/lib/libnss_winbind.so";
 static const char *nss_name = "winbind";
 static int nss_errno;
@@ -55,10 +48,10 @@ static void *find_fn(const char *name)
 	if (!res) {
 		printf("Can't find function %s\n", s);
 		total_errors++;
-		SAFE_FREE(s);
+		free(s);
 		return NULL;
 	}
-	SAFE_FREE(s);
+	free(s);
 	return res;
 }
 
@@ -201,12 +194,12 @@ again:
 		goto again;
 	}
 	if (status == NSS_STATUS_NOTFOUND) {
-		SAFE_FREE(buf);
+		free(buf);
 		return NULL;
 	}
 	if (status != NSS_STATUS_SUCCESS) {
 		report_nss_error("getgrent", status);
-		SAFE_FREE(buf);
+		free(buf);
 		return NULL;
 	}
 	return &grp;
@@ -239,12 +232,12 @@ again:
 		goto again;
 	}
 	if (status == NSS_STATUS_NOTFOUND) {
-		SAFE_FREE(buf);
+		free(buf);
 		return NULL;
 	}
 	if (status != NSS_STATUS_SUCCESS) {
 		report_nss_error("getgrnam", status);
-		SAFE_FREE(buf);
+		free(buf);
 		return NULL;
 	}
 	return &grp;
@@ -278,12 +271,12 @@ again:
 		goto again;
 	}
 	if (status == NSS_STATUS_NOTFOUND) {
-		SAFE_FREE(buf);
+		free(buf);
 		return NULL;
 	}
 	if (status != NSS_STATUS_SUCCESS) {
 		report_nss_error("getgrgid", status);
-		SAFE_FREE(buf);
+		free(buf);
 		return NULL;
 	}
 	return &grp;
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 3e49869..4947916 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -350,8 +350,7 @@ LIBCLI_EVENTLOG_OBJ = librpc/gen_ndr/cli_eventlog.o \
 LIBCLI_WINREG_OBJ = librpc/gen_ndr/cli_winreg.o \
                     librpc/gen_ndr/ndr_winreg_c.o
 
-LIBCLI_NTSVCS_OBJ = librpc/gen_ndr/cli_ntsvcs.o \
-		    librpc/gen_ndr/ndr_ntsvcs_c.o
+LIBCLI_NTSVCS_OBJ = librpc/gen_ndr/ndr_ntsvcs_c.o
 
 LIBCLI_DRSUAPI_OBJ = librpc/gen_ndr/cli_drsuapi.o \
 		     librpc/gen_ndr/ndr_drsuapi_c.o
@@ -390,8 +389,7 @@ LIBCLI_NETLOGON_OBJ = librpc/gen_ndr/cli_netlogon.o \
 		      librpc/gen_ndr/ndr_netlogon_c.o \
 		      rpc_client/cli_netlogon.o
 
-LIBCLI_EPMAPPER_OBJ = librpc/gen_ndr/cli_epmapper.o \
-		      librpc/gen_ndr/ndr_epmapper_c.o
+LIBCLI_EPMAPPER_OBJ = librpc/gen_ndr/ndr_epmapper_c.o
 
 LIBNDR_GEN_OBJ = librpc/gen_ndr/ndr_wkssvc.o \
 		 $(LIBNDR_GEN_OBJ0) \
@@ -1324,7 +1322,6 @@ WINBINDD_OBJ1 = \
 		winbindd/winbindd_dual.o  \
 		winbindd/winbindd_dual_ndr.o  \
 		winbindd/winbindd_dual_srv.o  \
-		librpc/gen_ndr/cli_wbint.o \
 		librpc/gen_ndr/ndr_wbint_c.o \
 		librpc/gen_ndr/srv_wbint.o \
 		librpc/gen_ndr/ndr_wbint.o \
diff --git a/source3/librpc/wscript_build b/source3/librpc/wscript_build
index 0bb7322..5b30507 100644
--- a/source3/librpc/wscript_build
+++ b/source3/librpc/wscript_build
@@ -45,11 +45,6 @@ bld.SAMBA_SUBSYSTEM('RPC_NDR_WBINT',
 	public_deps='dcerpc NDR_WBINT'
 	)
 
-bld.SAMBA_SUBSYSTEM('RPCCLI_NDR_WBINT',
-	source='../librpc/gen_ndr/cli_wbint.c',
-	public_deps='RPC_NDR_WBINT'
-	)
-
 bld.SAMBA_SUBSYSTEM('SRV_NDR_WBINT',
 	source='../librpc/gen_ndr/srv_wbint.c',
 	public_deps='NDR_WBINT'
diff --git a/source3/libsmb/clidgram.c b/source3/libsmb/clidgram.c
index 05a0edc..c9592a1 100644
--- a/source3/libsmb/clidgram.c
+++ b/source3/libsmb/clidgram.c
@@ -107,7 +107,7 @@ static bool cli_prep_mailslot(bool unique, const char *mailslot,
 	return true;
 }
 
-static const char *mailslot_name(TALLOC_CTX *mem_ctx, struct in_addr dc_ip)
+static char *mailslot_name(TALLOC_CTX *mem_ctx, struct in_addr dc_ip)
 {
 	return talloc_asprintf(mem_ctx, "%s%X",
 			       NBT_MAILSLOT_GETDC, dc_ip.s_addr);
@@ -220,11 +220,11 @@ bool receive_getdc_response(TALLOC_CTX *mem_ctx,
 			    const char **dc_name,
 			    struct netlogon_samlogon_response **samlogon_response)
 {
-	struct packet_struct *packet;
-	const char *my_mailslot = NULL;
+	struct packet_struct *packet = NULL;
+	char *my_mailslot = NULL;
 	struct in_addr dc_ip;
 	DATA_BLOB blob;
-	struct netlogon_samlogon_response *r;
+	struct netlogon_samlogon_response *r = NULL;
 	union dgram_message_body p;
 	enum ndr_err_code ndr_err;
 	NTSTATUS status;
@@ -257,12 +257,12 @@ bool receive_getdc_response(TALLOC_CTX *mem_ctx,
 
 	if (blob.length < 4) {
 		DEBUG(0,("invalid length: %d\n", (int)blob.length));
-		return false;
+		goto fail;
 	}
 
 	if (RIVAL(blob.data,0) != DGRAM_SMB) {
 		DEBUG(0,("invalid packet\n"));
-		return false;
+		goto fail;
 	}
 
 	blob.data += 4;
@@ -272,12 +272,12 @@ bool receive_getdc_response(TALLOC_CTX *mem_ctx,
 		       (ndr_pull_flags_fn_t)ndr_pull_dgram_smb_packet);
 	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
 		DEBUG(0,("failed to parse packet\n"));
-		return false;
+		goto fail;
 	}
 
 	if (p.smb.smb_command != SMB_TRANSACTION) {
 		DEBUG(0,("invalid smb_command: %d\n", p.smb.smb_command));
-		return false;
+		goto fail;
 	}
 
 	if (DEBUGLEVEL >= 10) {
@@ -288,13 +288,12 @@ bool receive_getdc_response(TALLOC_CTX *mem_ctx,
 
 	r = TALLOC_ZERO_P(mem_ctx, struct netlogon_samlogon_response);
 	if (!r) {
-		return false;
+		goto fail;
 	}
 
 	status = pull_netlogon_samlogon_response(&blob, mem_ctx, r);
 	if (!NT_STATUS_IS_OK(status)) {
-		TALLOC_FREE(r);
-		return false;
+		goto fail;
 	}
 
 	map_netlogon_samlogon_response(r);
@@ -308,14 +307,12 @@ bool receive_getdc_response(TALLOC_CTX *mem_ctx,
 	if (!strequal(returned_domain, domain_name)) {
 		DEBUG(3, ("GetDC: Expected domain %s, got %s\n",
 			  domain_name, returned_domain));
-		TALLOC_FREE(r);
-		return false;
+		goto fail;
 	}
 
 	*dc_name = talloc_strdup(mem_ctx, returned_dc);
 	if (!*dc_name) {
-		TALLOC_FREE(r);
-		return false;
+		goto fail;
 	}
 
 	if (**dc_name == '\\')	*dc_name += 1;
@@ -330,5 +327,15 @@ bool receive_getdc_response(TALLOC_CTX *mem_ctx,
 	DEBUG(10, ("GetDC gave name %s for domain %s\n",
 		   *dc_name, returned_domain));
 
+	free_packet(packet);
+	TALLOC_FREE(my_mailslot);
 	return True;
+
+fail:
+	TALLOC_FREE(my_mailslot);
+	TALLOC_FREE(r);
+	if (packet != NULL) {
+		free_packet(packet);
+	}
+	return false;
 }
diff --git a/source3/libsmb/clispnego.c b/source3/libsmb/clispnego.c
index 9ef848b..382a29a 100644
--- a/source3/libsmb/clispnego.c
+++ b/source3/libsmb/clispnego.c
@@ -125,9 +125,7 @@ bool spnego_parse_negTokenInit(TALLOC_CTX *ctx,
 	asn1_start_tag(data,ASN1_CONTEXT(0));
 	asn1_start_tag(data,ASN1_SEQUENCE(0));
 	for (i=0; asn1_tag_remaining(data) > 0 && i < ASN1_MAX_OIDS-1; i++) {
-		const char *oid_str = NULL;
-		asn1_read_OID(data,ctx,&oid_str);
-		OIDs[i] = CONST_DISCARD(char *, oid_str);
+		asn1_read_OID(data,ctx, &OIDs[i]);
 	}
 	OIDs[i] = NULL;
 	asn1_end_tag(data);
diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c
index b59e9db..d7320c1 100644
--- a/source3/rpc_client/cli_pipe.c
+++ b/source3/rpc_client/cli_pipe.c
@@ -2464,6 +2464,7 @@ static NTSTATUS rpc_pipe_get_tcp_port(const char *host,
 {
 	NTSTATUS status;
 	struct rpc_pipe_client *epm_pipe = NULL;
+	struct dcerpc_binding_handle *epm_handle = NULL;
 	struct pipe_auth_data *auth = NULL;
 	struct dcerpc_binding *map_binding = NULL;
 	struct dcerpc_binding *res_binding = NULL;
@@ -2474,6 +2475,7 @@ static NTSTATUS rpc_pipe_get_tcp_port(const char *host,
 	uint32_t max_towers = 1;
 	struct epm_twr_p_t towers;
 	TALLOC_CTX *tmp_ctx = talloc_stackframe();
+	uint32_t result = 0;
 
 	if (pport == NULL) {
 		status = NT_STATUS_INVALID_PARAMETER;
@@ -2488,6 +2490,7 @@ static NTSTATUS rpc_pipe_get_tcp_port(const char *host,
 	if (!NT_STATUS_IS_OK(status)) {
 		goto done;
 	}
+	epm_handle = epm_pipe->binding_handle;
 
 	status = rpccli_anon_bind_data(tmp_ctx, &auth);
 	if (!NT_STATUS_IS_OK(status)) {
@@ -2541,7 +2544,7 @@ static NTSTATUS rpc_pipe_get_tcp_port(const char *host,
 
 	/* ask the endpoint mapper for the port */
 
-	status = rpccli_epm_Map(epm_pipe,
+	status = dcerpc_epm_Map(epm_handle,
 				tmp_ctx,
 				CONST_DISCARD(struct GUID *,
 					      &(abstract_syntax->uuid)),
@@ -2549,12 +2552,18 @@ static NTSTATUS rpc_pipe_get_tcp_port(const char *host,
 				entry_handle,
 				max_towers,
 				&num_towers,
-				&towers);
+				&towers,
+				&result);
 
 	if (!NT_STATUS_IS_OK(status)) {
 		goto done;
 	}
 
+	if (result != EPMAPPER_STATUS_OK) {
+		status = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
 	if (num_towers != 1) {
 		status = NT_STATUS_UNSUCCESSFUL;
 		goto done;
diff --git a/source3/rpcclient/cmd_dssetup.c b/source3/rpcclient/cmd_dssetup.c
index 88f541b..198c010 100644
--- a/source3/rpcclient/cmd_dssetup.c
+++ b/source3/rpcclient/cmd_dssetup.c
@@ -29,11 +29,12 @@ static WERROR cmd_ds_dsrole_getprimarydominfo(struct rpc_pipe_client *cli,
 					      TALLOC_CTX *mem_ctx, int argc,
 					      const char **argv)
 {
+	struct dcerpc_binding_handle *b = cli->binding_handle;
 	NTSTATUS status;
 	WERROR werr;
 	union dssetup_DsRoleInfo info;
 
-	status = rpccli_dssetup_DsRoleGetPrimaryDomainInformation(cli, mem_ctx,
+	status = dcerpc_dssetup_DsRoleGetPrimaryDomainInformation(b, mem_ctx,
 								  DS_ROLE_BASIC_INFORMATION,
 								  &info,
 								  &werr);
diff --git a/source3/rpcclient/cmd_epmapper.c b/source3/rpcclient/cmd_epmapper.c
index 3ee0120..7ddd0bc 100644
--- a/source3/rpcclient/cmd_epmapper.c
+++ b/source3/rpcclient/cmd_epmapper.c
@@ -27,15 +27,17 @@ static NTSTATUS cmd_epmapper_map(struct rpc_pipe_client *p,
 				 TALLOC_CTX *mem_ctx,
 				 int argc, const char **argv)
 {
+	struct dcerpc_binding_handle *b = p->binding_handle;
 	struct dcerpc_binding map_binding;
 	struct epm_twr_t map_tower;
-	struct epm_twr_t res_tower;
-	struct epm_twr_p_t towers;
+	struct epm_twr_p_t towers[500];
 	struct policy_handle entry_handle;
 	struct ndr_syntax_id abstract_syntax;
 	uint32_t num_towers;
 	TALLOC_CTX *tmp_ctx = talloc_stackframe();
 	NTSTATUS status;
+	uint32_t result;
+	uint32_t i;
 
 	abstract_syntax = ndr_table_lsarpc.syntax_id;
 
@@ -52,21 +54,52 @@ static NTSTATUS cmd_epmapper_map(struct rpc_pipe_client *p,
 		return status;
 	}
 
-	towers.twr = &res_tower;
-
+	ZERO_STRUCT(towers);
 	ZERO_STRUCT(entry_handle);
-	status = rpccli_epm_Map(
-		p, tmp_ctx, &abstract_syntax.uuid,
-		&map_tower, &entry_handle, 1,
-		&num_towers, &towers);
 
-	return status;
+	status = dcerpc_epm_Map(
+		b, tmp_ctx, &abstract_syntax.uuid,
+		&map_tower, &entry_handle, ARRAY_SIZE(towers),
+		&num_towers, towers, &result);
+	if (!NT_STATUS_IS_OK(status)) {
+		d_fprintf(stderr, "dcerpc_epm_Map returned %s\n",
+			  nt_errstr(status));
+		return status;
+	}
+
+	if (result != EPMAPPER_STATUS_OK) {
+		d_fprintf(stderr, "epm_Map returned %u (0x%08X)\n",
+			  result, result);
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	d_printf("num_tower[%u]\n", num_towers);
+
+	for (i=0; i < num_towers; i++) {
+		struct dcerpc_binding *binding;
+
+		if (towers[i].twr == NULL) {
+			d_fprintf(stderr, "tower[%u] NULL\n", i);
+			break;
+		}
+
+		status = dcerpc_binding_from_tower(tmp_ctx, &towers[i].twr->tower,
+						   &binding);
+		if (!NT_STATUS_IS_OK(status)) {
+			break;
+		}
+
+		d_printf("tower[%u] %s\n", i, dcerpc_binding_string(tmp_ctx, binding));
+	}
+
+	return NT_STATUS_OK;
 }
 
 static NTSTATUS cmd_epmapper_lookup(struct rpc_pipe_client *p,
 				    TALLOC_CTX *mem_ctx,
 				    int argc, const char **argv)
 {
+	struct dcerpc_binding_handle *b = p->binding_handle;
 	struct policy_handle entry_handle;
 
 	ZERO_STRUCT(entry_handle);
@@ -78,23 +111,36 @@ static NTSTATUS cmd_epmapper_lookup(struct rpc_pipe_client *p,
 		NTSTATUS status;
 		char *guid_string;
 		struct dcerpc_binding *binding;
+		uint32_t result;
 
-		status = rpccli_epm_Lookup(p, tmp_ctx,
+		status = dcerpc_epm_Lookup(b, tmp_ctx,
 				   0, /* rpc_c_ep_all */
 				   NULL,
 				   NULL,
 				   0, /* rpc_c_vers_all */
 				   &entry_handle,
 				   1, /* max_ents */
-				   &num_entries, &entry);
+				   &num_entries, &entry,
+				   &result);
 		if (!NT_STATUS_IS_OK(status)) {
-			d_fprintf(stderr, "rpccli_epm_Lookup returned %s\n",
+			d_fprintf(stderr, "dcerpc_epm_Lookup returned %s\n",
 				  nt_errstr(status));
 			break;
 		}
 
+		if (result == EPMAPPER_STATUS_NO_MORE_ENTRIES) {
+			d_fprintf(stderr, "epm_Lookup no more entries\n");
+			break;
+		}
+
+		if (result != EPMAPPER_STATUS_OK) {
+			d_fprintf(stderr, "epm_Lookup returned %u (0x%08X)\n",
+				  result, result);
+			break;
+		}
+
 		if (num_entries != 1) {
-			d_fprintf(stderr, "rpccli_epm_Lookup returned %d "
+			d_fprintf(stderr, "epm_Lookup returned %d "
 				  "entries, expected one\n", (int)num_entries);
 			break;
 		}
diff --git a/source3/rpcclient/cmd_ntsvcs.c b/source3/rpcclient/cmd_ntsvcs.c
index 95b905a..68135d5 100644
--- a/source3/rpcclient/cmd_ntsvcs.c
+++ b/source3/rpcclient/cmd_ntsvcs.c
@@ -27,11 +27,12 @@ static WERROR cmd_ntsvcs_get_version(struct rpc_pipe_client *cli,
 				     int argc,
 				     const char **argv)
 {
+	struct dcerpc_binding_handle *b = cli->binding_handle;
 	NTSTATUS status;
 	WERROR werr;
 	uint16_t version;
 
-	status = rpccli_PNP_GetVersion(cli, mem_ctx,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list