From: Rob van der Linde Date: Mon, 20 Nov 2023 23:42:03 +0000 (+1300) Subject: netcmd: models: add SIDField field X-Git-Tag: talloc-2.4.2~576 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=91cc73352efca030a41b2f5aa2825da3aa0e52a2;p=thirdparty%2Fsamba.git netcmd: models: add SIDField field Signed-off-by: Rob van der Linde Reviewed-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- 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."""