samba-tool: Improve "delegation" command error handling
authorGiampaolo Lauria <lauria2@yahoo.com>
Fri, 21 Oct 2011 15:49:29 +0000 (11:49 -0400)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 3 Nov 2011 14:12:27 +0000 (15:12 +0100)
Display a more meaningful error msg when user account not found
Assert when returned number of entries is not 0 or 1

source4/scripting/python/samba/netcmd/delegation.py

index 9fccaf953652919fd940176d89e8f04765267665..ec84f671bc9edb737ed7e4b66bbc35b27cc9d9d5 100644 (file)
@@ -52,13 +52,15 @@ class cmd_delegation_show(Command):
         # TODO once I understand how, use the domain info to naildown
         # to the correct domain
         (cleanedaccount, realm, domain) = _get_user_realm_domain(accountname)
-        self.outf.write("Searching for: %s\n" % (cleanedaccount))
-        res = sam.search(expression="sAMAccountName=%s" % ldb.binary_encode(cleanedaccount),
-                            scope=ldb.SCOPE_SUBTREE,
-                            attrs=["userAccountControl", "msDS-AllowedToDelegateTo"])
-        if len(res) != 1:
-            raise CommandError("Account %s found %d times" % (accountname, len(res)))
-
+        
+        res = sam.search(expression="sAMAccountName=%s" % 
+                    ldb.binary_encode(cleanedaccount),
+                    scope=ldb.SCOPE_SUBTREE,
+                    attrs=["userAccountControl", "msDS-AllowedToDelegateTo"])
+        if len(res) == 0:
+            raise CommandError("Unable to find account name '%s'" % accountname)
+        assert(len(res) == 1)
+        
         uac = int(res[0].get("userAccountControl")[0])
         allowed = res[0].get("msDS-AllowedToDelegateTo")
 
@@ -159,17 +161,19 @@ class cmd_delegation_add_service(Command):
         # to the correct domain
         (cleanedaccount, realm, domain) = _get_user_realm_domain(accountname)
 
-        res = sam.search(expression="sAMAccountName=%s" % ldb.binary_encode(cleanedaccount),
-                            scope=ldb.SCOPE_SUBTREE,
-                            attrs=["msDS-AllowedToDelegateTo"])
-        if len(res) != 1:
-            raise CommandError("Account %s found %d times" % (accountname, len(res)))
+        res = sam.search(expression="sAMAccountName=%s" % 
+                         ldb.binary_encode(cleanedaccount),
+                         scope=ldb.SCOPE_SUBTREE,
+                         attrs=["msDS-AllowedToDelegateTo"])
+        if len(res) == 0:
+            raise CommandError("Unable to find account name '%s'" % accountname)
+        assert(len(res) == 1)    
 
         msg = ldb.Message()
         msg.dn = res[0].dn
         msg["msDS-AllowedToDelegateTo"] = ldb.MessageElement([principal],
-                                              ldb.FLAG_MOD_ADD,
-                                              "msDS-AllowedToDelegateTo")
+                                          ldb.FLAG_MOD_ADD,
+                                          "msDS-AllowedToDelegateTo")
         try:
             sam.modify(msg)
         except Exception, err:
@@ -194,17 +198,19 @@ class cmd_delegation_del_service(Command):
         # to the correct domain
         (cleanedaccount, realm, domain) = _get_user_realm_domain(accountname)
 
-        res = sam.search(expression="sAMAccountName=%s" % ldb.binary_encode(cleanedaccount),
-                            scope=ldb.SCOPE_SUBTREE,
-                            attrs=["msDS-AllowedToDelegateTo"])
-        if len(res) != 1:
-            raise CommandError("Account %s found %d times" % (accountname, len(res)))
+        res = sam.search(expression="sAMAccountName=%s" % 
+                         ldb.binary_encode(cleanedaccount),
+                         scope=ldb.SCOPE_SUBTREE,
+                         attrs=["msDS-AllowedToDelegateTo"])
+        if len(res) == 0:
+            raise CommandError("Unable to find account name '%s'" % accountname)
+        assert(len(res) == 1)       
 
         msg = ldb.Message()
         msg.dn = res[0].dn
         msg["msDS-AllowedToDelegateTo"] = ldb.MessageElement([principal],
-                                              ldb.FLAG_MOD_DELETE,
-                                              "msDS-AllowedToDelegateTo")
+                                          ldb.FLAG_MOD_DELETE,
+                                          "msDS-AllowedToDelegateTo")
         try:
             sam.modify(msg)
         except Exception, err: