]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
netcmd: models: User.find also tries object_sid
authorRob van der Linde <rob@catalyst.net.nz>
Tue, 5 Mar 2024 02:30:47 +0000 (15:30 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 20 Mar 2024 03:49:34 +0000 (03:49 +0000)
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>
python/samba/netcmd/domain/models/user.py

index 79a8ecce477928dc857b498a6f938a16bfb56683..0e05bfc3358c05bf5a92180e36ff530fcef53c71 100644 (file)
@@ -22,6 +22,7 @@
 
 from ldb import Dn
 
+from samba.dcerpc.security import dom_sid
 from samba.dsdb import DS_GUID_USERS_CONTAINER
 
 from .fields import DnField, EnumField, IntegerField, NtTimeField, StringField
@@ -75,13 +76,16 @@ class User(OrganizationalPerson):
 
     @classmethod
     def find(cls, ldb, name):
-        """Helper function to find a user first by Dn then sAMAccountName.
+        """Helper function to find a user by Dn, objectSid, or sAMAccountName.
 
-        If the Dn can't be parsed, use sAMAccountName instead.
+        If the Dn or Sid can't be parsed, use sAMAccountName instead.
         """
         try:
             query = {"dn": Dn(ldb, name)}
         except ValueError:
-            query = {"account_name": name}
+            try:
+                query = {"object_sid": dom_sid(name)}
+            except ValueError:
+                query = {"account_name": name}
 
         return cls.get(ldb, **query)