1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-30 20:23:49 +03:00

Make the setup/newuser and setup/setpassword scripts actually work...

These need a testsuite, but this will come soon.

Andrew Bartlett
(This used to be commit fbcaa622bd)
This commit is contained in:
Andrew Bartlett
2008-03-28 12:08:54 +11:00
parent 3d9589ba5a
commit 786deaf928
3 changed files with 91 additions and 132 deletions

View File

@@ -77,10 +77,15 @@ unixName: %s
:param user_dn: Dn of the account to enable.
"""
res = self.search(user_dn, SCOPE_ONELEVEL, None, ["userAccountControl"])
res = self.search(user_dn, ldb.SCOPE_BASE, None, ["userAccountControl"])
assert len(res) == 1
userAccountControl = res[0].userAccountControl
userAccountControl = userAccountControl - 2 # remove disabled bit
userAccountControl = res[0]["userAccountControl"][0]
userAccountControl = int(userAccountControl)
if (userAccountControl & 0x2):
userAccountControl = userAccountControl & ~0x2 # remove disabled bit
if (userAccountControl & 0x20):
userAccountControl = userAccountControl & ~0x20 # remove 'no password required' bit
mod = """
dn: %s
changetype: modify
@@ -103,13 +108,9 @@ userAccountControl: %u
res = self.search("", scope=ldb.SCOPE_BASE,
expression="(defaultNamingContext=*)",
attrs=["defaultNamingContext"])
assert(len(res) == 1 and res[0].defaultNamingContext is not None)
assert(len(res) == 1 and res[0]["defaultNamingContext"] is not None)
domain_dn = res[0]["defaultNamingContext"][0]
assert(domain_dn is not None)
dom_users = self.searchone(basedn=domain_dn, attribute="dn",
expression="name=Domain Users")
assert(dom_users is not None)
user_dn = "CN=%s,CN=Users,%s" % (username, domain_dn)
#
@@ -123,19 +124,44 @@ userAccountControl: %u
"sambaPassword": password,
"objectClass": "user"})
# add the user to the users group as well
modgroup = """
# modify the userAccountControl to remove the disabled bit
self.enable_account(user_dn)
self.transaction_commit()
def setpassword(self, filter, password):
"""Set a password on a user record
:param filter: LDAP filter to find the user (eg samccountname=name)
:param password: Password for the user
"""
# connect to the sam
self.transaction_start()
# find the DNs for the domain
res = self.search("", scope=ldb.SCOPE_BASE,
expression="(defaultNamingContext=*)",
attrs=["defaultNamingContext"])
assert(len(res) == 1 and res[0]["defaultNamingContext"] is not None)
domain_dn = res[0]["defaultNamingContext"][0]
assert(domain_dn is not None)
res = self.search(domain_dn, scope=ldb.SCOPE_SUBTREE,
expression=filter,
attrs=[])
assert(len(res) == 1)
user_dn = res[0].dn
setpw = """
dn: %s
changetype: modify
add: member
member: %s
""" % (dom_users, user_dn)
replace: sambaPassword
sambaPassword: %s
""" % (user_dn, password)
self.modify(modgroup)
self.modify_ldif(setpw)
# modify the userAccountControl to remove the disabled bit
enable_account(self, user_dn)
self.enable_account(user_dn)
self.transaction_commit()
def set_domain_sid(self, sid):