misc/scripts/ldap_change_base_dn.py
author Julien Cristau <julien.cristau@logilab.fr>
Wed, 10 Sep 2014 11:34:32 +0200 (2014-09-10)
changeset 10076 3810332ef42c
parent 9460 a2a0bc984863
child 10589 7c23b7de2b8d
permissions -rw-r--r--
[server] fix 'cnx' variable confusion in DBG_SQL exception case The rollback handling expects 'cnx' to be the cubicweb Connection, but the DBG_SQL block was replacing it with an sql connection, leading to lulz down the line. Also remove obsolete getattr (the sqlite wrapping is now done at the cnxset level, so cnx.cnxset.cnx should be the right thing already).
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.sources_by_uri[uri].config['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'