in asfpy/ldapadmin.py [0:0]
def rename(self, newuid):
""" Rename an account, fixing in all projects """
xuid = newuid
if type(newuid) is str:
newuid = newuid.encode('ascii')
else:
xuid = newuid.decode('ascii')
# Validate uid
if not LDAP_VALID_UID_RE.match(xuid):
raise ValidatorException("Invalid UID, must match ^[a-z0-9][a-z0-9_]+$")
# Test if uid exists
if self.manager.load_account(xuid):
raise ConnectionException("An account with this uid already exists")
# Test for clashing cn's
res = self.manager.lc.search_s(LDAP_SUFFIX, ldap.SCOPE_SUBTREE, 'cn=%s' % xuid)
if res:
raise ValidatorException("availid clashes with project name %s!" % res[0][0], 'uid')
# Switch email and home dir
changeset = []
o_email = self.attributes['asf-committer-email'].encode('ascii')
n_email = b'%s@apache.org' % newuid
o_homedir = self.attributes['homeDirectory'].encode('ascii')
n_homedir = b'/home/%s' % newuid
changeset.append((ldap.MOD_DELETE, 'asf-committer-email', o_email))
changeset.append((ldap.MOD_ADD, 'asf-committer-email', n_email))
changeset.append((ldap.MOD_DELETE, 'homeDirectory', o_homedir))
changeset.append((ldap.MOD_ADD, 'homeDirectory', n_homedir))
self.manager.lc.modify_s(self.dn, changeset)
# Change DN
odn = self.dn_enc.decode('ascii')
newdn = LDAP_DN % xuid
newdn_enc = newdn.encode('ascii')
print("Changing %s to %s" % (odn, newdn))
self.manager.lc.modrdn_s(odn, 'uid=%s' % xuid)
# Search and rename in LDAP groups
self.manager.redirect_uid(self.uid, newuid)
# Change in-object
self.uid = xuid
self.dn_enc = newdn_enc