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 <me...@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 <me...@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 <me...@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 <me...@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 <me...@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 <me...@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 <me...@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 <me...@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 <me...@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 <me...@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 <me...@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 <me...@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 <me...@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 <me...@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 <abart...@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 <me...@samba.org> commit 32d111bef6d38bc3f946e68f133d37e1f1cc25bc Author: Stefan Metzmacher <me...@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 <me...@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 <v...@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 <vlen...@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 <me...@samba.org> commit 97c676b982e208babbd94353b60b3318933ca7fc Author: Matthias Dieter Wallnöfer <m...@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 <me...@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