]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
netcmd: models: add new NtTimeField model field
authorRob van der Linde <rob@catalyst.net.nz>
Thu, 1 Feb 2024 20:54:41 +0000 (09:54 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 8 Feb 2024 02:48:44 +0000 (02:48 +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 1a4d9d7f034220382df91d3a6ab9f96c135856b6..89bbe76734dbaa666d74b878f82247a24d480f78 100644 (file)
@@ -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.