From 47f9ee91ed9d5bdaea82413f36d17bc72498a79a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Baumbach?= Date: Tue, 17 Dec 2019 16:27:32 +0100 Subject: samba-tool group removemembers: adapt functionality to addmembers command MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds --member-dn and --object-types options. Signed-off-by: Björn Baumbach Reviewed-by: Ralph Boehme --- python/samba/netcmd/group.py | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/python/samba/netcmd/group.py b/python/samba/netcmd/group.py index 4bf417cc878..eacb89efb5b 100644 --- a/python/samba/netcmd/group.py +++ b/python/samba/netcmd/group.py @@ -295,7 +295,7 @@ sudo samba-tool group removemembers supergroup User1 Example2 shows how to remove a single user account, User2, from the supergroup AD group. It uses the sudo command to run as root when issuing the command. """ - synopsis = "%prog [options]" + synopsis = "%prog (]|--member-dn=) [options]" takes_optiongroups = { "sambaopts": options.SambaOptions, @@ -306,12 +306,32 @@ Example2 shows how to remove a single user account, User2, from the supergroup A takes_options = [ Option("-H", "--URL", help="LDB URL for database or target server", type=str, metavar="URL", dest="H"), + Option("--member-dn", + help=("DN of the group member to be removed.\n" + "The --object-types option will be ignored."), + type=str), + Option("--object-types", + help=("Comma separated list of object types.\n" + "The types are used to filter the search for the " + "specified members.\n" + "Valid values are: user, group, computer, serviceaccount, " + "contact and all.\n" + "Default: user,group,computer"), + default="user,group,computer", + type=str), ] - takes_args = ["groupname", "listofmembers"] + takes_args = ["groupname", "listofmembers?"] - def run(self, groupname, listofmembers, credopts=None, sambaopts=None, - versionopts=None, H=None): + def run(self, + groupname, + listofmembers=None, + credopts=None, + sambaopts=None, + versionopts=None, + H=None, + member_dn=None, + object_types="user,group,computer"): lp = sambaopts.get_loadparm() creds = credopts.get_credentials(lp, fallback_machine=True) @@ -319,8 +339,14 @@ Example2 shows how to remove a single user account, User2, from the supergroup A try: samdb = SamDB(url=H, session_info=system_session(), credentials=creds, lp=lp) - samdb.add_remove_group_members(groupname, listofmembers.split(","), - add_members_operation=False) + if member_dn is not None: + groupmembers = [ member_dn ] + else: + groupmembers = listofmembers.split(',') + samdb.add_remove_group_members(groupname, + groupmembers, + add_members_operation=False, + member_types=group_member_types) except Exception as e: # FIXME: Catch more specific exception raise CommandError('Failed to remove members "%s" from group "%s"' % (listofmembers, groupname), e) -- cgit v1.2.1