[SCM] Samba Shared Repository - branch master updated

Jule Anger janger at samba.org
Tue Mar 12 10:55:02 UTC 2024


The branch, master has been updated
       via  0e40506d21b selftest: add tests for "samba-tool user list --locked-only"
       via  055b4cd50f8 samba-tool: add "samba-tool user list --locked-only"
      from  b13d4359f2f libgpo: Do not segfault if we don't have a valid security descriptor

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 0e40506d21b43854bba95e267dead64c506d1ef5
Author: Jule Anger <janger at samba.org>
Date:   Tue Mar 5 10:41:32 2024 +0100

    selftest: add tests for "samba-tool user list --locked-only"
    
    Signed-off-by: Jule Anger <janger at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    
    Autobuild-User(master): Jule Anger <janger at samba.org>
    Autobuild-Date(master): Tue Mar 12 10:54:49 UTC 2024 on atb-devel-224

commit 055b4cd50f8aeaac7ce1f3efc5643063025b28a7
Author: Jule Anger <janger at samba.org>
Date:   Fri Mar 1 11:16:26 2024 +0100

    samba-tool: add "samba-tool user list --locked-only"
    
    Signed-off-by: Jule Anger <janger at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 docs-xml/manpages/samba-tool.8.xml            |  6 ++++++
 python/samba/netcmd/user/list.py              | 13 ++++++++++++-
 python/samba/tests/samba_tool/user.py         | 25 +++++++++++++++++++++++++
 source4/dsdb/tests/python/password_lockout.py | 16 ++++++++++++++++
 4 files changed, 59 insertions(+), 1 deletion(-)


Changeset truncated at 500 lines:

diff --git a/docs-xml/manpages/samba-tool.8.xml b/docs-xml/manpages/samba-tool.8.xml
index 3471b0e1991..e6c0c08c240 100644
--- a/docs-xml/manpages/samba-tool.8.xml
+++ b/docs-xml/manpages/samba-tool.8.xml
@@ -2598,6 +2598,12 @@
 	Do not list disabled user accounts.
 	</para></listitem>
 	</varlistentry>
+	<varlistentry>
+	<term>--locked-only</term>
+	<listitem><para>
+	Only list locked user accounts.
+	</para></listitem>
+	</varlistentry>
 	</variablelist>
 </refsect3>
 
diff --git a/python/samba/netcmd/user/list.py b/python/samba/netcmd/user/list.py
index 10605ca68f4..3d16f0ef9d7 100644
--- a/python/samba/netcmd/user/list.py
+++ b/python/samba/netcmd/user/list.py
@@ -42,6 +42,10 @@ class cmd_user_list(Command):
                default=False,
                action='store_true',
                help="Do not list disabled user accounts"),
+        Option("--locked-only",
+               help="Only list locked user accounts",
+               default=False,
+               action='store_true'),
         Option("-b", "--base-dn",
                help="Specify base DN to use",
                type=str),
@@ -64,6 +68,7 @@ class cmd_user_list(Command):
             H=None,
             hide_expired=False,
             hide_disabled=False,
+            locked_only=False,
             base_dn=None,
             full_dn=False):
         lp = sambaopts.get_loadparm()
@@ -87,10 +92,16 @@ class cmd_user_list(Command):
             filter_disabled = "(!(userAccountControl:%s:=%u))" % (
                 ldb.OID_COMPARATOR_AND, dsdb.UF_ACCOUNTDISABLE)
 
-        filter = "(&(objectClass=user)(userAccountControl:%s:=%u)%s%s)" % (
+        filter_locked = ""
+        if locked_only is True:
+            # use lockoutTime=* to filter out accounts without a set lockoutTime
+            filter_locked = "(&(lockoutTime=*)(!(lockoutTime=0)))"
+
+        filter = "(&(objectClass=user)(userAccountControl:%s:=%u)%s%s%s)" % (
             ldb.OID_COMPARATOR_AND,
             dsdb.UF_NORMAL_ACCOUNT,
             filter_disabled,
+            filter_locked,
             filter_expires)
 
         res = samdb.search(search_dn,
diff --git a/python/samba/tests/samba_tool/user.py b/python/samba/tests/samba_tool/user.py
index ef74858eaec..290d5daebe1 100644
--- a/python/samba/tests/samba_tool/user.py
+++ b/python/samba/tests/samba_tool/user.py
@@ -437,6 +437,31 @@ class UserCmdTestCase(SambaToolCmdTest):
             self.assertMatch(out, name,
                              "user '%s' not found" % name)
 
+    # Test: samba-tool user list --locked-only
+    # This test does not verify that the command lists the locked user, it just
+    # tests that it does not list unlocked users. The funcional test, which
+    # lists locked users, is located in the 'samba4.ldap.password_lockout' test
+    # in source8/dsdb/tests/python/password_lockout.py
+    def test_list_locked(self):
+        (result, out, err) = self.runsubcmd("user", "list",
+                                            "-H", "ldap://%s" % os.environ["DC_SERVER"],
+                                            "-U%s%%%s" % (os.environ["DC_USERNAME"],
+                                                          os.environ["DC_PASSWORD"]),
+                                            "--locked-only")
+        self.assertCmdSuccess(result, out, err, "Error running list")
+
+        search_filter = ("(&(objectClass=user)(userAccountControl:%s:=%u))" %
+                         (ldb.OID_COMPARATOR_AND, dsdb.UF_NORMAL_ACCOUNT))
+
+        userlist = self.samdb.search(base=self.samdb.domain_dn(),
+                                     scope=ldb.SCOPE_SUBTREE,
+                                     expression=search_filter,
+                                     attrs=["samaccountname"])
+
+        for userobj in userlist:
+            name = str(userobj.get("samaccountname", idx=0))
+            self.assertNotIn(name, out,
+                             "user '%s' is incorrectly listed as locked" % name)
 
     def test_list_base_dn(self):
         base_dn = "CN=Users"
diff --git a/source4/dsdb/tests/python/password_lockout.py b/source4/dsdb/tests/python/password_lockout.py
index 78edcce7792..01cf8e02f7b 100755
--- a/source4/dsdb/tests/python/password_lockout.py
+++ b/source4/dsdb/tests/python/password_lockout.py
@@ -11,6 +11,7 @@ import optparse
 import sys
 import base64
 import time
+import subprocess
 
 sys.path.insert(0, "bin/python")
 import samba
@@ -489,8 +490,23 @@ unicodePwd:: """ + base64.b64encode("\"thatsAcomplPASS2x\"".encode('utf-16-le'))
                                   userAccountControl=dsdb.UF_NORMAL_ACCOUNT,
                                   msDSUserAccountControlComputed=dsdb.UF_LOCKOUT)
 
+        username = res[0]["sAMAccountName"][0]
+        cmd = ["bin/samba-tool", "user", "list", "--locked-only",
+               "-H%s" % self.host_url,
+               "-U%s%%%s" % (global_creds.get_username(),
+                             global_creds.get_password())]
+        out = subprocess.check_output(cmd)
+        self.assertIn(username, out)
+
         self._reset_by_method(res, method)
 
+        cmd = ["bin/samba-tool", "user", "list", "--locked-only",
+               "-H%s" % self.host_url,
+               "-U%s%%%s" % (global_creds.get_username(),
+                             global_creds.get_password())]
+        out = subprocess.check_output(cmd)
+        self.assertNotIn(username, out)
+
         # Here bad password counts are reset without logon success.
         res = self._check_account(userdn,
                                   badPwdCount=0,


-- 
Samba Shared Repository



More information about the samba-cvs mailing list