summaryrefslogtreecommitdiff
path: root/python/samba
diff options
context:
space:
mode:
authorRob van der Linde <rob@catalyst.net.nz>2024-02-02 09:54:41 +1300
committerAndrew Bartlett <abartlet@samba.org>2024-02-08 02:48:44 +0000
commit37855511f636f7bd0082d60d97db2a6113c3cd80 (patch)
tree5ac8d78b95396696f3079915afedcd6555102643 /python/samba
parent4c08b420ddf8ce9b3ee28142ad32543eecd5d832 (diff)
downloadsamba-37855511f636f7bd0082d60d97db2a6113c3cd80.tar.gz
samba-37855511f636f7bd0082d60d97db2a6113c3cd80.tar.bz2
samba-37855511f636f7bd0082d60d97db2a6113c3cd80.zip
netcmd: models: add new NtTimeField model field
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>
Diffstat (limited to 'python/samba')
-rw-r--r--python/samba/netcmd/domain/models/fields.py26
1 files changed, 26 insertions, 0 deletions
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.