samdb: use int for get and set methods instead of digit str
authorJoe Guo <joeg@catalyst.net.nz>
Thu, 12 Jul 2018 04:57:43 +0000 (16:57 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 12 Jul 2018 23:12:24 +0000 (01:12 +0200)
This will make the API work in a nature way.

Also, because of a defect in ldb API, code like `res[0]["maxPwdAge"][0]`
will return bytes even in Python3, which will cause trouble. By casting
the value to int, we avoid the str/bytes issue.

Signed-off-by: Joe Guo <joeg@catalyst.net.nz>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
python/samba/gp_sec_ext.py
python/samba/samdb.py
python/samba/tests/samba_tool/passwordsettings.py

index 11fd1f5d98a3826c9bf138103e780b829f2e1c15..6d245c4f1e135750e4843bcb24a9a34bd6a81d7b 100644 (file)
@@ -57,14 +57,14 @@ class inf_to_ldb(gp_ext_setter):
         old_val = self.ldb.get_minPwdAge()
         self.logger.info('KDC Minimum Password age was changed from %s to %s' \
                          % (old_val, val))
-        self.gp_db.store(str(self), self.attribute, old_val)
+        self.gp_db.store(str(self), self.attribute, str(old_val))
         self.ldb.set_minPwdAge(val)
 
     def ch_maxPwdAge(self, val):
         old_val = self.ldb.get_maxPwdAge()
         self.logger.info('KDC Maximum Password age was changed from %s to %s' \
                          % (old_val, val))
-        self.gp_db.store(str(self), self.attribute, old_val)
+        self.gp_db.store(str(self), self.attribute, str(old_val))
         self.ldb.set_maxPwdAge(val)
 
     def ch_minPwdLength(self, val):
@@ -72,14 +72,14 @@ class inf_to_ldb(gp_ext_setter):
         self.logger.info(
             'KDC Minimum Password length was changed from %s to %s' \
              % (old_val, val))
-        self.gp_db.store(str(self), self.attribute, old_val)
+        self.gp_db.store(str(self), self.attribute, str(old_val))
         self.ldb.set_minPwdLength(val)
 
     def ch_pwdProperties(self, val):
         old_val = self.ldb.get_pwdProperties()
         self.logger.info('KDC Password Properties were changed from %s to %s' \
                          % (old_val, val))
-        self.gp_db.store(str(self), self.attribute, old_val)
+        self.gp_db.store(str(self), self.attribute, str(old_val))
         self.ldb.set_pwdProperties(val)
 
     def days2rel_nttime(self):
index 7184fcfa4b0f6da3990eed19c24d926628f3fc99..e0c29d8217df27db139a20ca493308969dc9d454 100644 (file)
@@ -917,6 +917,7 @@ schemaUpdateNow: 1
         return dn
 
     def set_minPwdAge(self, value):
+        value = str(value).encode('utf8')
         m = ldb.Message()
         m.dn = ldb.Dn(self, self.domain_dn())
         m["minPwdAge"] = ldb.MessageElement(value, ldb.FLAG_MOD_REPLACE, "minPwdAge")
@@ -929,9 +930,10 @@ schemaUpdateNow: 1
         elif not "minPwdAge" in res[0]:
             return None
         else:
-            return res[0]["minPwdAge"][0]
+            return int(res[0]["minPwdAge"][0])
 
     def set_maxPwdAge(self, value):
+        value = str(value).encode('utf8')
         m = ldb.Message()
         m.dn = ldb.Dn(self, self.domain_dn())
         m["maxPwdAge"] = ldb.MessageElement(value, ldb.FLAG_MOD_REPLACE, "maxPwdAge")
@@ -945,11 +947,12 @@ schemaUpdateNow: 1
         elif not "maxPwdAge" in res[0]:
             return None
         else:
-            return res[0]["maxPwdAge"][0]
+            return int(res[0]["maxPwdAge"][0])
 
 
 
     def set_minPwdLength(self, value):
+        value = str(value).encode('utf8')
         m = ldb.Message()
         m.dn = ldb.Dn(self, self.domain_dn())
         m["minPwdLength"] = ldb.MessageElement(value, ldb.FLAG_MOD_REPLACE, "minPwdLength")
@@ -962,9 +965,10 @@ schemaUpdateNow: 1
         elif not "minPwdLength" in res[0]:
             return None
         else:
-            return res[0]["minPwdLength"][0]
+            return int(res[0]["minPwdLength"][0])
 
     def set_pwdProperties(self, value):
+        value = str(value).encode('utf8')
         m = ldb.Message()
         m.dn = ldb.Dn(self, self.domain_dn())
         m["pwdProperties"] = ldb.MessageElement(value, ldb.FLAG_MOD_REPLACE, "pwdProperties")
@@ -977,7 +981,7 @@ schemaUpdateNow: 1
         elif not "pwdProperties" in res[0]:
             return None
         else:
-            return res[0]["pwdProperties"][0]
+            return int(res[0]["pwdProperties"][0])
 
     def set_dsheuristics(self, dsheuristics):
         m = ldb.Message()
index 7c1afc8f51bf6b3d73c3ec13cf295ffff27436f3..627a338e747a75c47aa2b14b1c82defc86dee06c 100644 (file)
@@ -427,7 +427,7 @@ class PwdSettingsCmdTestCase(SambaToolCmdTest):
         self.assertCmdSuccess(result, out, err)
         self.assertEquals(err,"","Shouldn't be any error messages")
         self.assertIn("successful", out)
-        self.assertEquals(str(new_len), self.ldb.get_minPwdLength())
+        self.assertEquals(new_len, self.ldb.get_minPwdLength())
 
         # check the updated value is now displayed
         (result, out, err) = self.runsublevelcmd("domain", ("passwordsettings",