from samba.dcerpc.security import dom_sid
from samba.dsdb import DS_GUID_USERS_CONTAINER
+from .exceptions import NotFound
from .fields import DnField, EnumField, IntegerField, NtTimeField, StringField
from .person import OrganizationalPerson
from .types import AccountType, UserAccountControl
query = {"account_name": name}
return cls.get(ldb, **query)
+
+ @classmethod
+ def get_sid_for_principal(cls, ldb, principal) -> str:
+ """Return object_sid for the provided principal.
+
+ If principal is already an object sid then return without fetching,
+ this is different to `User.find` which must fetch the User.
+ """
+ try:
+ return str(dom_sid(principal))
+ except ValueError:
+ user = cls.find(ldb, principal)
+ if user:
+ return user.object_sid
+ else:
+ raise NotFound(f"Principal {principal} not found.")