From 91cc73352efca030a41b2f5aa2825da3aa0e52a2 Mon Sep 17 00:00:00 2001 From: Rob van der Linde Date: Tue, 21 Nov 2023 12:42:03 +1300 Subject: [PATCH] netcmd: models: add SIDField field Signed-off-by: Rob van der Linde Reviewed-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- python/samba/netcmd/domain/models/fields.py | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/python/samba/netcmd/domain/models/fields.py b/python/samba/netcmd/domain/models/fields.py index 52f288c6d60..a718de28348 100644 --- a/python/samba/netcmd/domain/models/fields.py +++ b/python/samba/netcmd/domain/models/fields.py @@ -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."""