misc/scripts/ldap_change_base_dn.py
author Pierre-Yves David <pierre-yves.david@logilab.fr>
Tue, 31 Jul 2012 17:25:28 +0200
brancholdstable
changeset 8501 b922dd08eb79
parent 5969 caea22e82d83
child 9460 a2a0bc984863
permissions -rw-r--r--
[storage] relies on event=='deleted' to detect "delete" event (closes #2450680) When we delete a previously edited entity, it *will* have a cw_edited attribute even if the goal is to delete it. The function get an argument that explicitly contains the "delete" event. The code now uses that instead.

from base64 import b64decode, b64encode
try:
    uri, newdn = __args__
except ValueError:
    print 'USAGE: cubicweb-ctl shell <instance> ldap_change_base_dn.py -- <ldap source uri> <new dn>'
    print
    print 'you should not have updated your sources file yet'

olddn = repo.config.sources()[uri]['user-base-dn']

assert olddn != newdn

raw_input("Ensure you've stopped the instance, type enter when done.")

for eid, extid in sql("SELECT eid, extid FROM entities WHERE source='%s'" % uri):
    olduserdn = b64decode(extid)
    newuserdn = olduserdn.replace(olddn, newdn)
    if newuserdn != olduserdn:
        print olduserdn, '->', newuserdn
        sql("UPDATE entities SET extid='%s' WHERE eid=%s" % (b64encode(newuserdn), eid))

commit()

print 'you can now update the sources file to the new dn and restart the instance'