takes_options = [
Option("-H", "--URL", help="LDB URL for database or target server", type=str,
metavar="URL", dest="H"),
+ Option("--hide-expired",
+ help="Do not list expired user accounts",
+ default=False,
+ action='store_true'),
+ Option("--hide-disabled",
+ default=False,
+ action='store_true',
+ help="Do not list disabled user accounts"),
Option("-b", "--base-dn",
help="Specify base DN to use",
type=str),
credopts=None,
versionopts=None,
H=None,
+ hide_expired=False,
+ hide_disabled=False,
base_dn=None,
full_dn=False):
lp = sambaopts.get_loadparm()
if base_dn:
search_dn = samdb.normalize_dn_in_domain(base_dn)
+ filter_expires = ""
+ if hide_expired is True:
+ current_nttime = samdb.get_nttime()
+ filter_expires = "(|(accountExpires=0)(accountExpires>=%u))" % (
+ current_nttime)
+
+ filter_disabled = ""
+ if hide_disabled is True:
+ filter_disabled = "(!(userAccountControl:%s:=%u))" % (
+ ldb.OID_COMPARATOR_AND, dsdb.UF_ACCOUNTDISABLE)
+
+ filter = "(&(objectClass=user)(userAccountControl:%s:=%u)%s%s)" % (
+ ldb.OID_COMPARATOR_AND,
+ dsdb.UF_NORMAL_ACCOUNT,
+ filter_disabled,
+ filter_expires)
+
res = samdb.search(search_dn,
scope=ldb.SCOPE_SUBTREE,
- expression=("(&(objectClass=user)(userAccountControl:%s:=%u))"
- % (ldb.OID_COMPARATOR_AND, dsdb.UF_NORMAL_ACCOUNT)),
+ expression=filter,
attrs=["samaccountname"])
if (len(res) == 0):
return
"""Get the NTDS objectGUID"""
return dsdb._samdb_ntds_objectGUID(self)
+ def get_timestr(self):
+ """Get the current time as generalized time string"""
+ res = self.search(base="",
+ scope=ldb.SCOPE_BASE,
+ attrs=["currentTime"])
+ return str(res[0]["currentTime"][0])
+
+ def get_time(self):
+ """Get the current time as UNIX time"""
+ return ldb.string_to_time(self.get_timestr())
+
+ def get_nttime(self):
+ """Get the current time as NT time"""
+ return samba.unix2nttime(self.get_time())
+
def server_site_name(self):
"""Get the server site name"""
return dsdb._samdb_server_site_name(self)
found = self.assertMatch(out, name,
"user '%s' not found" % name)
+ def test_list_hide_expired(self):
+ expire_username = "expireUser"
+ expire_user = self._randomUser({"name": expire_username})
+ self._create_user(expire_user)
+
+ (result, out, err) = self.runsubcmd(
+ "user",
+ "list",
+ "--hide-expired",
+ "-H",
+ "ldap://%s" % os.environ["DC_SERVER"],
+ "-U%s%%%s" % (os.environ["DC_USERNAME"],
+ os.environ["DC_PASSWORD"]))
+ self.assertCmdSuccess(result, out, err, "Error running list")
+ self.assertTrue(expire_username in out,
+ "user '%s' not found" % expire_username)
+
+ # user will be expired one second ago
+ self.samdb.setexpiry(
+ "(sAMAccountname=%s)" % expire_username,
+ -1,
+ False)
+
+ (result, out, err) = self.runsubcmd(
+ "user",
+ "list",
+ "--hide-expired",
+ "-H",
+ "ldap://%s" % os.environ["DC_SERVER"],
+ "-U%s%%%s" % (os.environ["DC_USERNAME"],
+ os.environ["DC_PASSWORD"]))
+ self.assertCmdSuccess(result, out, err, "Error running list")
+ self.assertFalse(expire_username in out,
+ "user '%s' found" % expire_username)
+
+ self.samdb.deleteuser(expire_username)
+
+ def test_list_hide_disabled(self):
+ disable_username = "disableUser"
+ disable_user = self._randomUser({"name": disable_username})
+ self._create_user(disable_user)
+
+ (result, out, err) = self.runsubcmd(
+ "user",
+ "list",
+ "--hide-disabled",
+ "-H",
+ "ldap://%s" % os.environ["DC_SERVER"],
+ "-U%s%%%s" % (os.environ["DC_USERNAME"],
+ os.environ["DC_PASSWORD"]))
+ self.assertCmdSuccess(result, out, err, "Error running list")
+ self.assertTrue(disable_username in out,
+ "user '%s' not found" % disable_username)
+
+ self.samdb.disable_account("(sAMAccountname=%s)" % disable_username)
+
+ (result, out, err) = self.runsubcmd(
+ "user",
+ "list",
+ "--hide-disabled",
+ "-H",
+ "ldap://%s" % os.environ["DC_SERVER"],
+ "-U%s%%%s" % (os.environ["DC_USERNAME"],
+ os.environ["DC_PASSWORD"]))
+ self.assertCmdSuccess(result, out, err, "Error running list")
+ self.assertFalse(disable_username in out,
+ "user '%s' found" % disable_username)
+
+ self.samdb.deleteuser(disable_username)
+
def test_show(self):
for user in self.users:
(result, out, err) = self.runsubcmd(