[PATCH] fix for bug 12292
Douglas Bagnall
douglas.bagnall at catalyst.net.nz
Tue Sep 27 21:16:56 UTC 2016
hi Rowland,
> From c475d71dc27d4c8bb95953ca6f67c3ffd871e6ed Mon Sep 17 00:00:00 2001
> From: Rowland Penny <rpenny at samba.org>
> Date: Tue, 27 Sep 2016 19:48:50 +0100
> Subject: [PATCH 1/2] Bug 12292: stop <unknown_user> throwing error
>
> Signed-off-by: Rowland Penny <rpenny at samba.org>
> ---
> python/samba/samdb.py | 15 ++++-----------
> 1 file changed, 4 insertions(+), 11 deletions(-)
>
> diff --git a/python/samba/samdb.py b/python/samba/samdb.py
> index 3d7ea3e..42b39f3 100644
> --- a/python/samba/samdb.py
> +++ b/python/samba/samdb.py
> @@ -463,22 +463,15 @@ member: %s
> else:
> self.transaction_commit()
>
> + def deleteobject(self, object_dn):
> + """Deletes an AD object
>
> - def deleteuser(self, username):
> - """Deletes a user
Won't this also break python/samba/tests/samba_tool/rodc.py?
> -
> - :param username: Name of the target user
> + :param username: The DN of the target object
The param is now "object_dn", not "username".
> """
>
> - filter = "(&(sAMAccountName=%s)(objectCategory=%s,%s))" % (ldb.binary_encode(username), "CN=Person,CN=Schema,CN=Configuration", self.domain_dn())
> self.transaction_start()
> try:
> - target = self.search(base=self.domain_dn(), scope=ldb.SCOPE_SUBTREE,
> - expression=filter, attrs=[])
> - if len(target) == 0:
> - raise Exception('Unable to find user "%s"' % username)
It seems to me a better approach would be to keep this stuff but raise
a specific Exception here. That is, make one like this:
class UserNotFoundException(Exception):
pass
and raise it in that line above. Then...
> - assert(len(target) == 1)
> - self.delete(target[0].dn)
> + self.delete(object_dn)
> except:
> self.transaction_cancel()
> raise
> -- 2.1.4
>
>
> 0002-Bug-12292-stop-unknown_user-throwing-error.patch
>
>
> From 86ab6a24c012883874cd82d900a6338bf1cf6515 Mon Sep 17 00:00:00 2001
> From: Rowland Penny <rpenny at samba.org>
> Date: Tue, 27 Sep 2016 19:56:21 +0100
> Subject: [PATCH 2/2] Bug 12292: stop <unknown_user> throwing error
>
> Signed-off-by: Rowland Penny <rpenny at samba.org>
> ---
> python/samba/netcmd/user.py | 20 ++++++++++++++++----
> 1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/python/samba/netcmd/user.py b/python/samba/netcmd/user.py
> index 5adc287..8ce4312 100644
> --- a/python/samba/netcmd/user.py
> +++ b/python/samba/netcmd/user.py
> @@ -404,12 +404,24 @@ Example2 shows how to delete a user in the domain against the local server. su
> def run(self, username, credopts=None, sambaopts=None, versionopts=None,
> H=None):
> lp = sambaopts.get_loadparm()
> - creds = credopts.get_credentials(lp, fallback_machine=True)
> + samdb = SamDB(url=H, session_info=system_session(),
> + credentials=creds, lp=lp)
> +
> + domaindn = samdb.domain_dn()
> +
> + filter = ("(&(sAMAccountName=%s)(sAMAccountType=805306368))" %
> + (ldb.binary_encode(username)))
> +
> + res = samdb.search(base=domaindn, expression=filter,
> + scope=ldb.SCOPE_SUBTREE, attrs=["dn"])
> + if len(res) == 0:
> + raise CommandError('Unable to find user "%s"' % (username))
> +
> + for msg in res:
> + user_dn = str(msg.get("dn"))
>
> try:
> - samdb = SamDB(url=H, session_info=system_session(),
> - credentials=creds, lp=lp)
> - samdb.deleteuser(username)
> + samdb.deleteobject(user_dn)
here you would go:
except samdb.UserNotFoundException:
raise CommandError('Unable to find user "%s"' % username)
or whatever. You can string a series of excepts together to catch specific
cases.
> except Exception, e:
> raise CommandError('Failed to remove user "%s"' % username, e)
> self.outf.write("Deleted user %s\n" % username)
> -- 2.1.4
>
cheers,
Douglas
More information about the samba-technical
mailing list