diff options
author | Günther Deschner <gd@samba.org> | 2011-01-17 18:16:06 +0100 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2011-02-01 23:29:12 +0100 |
commit | e3aafb2a7f68ce0827f424e92c85434d28f5d906 (patch) | |
tree | cf4f1e4fac8d2a5df2a2ade8145a03c317d89a27 /source3/utils | |
parent | fbbe321d19d0774bf141eddf6dea86e8ae2cf64a (diff) | |
download | samba-e3aafb2a7f68ce0827f424e92c85434d28f5d906.tar.gz samba-e3aafb2a7f68ce0827f424e92c85434d28f5d906.tar.bz2 samba-e3aafb2a7f68ce0827f424e92c85434d28f5d906.zip |
s3-net: prefer dcerpc_samr_X functions in net_rpc_sh_acct.c.
Guenther
Diffstat (limited to 'source3/utils')
-rw-r--r-- | source3/utils/net_rpc_sh_acct.c | 82 |
1 files changed, 57 insertions, 25 deletions
diff --git a/source3/utils/net_rpc_sh_acct.c b/source3/utils/net_rpc_sh_acct.c index f98be9c7d3..5305f51748 100644 --- a/source3/utils/net_rpc_sh_acct.c +++ b/source3/utils/net_rpc_sh_acct.c @@ -19,7 +19,7 @@ #include "includes.h" #include "popt_common.h" #include "utils/net.h" -#include "../librpc/gen_ndr/cli_samr.h" +#include "../librpc/gen_ndr/ndr_samr_c.h" #include "../libcli/security/security.h" /* @@ -42,64 +42,87 @@ static NTSTATUS rpc_sh_acct_do(struct net_context *c, int argc, const char **argv)) { struct policy_handle connect_pol, domain_pol; - NTSTATUS result = NT_STATUS_UNSUCCESSFUL; + NTSTATUS status, result; union samr_DomainInfo *info1 = NULL; union samr_DomainInfo *info3 = NULL; union samr_DomainInfo *info12 = NULL; int store; + struct dcerpc_binding_handle *b = pipe_hnd->binding_handle; ZERO_STRUCT(connect_pol); ZERO_STRUCT(domain_pol); /* Get sam policy handle */ - result = rpccli_samr_Connect2(pipe_hnd, mem_ctx, + status = dcerpc_samr_Connect2(b, mem_ctx, pipe_hnd->desthost, MAXIMUM_ALLOWED_ACCESS, - &connect_pol); + &connect_pol, + &result); + if (!NT_STATUS_IS_OK(status)) { + goto done; + } if (!NT_STATUS_IS_OK(result)) { + status = result; goto done; } /* Get domain policy handle */ - result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx, + status = dcerpc_samr_OpenDomain(b, mem_ctx, &connect_pol, MAXIMUM_ALLOWED_ACCESS, ctx->domain_sid, - &domain_pol); + &domain_pol, + &result); + if (!NT_STATUS_IS_OK(status)) { + goto done; + } if (!NT_STATUS_IS_OK(result)) { + status = result; goto done; } - result = rpccli_samr_QueryDomainInfo(pipe_hnd, mem_ctx, + status = dcerpc_samr_QueryDomainInfo(b, mem_ctx, &domain_pol, 1, - &info1); - + &info1, + &result); + if (!NT_STATUS_IS_OK(status)) { + goto done; + } if (!NT_STATUS_IS_OK(result)) { + status = result; d_fprintf(stderr, _("query_domain_info level 1 failed: %s\n"), nt_errstr(result)); goto done; } - result = rpccli_samr_QueryDomainInfo(pipe_hnd, mem_ctx, + status = dcerpc_samr_QueryDomainInfo(b, mem_ctx, &domain_pol, 3, - &info3); - + &info3, + &result); + if (!NT_STATUS_IS_OK(status)) { + goto done; + } if (!NT_STATUS_IS_OK(result)) { + status = result; d_fprintf(stderr, _("query_domain_info level 3 failed: %s\n"), nt_errstr(result)); goto done; } - result = rpccli_samr_QueryDomainInfo(pipe_hnd, mem_ctx, + status = dcerpc_samr_QueryDomainInfo(b, mem_ctx, &domain_pol, 12, - &info12); - + &info12, + &result); + if (!NT_STATUS_IS_OK(status)) { + goto done; + } if (!NT_STATUS_IS_OK(result)) { + status = result; d_fprintf(stderr, _("query_domain_info level 12 failed: %s\n"), nt_errstr(result)); goto done; @@ -115,38 +138,47 @@ static NTSTATUS rpc_sh_acct_do(struct net_context *c, switch (store) { case 1: - result = rpccli_samr_SetDomainInfo(pipe_hnd, mem_ctx, + status = dcerpc_samr_SetDomainInfo(b, mem_ctx, &domain_pol, 1, - info1); + info1, + &result); break; case 3: - result = rpccli_samr_SetDomainInfo(pipe_hnd, mem_ctx, + status = dcerpc_samr_SetDomainInfo(b, mem_ctx, &domain_pol, 3, - info3); + info3, + &result); break; case 12: - result = rpccli_samr_SetDomainInfo(pipe_hnd, mem_ctx, + status = dcerpc_samr_SetDomainInfo(b, mem_ctx, &domain_pol, 12, - info12); + info12, + &result); break; default: d_fprintf(stderr, _("Got unexpected info level %d\n"), store); - result = NT_STATUS_INTERNAL_ERROR; + status = NT_STATUS_INTERNAL_ERROR; goto done; } + if (!NT_STATUS_IS_OK(status)) { + goto done; + } + + status = result; + done: if (is_valid_policy_hnd(&domain_pol)) { - rpccli_samr_Close(pipe_hnd, mem_ctx, &domain_pol); + dcerpc_samr_Close(b, mem_ctx, &domain_pol, &result); } if (is_valid_policy_hnd(&connect_pol)) { - rpccli_samr_Close(pipe_hnd, mem_ctx, &connect_pol); + dcerpc_samr_Close(b, mem_ctx, &connect_pol, &result); } - return result; + return status; } static int account_show(struct net_context *c, |