]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
netcmd: models: add SIDField field
authorRob van der Linde <rob@catalyst.net.nz>
Mon, 20 Nov 2023 23:42:03 +0000 (12:42 +1300)
committerDouglas Bagnall <dbagnall@samba.org>
Wed, 22 Nov 2023 23:35:33 +0000 (23:35 +0000)
Signed-off-by: Rob van der Linde <rob@catalyst.net.nz>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
python/samba/netcmd/domain/models/fields.py

index 52f288c6d60d31a82d47303eb57d1146f5a69b3a..a718de28348d8c989e2b85f80ef455d83c556e43 100644 (file)
@@ -312,6 +312,31 @@ class GUIDField(Field):
             return MessageElement(ndr_pack(GUID(value)), flags, self.name)
 
 
+class SIDField(Field):
+    """A SID field encodes and decodes SID data."""
+
+    def from_db_value(self, ldb, value):
+        """Convert MessageElement with a GUID into a str or list of str."""
+        if value is None:
+            return
+        elif len(value) > 1 or self.many:
+            return [str(ndr_unpack(security.dom_sid, item)) for item in value]
+        else:
+            return str(ndr_unpack(security.dom_sid, value[0]))
+
+    def to_db_value(self, ldb, value, flags):
+        """Convert str with GUID into MessageElement."""
+        if value is None:
+            return
+        elif isinstance(value, list):
+            return MessageElement(
+                [ndr_pack(security.dom_sid(item)) for item in value],
+                flags, self.name)
+        else:
+            return MessageElement(ndr_pack(security.dom_sid(value)),
+                                  flags, self.name)
+
+
 class SDDLField(Field):
     """A SDDL field encodes and decodes SDDL data."""