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):
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.