1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-02 09:47:23 +03:00

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>
This commit is contained in:
Rob van der Linde 2024-02-02 09:54:41 +13:00 committed by Andrew Bartlett
parent 4c08b420dd
commit 37855511f6

View 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.