summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2008-08-11 19:42:42 +0200
committerGünther Deschner <gd@samba.org>2008-08-11 19:47:53 +0200
commitbd31d8f9ec9a24ca68e1d5441c0cafd98132060f (patch)
tree26815beea5feee35718345106c392c6932c6fea3 /source
parent53dc9a11810b93a1771304fbfbf4ae84f551612b (diff)
downloadsamba-bd31d8f9ec9a24ca68e1d5441c0cafd98132060f.tar.gz
netapi: implement NetLocalGroupDelMembers_r().
Guenther
Diffstat (limited to 'source')
-rw-r--r--source/lib/netapi/localgroup.c41
1 files changed, 36 insertions, 5 deletions
diff --git a/source/lib/netapi/localgroup.c b/source/lib/netapi/localgroup.c
index aeaa96a84c1..f9a0506e7c2 100644
--- a/source/lib/netapi/localgroup.c
+++ b/source/lib/netapi/localgroup.c
@@ -1015,7 +1015,8 @@ static NTSTATUS libnetapi_lsa_lookup_names3(TALLOC_CTX *mem_ctx,
****************************************************************/
static WERROR NetLocalGroupModifyMembers_r(struct libnetapi_ctx *ctx,
- struct NetLocalGroupAddMembers *add)
+ struct NetLocalGroupAddMembers *add,
+ struct NetLocalGroupDelMembers *del)
{
struct NetLocalGroupAddMembers *r = NULL;
@@ -1034,9 +1035,11 @@ static WERROR NetLocalGroupModifyMembers_r(struct libnetapi_ctx *ctx,
struct LOCALGROUP_MEMBERS_INFO_3 *info3 = NULL;
struct dom_sid *add_sids = NULL;
+ struct dom_sid *del_sids = NULL;
size_t num_add_sids = 0;
+ size_t num_del_sids = 0;
- if (!add) {
+ if ((!add && !del) || (add && del)) {
return WERR_INVALID_PARAM;
}
@@ -1044,6 +1047,10 @@ static WERROR NetLocalGroupModifyMembers_r(struct libnetapi_ctx *ctx,
r = add;
}
+ if (del) {
+ r = (struct NetLocalGroupAddMembers *)del;
+ }
+
if (!r->in.group_name) {
return WERR_INVALID_PARAM;
}
@@ -1183,6 +1190,18 @@ static WERROR NetLocalGroupModifyMembers_r(struct libnetapi_ctx *ctx,
}
}
+ if (del) {
+ for (i=0; i < r->in.total_entries; i++) {
+ status = add_sid_to_array_unique(ctx, &member_sids[i],
+ &del_sids,
+ &num_del_sids);
+ if (!NT_STATUS_IS_OK(status)) {
+ werr = ntstatus_to_werror(status);
+ goto done;
+ }
+ }
+ }
+
/* add list */
for (i=0; i < num_add_sids; i++) {
@@ -1195,6 +1214,18 @@ static WERROR NetLocalGroupModifyMembers_r(struct libnetapi_ctx *ctx,
}
}
+ /* del list */
+
+ for (i=0; i < num_del_sids; i++) {
+ status = rpccli_samr_DeleteAliasMember(pipe_cli, ctx,
+ &alias_handle,
+ &del_sids[i]);
+ if (!NT_STATUS_IS_OK(status)) {
+ werr = ntstatus_to_werror(status);
+ goto done;
+ }
+ }
+
werr = WERR_OK;
done:
@@ -1221,7 +1252,7 @@ static WERROR NetLocalGroupModifyMembers_r(struct libnetapi_ctx *ctx,
WERROR NetLocalGroupAddMembers_r(struct libnetapi_ctx *ctx,
struct NetLocalGroupAddMembers *r)
{
- return NetLocalGroupModifyMembers_r(ctx, r);
+ return NetLocalGroupModifyMembers_r(ctx, r, NULL);
}
/****************************************************************
@@ -1239,7 +1270,7 @@ WERROR NetLocalGroupAddMembers_l(struct libnetapi_ctx *ctx,
WERROR NetLocalGroupDelMembers_r(struct libnetapi_ctx *ctx,
struct NetLocalGroupDelMembers *r)
{
- return WERR_NOT_SUPPORTED;
+ return NetLocalGroupModifyMembers_r(ctx, NULL, r);
}
/****************************************************************
@@ -1248,7 +1279,7 @@ WERROR NetLocalGroupDelMembers_r(struct libnetapi_ctx *ctx,
WERROR NetLocalGroupDelMembers_l(struct libnetapi_ctx *ctx,
struct NetLocalGroupDelMembers *r)
{
- return WERR_NOT_SUPPORTED;
+ return NetLocalGroupDelMembers_r(ctx, r);
}
/****************************************************************