The branch, v3-2-test has been updated via 7d8461d080c92a83bd7a8d168fdf1fe98e8bec9a (commit) via c92b585cc42ba9f42727512c08c896ee40e5e319 (commit) via cb0b0fd2684b63257421aba599f9d2111c0438bf (commit) from 20ddbcaa0c113646cea774c36209f382cada50b0 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test - Log ----------------------------------------------------------------- commit 7d8461d080c92a83bd7a8d168fdf1fe98e8bec9a Author: Günther Deschner <[EMAIL PROTECTED]> Date: Tue Apr 22 23:11:53 2008 +0200 rpcclient: Add getdispinfoidx command. Guenther commit c92b585cc42ba9f42727512c08c896ee40e5e319 Author: Günther Deschner <[EMAIL PROTECTED]> Date: Tue Apr 22 23:11:21 2008 +0200 IDL: rerun make idl. Guenther commit cb0b0fd2684b63257421aba599f9d2111c0438bf Author: Günther Deschner <[EMAIL PROTECTED]> Date: Tue Apr 22 23:10:35 2008 +0200 IDL: Fix IDL for samr_GetDisplayEnumerationIndex{2}. Guenther ----------------------------------------------------------------------- Summary of changes: source/librpc/gen_ndr/cli_samr.c | 4 +- source/librpc/gen_ndr/cli_samr.h | 4 +- source/librpc/gen_ndr/ndr_samr.c | 38 +++++++++++++++++++---- source/librpc/gen_ndr/samr.h | 4 +- source/librpc/idl/samr.idl | 4 +- source/rpcclient/cmd_samr.c | 62 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 102 insertions(+), 14 deletions(-) Changeset truncated at 500 lines: diff --git a/source/librpc/gen_ndr/cli_samr.c b/source/librpc/gen_ndr/cli_samr.c index bdc9837..cff548c 100644 --- a/source/librpc/gen_ndr/cli_samr.c +++ b/source/librpc/gen_ndr/cli_samr.c @@ -1821,7 +1821,7 @@ NTSTATUS rpccli_samr_GetDisplayEnumerationIndex(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, struct policy_handle *domain_handle /* [in] [ref] */, uint16_t level /* [in] */, - struct lsa_String name /* [in] */, + struct lsa_String *name /* [in] [ref] */, uint32_t *idx /* [out] [ref] */) { struct samr_GetDisplayEnumerationIndex r; @@ -2165,7 +2165,7 @@ NTSTATUS rpccli_samr_GetDisplayEnumerationIndex2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, struct policy_handle *domain_handle /* [in] [ref] */, uint16_t level /* [in] */, - struct lsa_String name /* [in] */, + struct lsa_String *name /* [in] [ref] */, uint32_t *idx /* [out] [ref] */) { struct samr_GetDisplayEnumerationIndex2 r; diff --git a/source/librpc/gen_ndr/cli_samr.h b/source/librpc/gen_ndr/cli_samr.h index 53cdbfa..4c7a30e 100644 --- a/source/librpc/gen_ndr/cli_samr.h +++ b/source/librpc/gen_ndr/cli_samr.h @@ -230,7 +230,7 @@ NTSTATUS rpccli_samr_GetDisplayEnumerationIndex(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, struct policy_handle *domain_handle /* [in] [ref] */, uint16_t level /* [in] */, - struct lsa_String name /* [in] */, + struct lsa_String *name /* [in] [ref] */, uint32_t *idx /* [out] [ref] */); NTSTATUS rpccli_samr_TestPrivateFunctionsDomain(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, @@ -270,7 +270,7 @@ NTSTATUS rpccli_samr_GetDisplayEnumerationIndex2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, struct policy_handle *domain_handle /* [in] [ref] */, uint16_t level /* [in] */, - struct lsa_String name /* [in] */, + struct lsa_String *name /* [in] [ref] */, uint32_t *idx /* [out] [ref] */); NTSTATUS rpccli_samr_CreateUser2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, diff --git a/source/librpc/gen_ndr/ndr_samr.c b/source/librpc/gen_ndr/ndr_samr.c index db95ec3..c3f8bc6 100644 --- a/source/librpc/gen_ndr/ndr_samr.c +++ b/source/librpc/gen_ndr/ndr_samr.c @@ -9346,7 +9346,10 @@ static enum ndr_err_code ndr_push_samr_GetDisplayEnumerationIndex(struct ndr_pus } NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle)); NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level)); - NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name)); + if (r->in.name == NULL) { + return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer"); + } + NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name)); } if (flags & NDR_OUT) { if (r->out.idx == NULL) { @@ -9361,6 +9364,7 @@ static enum ndr_err_code ndr_push_samr_GetDisplayEnumerationIndex(struct ndr_pus static enum ndr_err_code ndr_pull_samr_GetDisplayEnumerationIndex(struct ndr_pull *ndr, int flags, struct samr_GetDisplayEnumerationIndex *r) { TALLOC_CTX *_mem_save_domain_handle_0; + TALLOC_CTX *_mem_save_name_0; TALLOC_CTX *_mem_save_idx_0; if (flags & NDR_IN) { ZERO_STRUCT(r->out); @@ -9373,7 +9377,13 @@ static enum ndr_err_code ndr_pull_samr_GetDisplayEnumerationIndex(struct ndr_pul NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle)); NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC); NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level)); - NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name)); + if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) { + NDR_PULL_ALLOC(ndr, r->in.name); + } + _mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr); + NDR_PULL_SET_MEM_CTX(ndr, r->in.name, LIBNDR_FLAG_REF_ALLOC); + NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name)); + NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, LIBNDR_FLAG_REF_ALLOC); NDR_PULL_ALLOC(ndr, r->out.idx); ZERO_STRUCTP(r->out.idx); } @@ -9405,7 +9415,10 @@ _PUBLIC_ void ndr_print_samr_GetDisplayEnumerationIndex(struct ndr_print *ndr, c ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle); ndr->depth--; ndr_print_uint16(ndr, "level", r->in.level); - ndr_print_lsa_String(ndr, "name", &r->in.name); + ndr_print_ptr(ndr, "name", r->in.name); + ndr->depth++; + ndr_print_lsa_String(ndr, "name", r->in.name); + ndr->depth--; ndr->depth--; } if (flags & NDR_OUT) { @@ -10008,7 +10021,10 @@ static enum ndr_err_code ndr_push_samr_GetDisplayEnumerationIndex2(struct ndr_pu } NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle)); NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level)); - NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name)); + if (r->in.name == NULL) { + return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer"); + } + NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name)); } if (flags & NDR_OUT) { if (r->out.idx == NULL) { @@ -10023,6 +10039,7 @@ static enum ndr_err_code ndr_push_samr_GetDisplayEnumerationIndex2(struct ndr_pu static enum ndr_err_code ndr_pull_samr_GetDisplayEnumerationIndex2(struct ndr_pull *ndr, int flags, struct samr_GetDisplayEnumerationIndex2 *r) { TALLOC_CTX *_mem_save_domain_handle_0; + TALLOC_CTX *_mem_save_name_0; TALLOC_CTX *_mem_save_idx_0; if (flags & NDR_IN) { ZERO_STRUCT(r->out); @@ -10035,7 +10052,13 @@ static enum ndr_err_code ndr_pull_samr_GetDisplayEnumerationIndex2(struct ndr_pu NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle)); NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC); NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level)); - NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name)); + if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) { + NDR_PULL_ALLOC(ndr, r->in.name); + } + _mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr); + NDR_PULL_SET_MEM_CTX(ndr, r->in.name, LIBNDR_FLAG_REF_ALLOC); + NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name)); + NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, LIBNDR_FLAG_REF_ALLOC); NDR_PULL_ALLOC(ndr, r->out.idx); ZERO_STRUCTP(r->out.idx); } @@ -10067,7 +10090,10 @@ _PUBLIC_ void ndr_print_samr_GetDisplayEnumerationIndex2(struct ndr_print *ndr, ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle); ndr->depth--; ndr_print_uint16(ndr, "level", r->in.level); - ndr_print_lsa_String(ndr, "name", &r->in.name); + ndr_print_ptr(ndr, "name", r->in.name); + ndr->depth++; + ndr_print_lsa_String(ndr, "name", r->in.name); + ndr->depth--; ndr->depth--; } if (flags & NDR_OUT) { diff --git a/source/librpc/gen_ndr/samr.h b/source/librpc/gen_ndr/samr.h index 37e27aa..522c6a9 100644 --- a/source/librpc/gen_ndr/samr.h +++ b/source/librpc/gen_ndr/samr.h @@ -1358,7 +1358,7 @@ struct samr_GetDisplayEnumerationIndex { struct { struct policy_handle *domain_handle;/* [ref] */ uint16_t level; - struct lsa_String name; + struct lsa_String *name;/* [ref] */ } in; struct { @@ -1470,7 +1470,7 @@ struct samr_GetDisplayEnumerationIndex2 { struct { struct policy_handle *domain_handle;/* [ref] */ uint16_t level; - struct lsa_String name; + struct lsa_String *name;/* [ref] */ } in; struct { diff --git a/source/librpc/idl/samr.idl b/source/librpc/idl/samr.idl index 401de96..e823d1d 100644 --- a/source/librpc/idl/samr.idl +++ b/source/librpc/idl/samr.idl @@ -1019,7 +1019,7 @@ import "misc.idl", "lsa.idl", "security.idl"; NTSTATUS samr_GetDisplayEnumerationIndex( [in,ref] policy_handle *domain_handle, [in] uint16 level, - [in] lsa_String name, + [in,ref] lsa_String *name, [out,ref] uint32 *idx ); @@ -1117,7 +1117,7 @@ import "misc.idl", "lsa.idl", "security.idl"; NTSTATUS samr_GetDisplayEnumerationIndex2( [in,ref] policy_handle *domain_handle, [in] uint16 level, - [in] lsa_String name, + [in,ref] lsa_String *name, [out,ref] uint32 *idx ); diff --git a/source/rpcclient/cmd_samr.c b/source/rpcclient/cmd_samr.c index 4a820cd..9220c20 100644 --- a/source/rpcclient/cmd_samr.c +++ b/source/rpcclient/cmd_samr.c @@ -2566,6 +2566,67 @@ static NTSTATUS cmd_samr_chgpasswd3(struct rpc_pipe_client *cli, return result; } +static NTSTATUS cmd_samr_get_dispinfo_idx(struct rpc_pipe_client *cli, + TALLOC_CTX *mem_ctx, + int argc, const char **argv) +{ + NTSTATUS status; + struct policy_handle connect_handle; + struct policy_handle domain_handle; + uint16_t level = 1; + struct lsa_String name; + uint32_t idx = 0; + + if (argc < 2 || argc > 3) { + printf("Usage: %s name level\n", argv[0]); + return NT_STATUS_INVALID_PARAMETER; + } + + init_lsa_String(&name, argv[1]); + + if (argc == 3) { + level = atoi(argv[2]); + } + + status = rpccli_try_samr_connects(cli, mem_ctx, + SEC_RIGHTS_MAXIMUM_ALLOWED, + &connect_handle); + + if (!NT_STATUS_IS_OK(status)) { + goto done; + } + + status = rpccli_samr_OpenDomain(cli, mem_ctx, + &connect_handle, + SEC_RIGHTS_MAXIMUM_ALLOWED, + &domain_sid, + &domain_handle); + + if (!NT_STATUS_IS_OK(status)) + goto done; + + + status = rpccli_samr_GetDisplayEnumerationIndex(cli, mem_ctx, + &domain_handle, + level, + &name, + &idx); + + if (NT_STATUS_IS_OK(status)) { + printf("idx: %d\n", idx); + } + done: + + if (is_valid_policy_hnd(&domain_handle)) { + rpccli_samr_Close(cli, mem_ctx, &domain_handle); + } + if (is_valid_policy_hnd(&connect_handle)) { + rpccli_samr_Close(cli, mem_ctx, &connect_handle); + } + + return status; + +} /* List of commands exported by this module */ struct cmd_set samr_commands[] = { @@ -2603,5 +2664,6 @@ struct cmd_set samr_commands[] = { { "lookupdomain", RPC_RTYPE_NTSTATUS, cmd_samr_lookup_domain, NULL, PI_SAMR, NULL, "Lookup Domain Name", "" }, { "chgpasswd2", RPC_RTYPE_NTSTATUS, cmd_samr_chgpasswd2, NULL, PI_SAMR, NULL, "Change user password", "" }, { "chgpasswd3", RPC_RTYPE_NTSTATUS, cmd_samr_chgpasswd3, NULL, PI_SAMR, NULL, "Change user password", "" }, + { "getdispinfoidx", RPC_RTYPE_NTSTATUS, cmd_samr_get_dispinfo_idx, NULL, PI_SAMR, NULL, "Get Display Information Index", "" }, { NULL } }; -- Samba Shared Repository