#!/usr/bin/python # import sys import optparse import os import sqlite3 import shutil PATH_S4DB = '/etc/univention/connector/s4internal.sqlite' PATH_BACKUP = '/var/lib/univention-connector/s4.BACKUP' def main(): usage = ''' univention-s4connector-manage-rejected --delete --ucstos4 univention-s4connector-manage-rejected --delete --s4toucs ''' parser = optparse.OptionParser(usage=usage) parser.add_option('-d', '--delete', dest="delete", default=False, action="store_true", help="delete given reject") parser.add_option("--dryrun", dest="dryrun", default=False, action="store_true", help="perform only a dry-run") parser.add_option("--ucstos4", dest="ucsdn", default=None, action="store", help="perform action in UCS-to-S4 queue") parser.add_option("--s4toucs", dest="s4dn", default=None, action="store", help="perform action in S4-to-UCS queue") parser.add_option("--nobackup", dest="backup", default=True, action="store_false", help="disable automatic backup") (options, args) = parser.parse_args() if not options.delete: print >>sys.stderr, 'Option --delete is missing' sys.exit(1) if (not options.ucsdn and not options.s4dn) or (options.ucsdn and options.s4dn): print >>sys.stderr, 'Either option --ucsdn or option --s4dn has to be specified' sys.exit(1) if options.s4dn: dbconn = sqlite3.connect(PATH_S4DB) dbcur = dbconn.cursor() dbcur.execute("SELECT * FROM 'S4 rejected' WHERE Value = '%s'" % options.s4dn) result = dbcur.fetchall() if not result: print 'WARNING: DN not found in S4 rejected list' for usn, dn in result: if options.backup: print 'Saving entry (%s, %s)' % (usn, dn) if not options.dryrun: if not os.path.exists(PATH_BACKUP): os.makedirs(backupdir, 0700) open(os.path.join(PATH_BACKUP, 'usn-%s' % usn), 'w').write(dn) else: print 'DRYRUN: would create backup to %s' % PATH_BACKUP print 'Deleting entry (%s, %s)' % (usn, dn) if not options.dryrun: dbcur.execute("DELETE FROM 'S4 rejected' WHERE Value = '%s'" % options.s4dn) dbconn.commit() else: print "DRYRUN: DELETE FROM 'S4 rejected' WHERE Value = '%s'" % options.s4dn dbconn.close() if options.ucsdn: dbconn = sqlite3.connect(PATH_S4DB) dbcur = dbconn.cursor() dbcur.execute("SELECT * FROM 'UCS rejected' WHERE Value = '%s'" % options.ucsdn) result = dbcur.fetchall() if not result: print 'WARNING: DN not found in UCS rejected list' for fn, dn in result: if options.backup: print 'Saving entry %s in %s' % (fn, PATH_BACKUP) targetfn = os.path.join(PATH_BACKUP, os.path.basename(fn)) if not options.dryrun: if not os.path.exists(PATH_BACKUP): os.makedirs(PATH_BACKUP, 0700) shutil.copy2(fn, PATH_BACKUP) open('%s.dn' % targetfn, 'w').write(dn) else: print 'DRYRUN: would create backup to %s' % PATH_BACKUP print 'Deleting entry (%s, %s)' % (fn, dn) if not options.dryrun: os.remove(fn) else: print 'DRYRUN: would remove %s' % fn if not options.dryrun: dbcur.execute("DELETE FROM 'UCS rejected' WHERE Value = '%s'" % options.ucsdn) dbconn.commit() else: print "DRYRUN: DELETE FROM 'UCS rejected' WHERE Value = '%s'" % options.ucsdn dbconn.close() if __name__ == "__main__": main()