From e90f27bc8d97fbb8cecba939e1a24f3324a78592 Mon Sep 17 00:00:00 2001 From: Kevin Li Date: Mon, 8 Jul 2019 20:48:53 +0800 Subject: [PATCH] Updated AD backend for user creation --- ldapcherry/backend/backendAD.py | 31 ++++++++++++++++++++++++++++++- ldapcherry/version.py | 2 +- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/ldapcherry/backend/backendAD.py b/ldapcherry/backend/backendAD.py index bb84bf3..7fb5c64 100644 --- a/ldapcherry/backend/backendAD.py +++ b/ldapcherry/backend/backendAD.py @@ -200,6 +200,12 @@ class Backend(ldapcherry.backend.backendLdap.Backend): else: dn = self._byte_p2(name) + ldap_client.modify_s( + dn, + [(ldap.MOD_REPLACE, 'unicodePwd', [password_value])] + ) + return + attrs = {} attrs['unicodePwd'] = self._modlist(self._byte_p2(password_value)) @@ -217,8 +223,31 @@ class Backend(ldapcherry.backend.backendLdap.Backend): def add_user(self, attrs): password = attrs['unicodePwd'] del(attrs['unicodePwd']) + attrs['userPrincipalName'] = '%(name)s@%(domain)s' % { + 'name': attrs['sAMAccountName'], 'domain': self.domain + } super(Backend, self).add_user(attrs) - self._set_password(attrs['cn'], password) + + ldap_client = self._bind() + + dn = self._byte_p2('CN=%(cn)s,%(user_dn)s' % { + 'cn': attrs['cn'], 'user_dn': self.userdn + }) + + # Set password + encoded_password = '"{}"'.format(password).encode('utf-16-le') + ldap_client.modify_s( + dn, + [(ldap.MOD_REPLACE, 'unicodePwd', [encoded_password])] + ) + + # Enable user account + ldap_client.modify_s( + dn, + [(ldap.MOD_REPLACE, 'UserAccountControl', [b'512'])] + ) + + ldap_client.unbind_s() def set_attrs(self, username, attrs): if 'unicodePwd' in attrs: diff --git a/ldapcherry/version.py b/ldapcherry/version.py index 45fdd7b..5a89ad8 100644 --- a/ldapcherry/version.py +++ b/ldapcherry/version.py @@ -5,4 +5,4 @@ # ldapCherry # Copyright (c) 2014 Carpentier Pierre-Francois -version = '1.1.2' +version = '1.1.3'