ATYPE_DISTRIBUTION_LOCAL_GROUP,
ATYPE_WORKSTATION_TRUST,
ATYPE_INTERDOMAIN_TRUST,
+ UF_SCRIPT,
+ UF_ACCOUNTDISABLE,
+ UF_HOMEDIR_REQUIRED,
+ UF_LOCKOUT,
+ UF_PASSWD_NOTREQD,
+ UF_PASSWD_CANT_CHANGE,
+ UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED,
+ UF_TEMP_DUPLICATE_ACCOUNT,
+ UF_NORMAL_ACCOUNT,
+ UF_INTERDOMAIN_TRUST_ACCOUNT,
+ UF_WORKSTATION_TRUST_ACCOUNT,
+ UF_SERVER_TRUST_ACCOUNT,
+ UF_DONT_EXPIRE_PASSWD,
+ UF_MNS_LOGON_ACCOUNT,
+ UF_SMARTCARD_REQUIRED,
+ UF_TRUSTED_FOR_DELEGATION,
+ UF_NOT_DELEGATED,
+ UF_USE_DES_KEY_ONLY,
+ UF_DONT_REQUIRE_PREAUTH,
+ UF_PASSWORD_EXPIRED,
+ UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION,
+ UF_NO_AUTH_DATA_REQUIRED,
+ UF_PARTIAL_SECRETS_ACCOUNT,
+ UF_USE_AES_KEYS,
GTYPE_DISTRIBUTION_GLOBAL_GROUP,
GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP,
GTYPE_DISTRIBUTION_UNIVERSAL_GROUP,
DISALLOW_MOVE_ON_DELETE = SYSTEM_FLAG_DISALLOW_MOVE_ON_DELETE
DOMAIN_DISALLOW_MOVE = SYSTEM_FLAG_DOMAIN_DISALLOW_MOVE
DOMAIN_DISALLOW_RENAME = SYSTEM_FLAG_DOMAIN_DISALLOW_RENAME
+
+
+class UserAccountControl(IntFlag):
+ SCRIPT = UF_SCRIPT
+ ACCOUNTDISABLE = UF_ACCOUNTDISABLE
+ HOMEDIR_REQUIRED = UF_HOMEDIR_REQUIRED
+ LOCKOUT = UF_LOCKOUT
+ PASSWD_NOTREQD = UF_PASSWD_NOTREQD
+ PASSWD_CANT_CHANGE = UF_PASSWD_CANT_CHANGE
+ ENCRYPTED_TEXT_PASSWORD_ALLOWED = UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED
+ TEMP_DUPLICATE_ACCOUNT = UF_TEMP_DUPLICATE_ACCOUNT
+ NORMAL_ACCOUNT = UF_NORMAL_ACCOUNT
+ INTERDOMAIN_TRUST_ACCOUNT = UF_INTERDOMAIN_TRUST_ACCOUNT
+ WORKSTATION_TRUST_ACCOUNT = UF_WORKSTATION_TRUST_ACCOUNT
+ SERVER_TRUST_ACCOUNT = UF_SERVER_TRUST_ACCOUNT
+ DONT_EXPIRE_PASSWD = UF_DONT_EXPIRE_PASSWD
+ MNS_LOGON_ACCOUNT = UF_MNS_LOGON_ACCOUNT
+ SMARTCARD_REQUIRED = UF_SMARTCARD_REQUIRED
+ TRUSTED_FOR_DELEGATION = UF_TRUSTED_FOR_DELEGATION
+ NOT_DELEGATED = UF_NOT_DELEGATED
+ USE_DES_KEY_ONLY = UF_USE_DES_KEY_ONLY
+ DONT_REQ_PREAUTH = UF_DONT_REQUIRE_PREAUTH
+ PASSWORD_EXPIRED = UF_PASSWORD_EXPIRED
+ TRUSTED_TO_AUTH_FOR_DELEGATION = UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION
+ NO_AUTH_DATA_REQUIRED = UF_NO_AUTH_DATA_REQUIRED
+ PARTIAL_SECRETS_ACCOUNT = UF_PARTIAL_SECRETS_ACCOUNT
+ USE_AES_KEYS = UF_USE_AES_KEYS
from ldb import Dn
-from samba.dsdb import DS_GUID_USERS_CONTAINER
+from samba.dsdb import (DS_GUID_MANAGED_SERVICE_ACCOUNTS_CONTAINER,
+ DS_GUID_USERS_CONTAINER)
-from .fields import DnField, EnumField, SIDField, StringField
+from .fields import (DnField, EnumField, IntegerField, SIDField, StringField,
+ NtTimeField)
from .model import Model
-from .types import AccountType
+from .types import AccountType, UserAccountControl
class User(Model):
assigned_policy = DnField("msDS-AssignedAuthNPolicy")
assigned_silo = DnField("msDS-AssignedAuthNPolicySilo")
object_sid = SIDField("objectSid")
+ bad_password_time = NtTimeField("badPasswordTime", readonly=True)
+ bad_pwd_count = IntegerField("badPwdCount", readonly=True)
+ code_page = IntegerField("codePage")
+ country_code = IntegerField("countryCode")
+ display_name = StringField("displayName")
+ given_name = StringField("givenName")
+ sn = StringField("sn")
+ last_logoff = NtTimeField("lastLogoff", readonly=True)
+ last_logon = NtTimeField("lastLogon", readonly=True)
+ logon_count = IntegerField("logonCount", readonly=True)
+ primary_group_id = IntegerField("primaryGroupID")
+ pwd_last_set = NtTimeField("pwdLastSet", readonly=True)
+ user_account_control = EnumField("userAccountControl", UserAccountControl)
+ user_principal_name = StringField("userPrincipalName")
def __str__(self):
"""Return username rather than cn for User model."""