--- a/management/univention-self-service/umc/python/passwordreset/__init__.py +++ a/management/univention-self-service/umc/python/passwordreset/__init__.py @@ -39,6 +39,7 @@ import atexit from functools import wraps from ldap.filter import filter_format import pylibmc +import subprocess from univention.lib.i18n import Translation from univention.lib.umc import Client, HTTPError, ConnectionError, Unauthorized @@ -455,9 +456,32 @@ class Instance(Base): MODULE.error("set_contact_data(): {}".format(traceback.format_exc())) raise + def admember_set_password(self, username, password): + ldb_url = ucr.get('connector/ad/ldap/host') + reset_username = ucr.get('ad/reset/username') + reset_password_file = ucr.get('ad/reset/password') + reset_password = open(reset_password_file).readline().strip() + cmd = ['samba-tool', 'user', 'setpassword', '--username', reset_username, '--password', reset_password. '--filter', 'samaccountname="%s"' % username, --newpassword, password, -H, 'ldap://%s' % ldb_url] + cmd_proc = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + cmd_out, cmd_err = cmd_proc.communicate() + cmd_exit = cmd_proc.wait() + + if cmd_out: + self.log("STDOUT of {}: {}".format(cmd, cmd_out)) + if cmd_err: + self.log("STDERR of {}: {}".format(cmd, cmd_err)) + + if cmd_exit == 0: + return True + else: + raise Exception("admember_set_password(): failed to set password. Return code: %s" % cmd_exit) + def udm_set_password(self, username, password): + user = self.get_udm_user(username=username, admin=True) + if 'synced' in user.get('objectFlag') and ucr.is_true('ad/member'): + self.admember_set_password(username, password) + try: - user = self.get_udm_user(username=username, admin=True) user["password"] = password user["pwdChangeNextLogin"] = 0 user.modify()