[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