]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
pytest: add key_credential_link_Dn tests
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Fri, 11 Jul 2025 01:28:33 +0000 (13:28 +1200)
committerDouglas Bagnall <dbagnall@samba.org>
Thu, 7 Aug 2025 23:28:33 +0000 (23:28 +0000)
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
python/samba/tests/dsdb_dn.py

index 50965cef33aa30f3d23fc03e2e8c45ab2d1d2331..4670775ff88be203d029cb39399af0528a9d6ed7 100644 (file)
@@ -20,6 +20,7 @@
 import os
 import samba
 from samba.samdb import BinaryDn, PlainDn, StringDn
+from samba.key_credential_link import KeyCredentialLinkDn
 from samba.tests import TestCaseInTempDir
 
 
@@ -66,6 +67,88 @@ class DsdbDnTests(TestCaseInTempDir):
                 dn2.prefix = badstring
             self.assertIn(errmsg, str(cm.exception))
 
+    def test_KeyCredentialLinkDn_valid(self):
+        """Simple KeyCredentialLinkDn objects."""
+        sam = self._temp_ldb()
+        for name, dnstring, count in [
+                ('empty', "B:8:00020000:DC=example,DC=com", 0),
+                ('key id',
+                 "B:78:00020000"
+                 "2000" "01" # length, key id
+                 "000102030405060708090A0B0C0D0E0F"
+                 "101112131415161718191A1B1C1D1E1F"
+                 ":DC=example,DC=com", 1),
+                ('key hash',
+                 "B:78:00020000"
+                 "2000" "02" # length, key hash
+                 "000102030405060708090A0B0C0D0E0F"
+                 "101112131415161718191A1B1C1D1E1F"
+                 ":DC=example,DC=com", 1),
+                ('key usage',
+                 "B:16:00020000"
+                 "0100" "04" # length, key_usage
+                 "01"
+                 ":DC=example,DC=com", 1),
+        ]:
+            print(f"{name}: {dnstring}")
+            k = KeyCredentialLinkDn(sam, dnstring)
+            self.assertEqual(k.blob.count, count)
+            b = BinaryDn(sam, dnstring)
+            self.assertEqual(k, b)
+            self.assertEqual(str(k), str(b))
+            self.assertEqual(str(k).upper(), dnstring.upper())
+
+    def test_KeyCredentialLinkDn_invalid(self):
+        """KeyCredentialLinkDn objects that should fail."""
+        sam = self._temp_ldb()
+        for name, dnstring, valid_binary in [
+                ('bad version', "B:8:00030000:DC=example,DC=com", True),
+                ('length mismatch 1',
+                 "B:78:00020000"
+                 "2200" "01" # length, key_id
+                 "000102030405060708090A0B0C0D0E0F"
+                 "101112131415161718191A1B1C1D1E1F"
+                 ":DC=example,DC=com", True),
+                ('length mismatch 2',
+                 "B:80:00020000"
+                 "2000" "01" # length, key_id
+                 "000102030405060708090A0B0C0D0E0F"
+                 "101112131415161718191A1B1C1D1E1F00"
+                 ":DC=example,DC=com", True),
+                ('binary length mismatch',
+                 "B:10:00020000"
+                 ":DC=example,DC=com", False),
+                #('bad key usage',
+                # "B:16:00020000"
+                # "0100" "04" # length, key_usage
+                # "FF"
+                # ":DC=example,DC=com", True),
+                ('bad entry id 00',
+                 "B:16:00020000"
+                 "0100" "00" # length, invalid
+                 "FF"
+                 ":DC=example,DC=com", True),
+                ('bad entry id ff',
+                 "B:16:00020000"
+                 "0100" "FF" # length, invalid
+                 "FF"
+                 ":DC=example,DC=com", True),
+        ]:
+            print(name)
+            with self.assertRaises(ValueError) as cm:
+                k = KeyCredentialLinkDn(sam, dnstring)
+
+            print(cm.exception)
+            try:
+                b = BinaryDn(sam, dnstring)
+            except ValueError:
+                if valid_binary:
+                    self.fail(f"{name}: expected {dnstring} to be valid binary dn")
+            else:
+                if not valid_binary:
+                    self.fail(f"{name}: expected {dnstring} to be invalid binary dn, "
+                              f"got {b}")
+
     def test_PlainDn(self):
         sam = self._temp_ldb("test_PlainDn.ldb")
         url = self.tempdir + "/test_PlainDn.ldb"