The branch, master has been updated via f9af242 s3-libnetapi: prefer dcerpc_samr_X functions in lib/netapi/user.c. via 32fb4f5 s3-libnetapi: prefer dcerpc_samr_X functions in lib/netapi/samr.c. via b76657f s3-libnetapi: prefer dcerpc_samr_X functions in lib/netapi/localgroup.c. via 7f63018 s3-libnetapi: prefer dcerpc_samr_X functions in lib/netapi/group.c. from 9fe4b69 pidl:Samba4/NDR/Parser: add support for 'ms_union' style aligment
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit f9af242886ac014baa3247bfdc1fe8be6cb8366e Author: Günther Deschner <g...@samba.org> Date: Fri Jan 14 17:05:32 2011 +0100 s3-libnetapi: prefer dcerpc_samr_X functions in lib/netapi/user.c. Guenther Autobuild-User: Günther Deschner <g...@samba.org> Autobuild-Date: Tue Feb 1 13:41:42 CET 2011 on sn-devel-104 commit 32fb4f5206bf754cecc761e5c2634f84a073e1eb Author: Günther Deschner <g...@samba.org> Date: Fri Jan 14 16:16:31 2011 +0100 s3-libnetapi: prefer dcerpc_samr_X functions in lib/netapi/samr.c. Guenther commit b76657f8d9fea54430b048e61ed7c8c78eb582e5 Author: Günther Deschner <g...@samba.org> Date: Fri Jan 14 16:11:19 2011 +0100 s3-libnetapi: prefer dcerpc_samr_X functions in lib/netapi/localgroup.c. Guenther commit 7f6301811781675a7f8f5509e67fb34820a9806d Author: Günther Deschner <g...@samba.org> Date: Fri Jan 14 15:49:37 2011 +0100 s3-libnetapi: prefer dcerpc_samr_X functions in lib/netapi/group.c. Guenther ----------------------------------------------------------------------- Summary of changes: source3/lib/netapi/group.c | 487 ++++++++++++++++++++++++++++--------- source3/lib/netapi/localgroup.c | 201 ++++++++++++---- source3/lib/netapi/samr.c | 62 ++++- source3/lib/netapi/user.c | 507 +++++++++++++++++++++++++++++---------- 4 files changed, 943 insertions(+), 314 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/lib/netapi/group.c b/source3/lib/netapi/group.c index b9dd1e9..5507f71 100644 --- a/source3/lib/netapi/group.c +++ b/source3/lib/netapi/group.c @@ -23,7 +23,7 @@ #include "lib/netapi/netapi.h" #include "lib/netapi/netapi_private.h" #include "lib/netapi/libnetapi.h" -#include "../librpc/gen_ndr/cli_samr.h" +#include "../librpc/gen_ndr/ndr_samr_c.h" #include "rpc_client/init_lsa.h" #include "../libcli/security/security.h" @@ -34,12 +34,13 @@ WERROR NetGroupAdd_r(struct libnetapi_ctx *ctx, struct NetGroupAdd *r) { struct rpc_pipe_client *pipe_cli = NULL; - NTSTATUS status; + NTSTATUS status, result; WERROR werr; struct policy_handle connect_handle, domain_handle, group_handle; struct lsa_String lsa_group_name; struct dom_sid2 *domain_sid = NULL; uint32_t rid = 0; + struct dcerpc_binding_handle *b = NULL; struct GROUP_INFO_0 *info0 = NULL; struct GROUP_INFO_1 *info1 = NULL; @@ -80,6 +81,8 @@ WERROR NetGroupAdd_r(struct libnetapi_ctx *ctx, goto done; } + b = pipe_cli->binding_handle; + werr = libnetapi_samr_open_domain(ctx, pipe_cli, SAMR_ACCESS_ENUM_DOMAINS | SAMR_ACCESS_LOOKUP_DOMAIN, @@ -107,18 +110,23 @@ WERROR NetGroupAdd_r(struct libnetapi_ctx *ctx, break; } - status = rpccli_samr_CreateDomainGroup(pipe_cli, talloc_tos(), + status = dcerpc_samr_CreateDomainGroup(b, talloc_tos(), &domain_handle, &lsa_group_name, SEC_STD_DELETE | SAMR_GROUP_ACCESS_SET_INFO, &group_handle, - &rid); + &rid, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto done; + } switch (r->in.level) { case 1: @@ -126,10 +134,11 @@ WERROR NetGroupAdd_r(struct libnetapi_ctx *ctx, init_lsa_String(&info.description, info1->grpi1_comment); - status = rpccli_samr_SetGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_SetGroupInfo(b, talloc_tos(), &group_handle, GROUPINFODESCRIPTION, - &info); + &info, + &result); } break; case 2: @@ -137,22 +146,28 @@ WERROR NetGroupAdd_r(struct libnetapi_ctx *ctx, init_lsa_String(&info.description, info2->grpi2_comment); - status = rpccli_samr_SetGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_SetGroupInfo(b, talloc_tos(), &group_handle, GROUPINFODESCRIPTION, - &info); + &info, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto failed; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto failed; + } } if (info2->grpi2_attributes != 0) { info.attributes.attributes = info2->grpi2_attributes; - status = rpccli_samr_SetGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_SetGroupInfo(b, talloc_tos(), &group_handle, GROUPINFOATTRIBUTES, - &info); + &info, + &result); } break; @@ -161,22 +176,28 @@ WERROR NetGroupAdd_r(struct libnetapi_ctx *ctx, init_lsa_String(&info.description, info3->grpi3_comment); - status = rpccli_samr_SetGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_SetGroupInfo(b, talloc_tos(), &group_handle, GROUPINFODESCRIPTION, - &info); + &info, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto failed; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto failed; + } } if (info3->grpi3_attributes != 0) { info.attributes.attributes = info3->grpi3_attributes; - status = rpccli_samr_SetGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_SetGroupInfo(b, talloc_tos(), &group_handle, GROUPINFOATTRIBUTES, - &info); + &info, + &result); } break; default: @@ -187,17 +208,21 @@ WERROR NetGroupAdd_r(struct libnetapi_ctx *ctx, werr = ntstatus_to_werror(status); goto failed; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto failed; + } werr = WERR_OK; goto done; failed: - rpccli_samr_DeleteDomainGroup(pipe_cli, talloc_tos(), - &group_handle); + dcerpc_samr_DeleteDomainGroup(b, talloc_tos(), + &group_handle, &result); done: if (is_valid_policy_hnd(&group_handle)) { - rpccli_samr_Close(pipe_cli, talloc_tos(), &group_handle); + dcerpc_samr_Close(b, talloc_tos(), &group_handle, &result); } if (ctx->disable_policy_handle_cache) { @@ -224,12 +249,13 @@ WERROR NetGroupDel_r(struct libnetapi_ctx *ctx, struct NetGroupDel *r) { struct rpc_pipe_client *pipe_cli = NULL; - NTSTATUS status; + NTSTATUS status, result; WERROR werr; struct policy_handle connect_handle, domain_handle, group_handle; struct lsa_String lsa_group_name; struct dom_sid2 *domain_sid = NULL; int i = 0; + struct dcerpc_binding_handle *b = NULL; struct samr_Ids rids; struct samr_Ids types; @@ -251,6 +277,8 @@ WERROR NetGroupDel_r(struct libnetapi_ctx *ctx, goto done; } + b = pipe_cli->binding_handle; + werr = libnetapi_samr_open_domain(ctx, pipe_cli, SAMR_ACCESS_ENUM_DOMAINS | SAMR_ACCESS_LOOKUP_DOMAIN, @@ -264,23 +292,28 @@ WERROR NetGroupDel_r(struct libnetapi_ctx *ctx, init_lsa_String(&lsa_group_name, r->in.group_name); - status = rpccli_samr_LookupNames(pipe_cli, talloc_tos(), + status = dcerpc_samr_LookupNames(b, talloc_tos(), &domain_handle, 1, &lsa_group_name, &rids, - &types); + &types, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto done; + } if (types.ids[0] != SID_NAME_DOM_GRP) { werr = WERR_INVALID_DATATYPE; goto done; } - status = rpccli_samr_OpenGroup(pipe_cli, talloc_tos(), + status = dcerpc_samr_OpenGroup(b, talloc_tos(), &domain_handle, SEC_STD_DELETE | SAMR_GROUP_ACCESS_GET_MEMBERS | @@ -288,20 +321,30 @@ WERROR NetGroupDel_r(struct libnetapi_ctx *ctx, SAMR_GROUP_ACCESS_ADD_MEMBER | SAMR_GROUP_ACCESS_LOOKUP_INFO, rids.ids[0], - &group_handle); + &group_handle, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto done; + } - status = rpccli_samr_QueryGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_QueryGroupInfo(b, talloc_tos(), &group_handle, GROUPINFOATTRIBUTES, - &info); + &info, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto done; + } #if 0 /* breaks against NT4 */ @@ -310,47 +353,67 @@ WERROR NetGroupDel_r(struct libnetapi_ctx *ctx, goto done; } #endif - status = rpccli_samr_QueryGroupMember(pipe_cli, talloc_tos(), + status = dcerpc_samr_QueryGroupMember(b, talloc_tos(), &group_handle, - &rid_array); + &rid_array, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto done; + } { struct lsa_Strings names; struct samr_Ids member_types; - status = rpccli_samr_LookupRids(pipe_cli, talloc_tos(), + status = dcerpc_samr_LookupRids(b, talloc_tos(), &domain_handle, rid_array->count, rid_array->rids, &names, - &member_types); + &member_types, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto done; + } } for (i=0; i < rid_array->count; i++) { - status = rpccli_samr_DeleteGroupMember(pipe_cli, talloc_tos(), + status = dcerpc_samr_DeleteGroupMember(b, talloc_tos(), &group_handle, - rid_array->rids[i]); + rid_array->rids[i], + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto done; + } } - status = rpccli_samr_DeleteDomainGroup(pipe_cli, talloc_tos(), - &group_handle); + status = dcerpc_samr_DeleteDomainGroup(b, talloc_tos(), + &group_handle, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto done; + } ZERO_STRUCT(group_handle); @@ -358,7 +421,7 @@ WERROR NetGroupDel_r(struct libnetapi_ctx *ctx, done: if (is_valid_policy_hnd(&group_handle)) { - rpccli_samr_Close(pipe_cli, talloc_tos(), &group_handle); + dcerpc_samr_Close(b, talloc_tos(), &group_handle, &result); } if (ctx->disable_policy_handle_cache) { @@ -385,11 +448,12 @@ WERROR NetGroupSetInfo_r(struct libnetapi_ctx *ctx, struct NetGroupSetInfo *r) { struct rpc_pipe_client *pipe_cli = NULL; - NTSTATUS status; + NTSTATUS status, result; WERROR werr; struct policy_handle connect_handle, domain_handle, group_handle; struct lsa_String lsa_group_name; struct dom_sid2 *domain_sid = NULL; + struct dcerpc_binding_handle *b = NULL; struct samr_Ids rids; struct samr_Ids types; @@ -416,6 +480,8 @@ WERROR NetGroupSetInfo_r(struct libnetapi_ctx *ctx, goto done; } + b = pipe_cli->binding_handle; + werr = libnetapi_samr_open_domain(ctx, pipe_cli, SAMR_ACCESS_ENUM_DOMAINS | SAMR_ACCESS_LOOKUP_DOMAIN, @@ -429,99 +495,127 @@ WERROR NetGroupSetInfo_r(struct libnetapi_ctx *ctx, init_lsa_String(&lsa_group_name, r->in.group_name); - status = rpccli_samr_LookupNames(pipe_cli, talloc_tos(), + status = dcerpc_samr_LookupNames(b, talloc_tos(), &domain_handle, 1, &lsa_group_name, &rids, - &types); + &types, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto done; + } if (types.ids[0] != SID_NAME_DOM_GRP) { werr = WERR_INVALID_DATATYPE; goto done; } - status = rpccli_samr_OpenGroup(pipe_cli, talloc_tos(), + status = dcerpc_samr_OpenGroup(b, talloc_tos(), &domain_handle, SAMR_GROUP_ACCESS_SET_INFO | SAMR_GROUP_ACCESS_LOOKUP_INFO, rids.ids[0], - &group_handle); + &group_handle, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto done; + } switch (r->in.level) { case 0: g0 = (struct GROUP_INFO_0 *)r->in.buffer; init_lsa_String(&info.name, g0->grpi0_name); - status = rpccli_samr_SetGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_SetGroupInfo(b, talloc_tos(), &group_handle, GROUPINFONAME, - &info); + &info, + &result); break; case 1: g1 = (struct GROUP_INFO_1 *)r->in.buffer; init_lsa_String(&info.description, g1->grpi1_comment); - status = rpccli_samr_SetGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_SetGroupInfo(b, talloc_tos(), &group_handle, GROUPINFODESCRIPTION, - &info); + &info, + &result); break; case 2: g2 = (struct GROUP_INFO_2 *)r->in.buffer; init_lsa_String(&info.description, g2->grpi2_comment); - status = rpccli_samr_SetGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_SetGroupInfo(b, talloc_tos(), &group_handle, GROUPINFODESCRIPTION, - &info); + &info, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto done; + } + info.attributes.attributes = g2->grpi2_attributes; - status = rpccli_samr_SetGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_SetGroupInfo(b, talloc_tos(), &group_handle, GROUPINFOATTRIBUTES, - &info); + &info, + &result); break; case 3: g3 = (struct GROUP_INFO_3 *)r->in.buffer; init_lsa_String(&info.description, g3->grpi3_comment); - status = rpccli_samr_SetGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_SetGroupInfo(b, talloc_tos(), &group_handle, GROUPINFODESCRIPTION, - &info); + &info, + &result); if (!NT_STATUS_IS_OK(status)) { werr = ntstatus_to_werror(status); goto done; } + if (!NT_STATUS_IS_OK(result)) { + werr = ntstatus_to_werror(result); + goto done; + } + info.attributes.attributes = g3->grpi3_attributes; - status = rpccli_samr_SetGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_SetGroupInfo(b, talloc_tos(), &group_handle, GROUPINFOATTRIBUTES, - &info); + &info, + &result); break; case 1002: g1002 = (struct GROUP_INFO_1002 *)r->in.buffer; init_lsa_String(&info.description, g1002->grpi1002_comment); - status = rpccli_samr_SetGroupInfo(pipe_cli, talloc_tos(), + status = dcerpc_samr_SetGroupInfo(b, talloc_tos(), &group_handle, GROUPINFODESCRIPTION, - &info); + &info, + &result); -- Samba Shared Repository