From: Rob van der Linde Date: Thu, 1 Feb 2024 20:54:41 +0000 (+1300) Subject: netcmd: models: add new NtTimeField model field X-Git-Tag: tdb-1.4.11~1822 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=37855511f636f7bd0082d60d97db2a6113c3cd80;p=thirdparty%2Fsamba.git netcmd: models: add new NtTimeField model 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 1a4d9d7f034..89bbe76734d 100644 --- a/python/samba/netcmd/domain/models/fields.py +++ b/python/samba/netcmd/domain/models/fields.py @@ -30,6 +30,7 @@ from ldb import Dn, MessageElement, binary_encode, string_to_time, timestring from samba.dcerpc import security from samba.dcerpc.misc import GUID from samba.ndr import ndr_pack, ndr_unpack +from samba.nt_time import datetime_from_nt_time, nt_time_from_datetime class Field(metaclass=ABCMeta): @@ -240,6 +241,31 @@ class DateTimeField(Field): flags, self.name) +class NtTimeField(Field): + """18-digit Active Directory timestamps.""" + + def from_db_value(self, ldb, value): + """Convert MessageElement to datetime or list of datetime.""" + if value is None: + return + elif len(value) > 1 or self.many: + return [datetime_from_nt_time(int(item)) for item in value] + else: + return datetime_from_nt_time(int(value[0])) + + def to_db_value(self, ldb, value, flags): + """Convert datetime or list of datetime to MessageElement.""" + if value is None: + return + elif isinstance(value, list): + return MessageElement( + [str(nt_time_from_datetime(item)) for item in value], + flags, self.name) + else: + return MessageElement(str(nt_time_from_datetime(value)), + flags, self.name) + + class RelatedField(Field): """A field that automatically fetches the related objects.