|
Lines 808-842
def flatmode_reconnect():
Link Here
|
| 808 |
def _delete_dn_recursive(l, dn): |
808 |
def _delete_dn_recursive(l, dn): |
| 809 |
try: |
809 |
try: |
| 810 |
l.delete_s(dn) |
810 |
l.delete_s(dn) |
| 811 |
except ldap.NOT_ALLOWED_ON_NONLEAF, msg: |
811 |
except ldap.NOT_ALLOWED_ON_NONLEAF: |
| 812 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.WARN, 'Failed to delete non leaf object: dn=[%s];' % dn) |
812 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.WARN, 'Failed to delete non leaf object: dn=[%s];' % dn) |
| 813 |
dns=[] |
813 |
dns = [dn_ for dn_, _attr in l.search_s(dn, ldap.SCOPE_SUBTREE, '(objectClass=*)', attrlist=['dn'])] |
| 814 |
for dn,attr in l.search_s(dn, ldap.SCOPE_SUBTREE, '(objectClass=*)'): |
|
|
| 815 |
dns.append(dn) |
| 816 |
dns.reverse() |
814 |
dns.reverse() |
| 817 |
for dn in dns: |
815 |
for dn in dns: |
| 818 |
l.delete_s(dn) |
816 |
l.delete_s(dn) |
| 819 |
except ldap.NO_SUCH_OBJECT, msg: |
817 |
except ldap.NO_SUCH_OBJECT: |
| 820 |
pass |
818 |
pass |
| 821 |
|
819 |
|
| 822 |
def _backup_dn_recursive(l, dn): |
820 |
def _backup_dn_recursive(l, dn): |
|
|
821 |
try: |
| 822 |
result = l.search_s(dn, ldap.SCOPE_SUBTREE, '(objectClass=*)', attrlist=['*', '+']) |
| 823 |
except ldap.NO_SUCH_OBJECT: |
| 824 |
return |
| 825 |
|
| 823 |
backup_directory = '/var/univention-backup/replication' |
826 |
backup_directory = '/var/univention-backup/replication' |
| 824 |
if not os.path.exists(backup_directory): |
827 |
if not os.path.exists(backup_directory): |
| 825 |
os.makedirs(backup_directory) |
828 |
os.makedirs(backup_directory) |
| 826 |
os.chmod(backup_directory, 0700) |
829 |
os.chmod(backup_directory, 0700) |
| 827 |
|
830 |
|
| 828 |
backup_file = os.path.join(backup_directory, str(time.time())) |
831 |
backup_file = os.path.join(backup_directory, str(time.time())) |
| 829 |
fd = open(backup_file, 'w+') |
|
|
| 830 |
fd.close() |
| 831 |
os.chmod(backup_file, 0600) |
| 832 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.PROCESS, 'replication: dump %s to %s' % (dn, backup_file)) |
832 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.PROCESS, 'replication: dump %s to %s' % (dn, backup_file)) |
| 833 |
|
833 |
os.chmod(backup_file, 0600) |
| 834 |
fd = open(backup_file, 'w+') |
834 |
with open(backup_file, 'w+') as fd: |
| 835 |
ldif_writer = ldifparser.LDIFWriter(fd) |
835 |
ldif_writer = ldifparser.LDIFWriter(fd) |
| 836 |
for dn,entry in l.search_s(dn, ldap.SCOPE_SUBTREE, '(objectClass=*)', attrlist=['*', '+']): |
836 |
for dn, entry in result: |
| 837 |
ldif_writer.unparse(dn,entry) |
837 |
ldif_writer.unparse(dn,entry) |
| 838 |
fd.close() |
838 |
|
| 839 |
|
|
|
| 840 |
def _get_current_modrdn_link(): |
839 |
def _get_current_modrdn_link(): |
| 841 |
return os.path.join(STATE_DIR, 'current_modrdn') |
840 |
return os.path.join(STATE_DIR, 'current_modrdn') |
| 842 |
|
841 |
|
|
Lines 1024-1030
def handler(dn, new, listener_old, operation):
Link Here
|
| 1024 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.PROCESS, 'replication: the current modrdn points to a different entryUUID: %s' % os.readlink(current_modrdn_link)) |
1023 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.PROCESS, 'replication: the current modrdn points to a different entryUUID: %s' % os.readlink(current_modrdn_link)) |
| 1025 |
|
1024 |
|
| 1026 |
old_dn = _read_dn_from_file(current_modrdn_link) |
1025 |
old_dn = _read_dn_from_file(current_modrdn_link) |
| 1027 |
|
|
|
| 1028 |
if old_dn: |
1026 |
if old_dn: |
| 1029 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.PROCESS, 'replication: the DN %s from the current_modrdn_link has to be backuped and removed' % (old_dn)) |
1027 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.PROCESS, 'replication: the DN %s from the current_modrdn_link has to be backuped and removed' % (old_dn)) |
| 1030 |
try: |
1028 |
try: |
|
Lines 1033-1041
def handler(dn, new, listener_old, operation):
Link Here
|
| 1033 |
# The backup will fail in LDIF mode |
1031 |
# The backup will fail in LDIF mode |
| 1034 |
pass |
1032 |
pass |
| 1035 |
_delete_dn_recursive(l, old_dn) |
1033 |
_delete_dn_recursive(l, old_dn) |
|
|
1034 |
if dn == old_dn: |
| 1035 |
old = None |
| 1036 |
else: |
1036 |
else: |
| 1037 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.WARN, 'replication: no old dn has been found') |
1037 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.WARN, 'replication: no old dn has been found') |
| 1038 |
|
1038 |
|
| 1039 |
if not old: |
1039 |
if not old: |
| 1040 |
_add_object_from_new(l, dn, new) |
1040 |
_add_object_from_new(l, dn, new) |
| 1041 |
elif old: |
1041 |
elif old: |