|
46 |
import univention.admin.modules |
46 |
import univention.admin.modules |
47 |
import univention.admin.objects |
47 |
import univention.admin.objects |
48 |
import univention.debug2 as ud |
48 |
import univention.debug2 as ud |
|
|
49 |
import univention.debug as ud_c |
49 |
from samba.ndr import ndr_unpack |
50 |
from samba.ndr import ndr_unpack |
50 |
from samba.dcerpc import misc |
51 |
from samba.dcerpc import misc |
51 |
from signal import signal, SIGTERM, SIG_DFL |
52 |
from signal import signal, SIGTERM, SIG_DFL |
|
547 |
debug_level = 2 |
548 |
debug_level = 2 |
548 |
ud.set_level(ud.LDAP, int(debug_level)) |
549 |
ud.set_level(ud.LDAP, int(debug_level)) |
549 |
|
550 |
|
|
|
551 |
try: |
552 |
udm_function_level = int(self.baseConfig.get('%s/debug/udm/function' % self.CONFIGBASENAME, 0)) |
553 |
except ValueError: |
554 |
function_level = 0 |
555 |
ud_c.init('/var/log/univention/%s-s4.log' % self.CONFIGBASENAME, 1, udm_function_level) |
556 |
try: |
557 |
udm_debug_level = int(self.baseConfig.get('%s/debug/udm/level' % self.CONFIGBASENAME, 1)) |
558 |
except ValueError: |
559 |
udm_debug_level = 1 |
560 |
ud_c.set_level(ud.ADMIN, int(udm_debug_level)) |
561 |
|
550 |
def close_debug(self): |
562 |
def close_debug(self): |
551 |
_d = ud.function('ldap.close_debug') |
563 |
_d = ud.function('ldap.close_debug') |
552 |
ud.debug(ud.LDAP, ud.INFO, "close debug") |
564 |
ud.debug(ud.LDAP, ud.INFO, "close debug") |
|
698 |
''' |
710 |
''' |
699 |
return dn.split(',', 1)[1] |
711 |
return dn.split(',', 1)[1] |
700 |
|
712 |
|
701 |
def __sync_file_from_ucs(self, filename, append_error='', traceback_level=ud.WARN): |
713 |
def __sync_file_from_ucs(self, filename, append_error='', traceback_level=ud.WARN, reject_if_s4_changed=False): |
702 |
_d = ud.function('ldap._sync_file_from_ucs') |
714 |
_d = ud.function('ldap._sync_file_from_ucs') |
703 |
''' |
715 |
''' |
704 |
sync changes from UCS stored in given file |
716 |
sync changes from UCS stored in given file |
|
839 |
if not self._ignore_object(key, object) or ignore_subtree_match: |
851 |
if not self._ignore_object(key, object) or ignore_subtree_match: |
840 |
ud.debug(ud.LDAP, ud.INFO, "__sync_file_from_ucs: finished mapping") |
852 |
ud.debug(ud.LDAP, ud.INFO, "__sync_file_from_ucs: finished mapping") |
841 |
try: |
853 |
try: |
842 |
if ((old_dn and not self.sync_from_ucs(key, object, premapped_ucs_dn, unicode(old_dn, 'utf8'), old, new)) or (not old_dn and not self.sync_from_ucs(key, object, premapped_ucs_dn, old_dn, old, new))): |
854 |
if ((old_dn and not self.sync_from_ucs(key, object, premapped_ucs_dn, unicode(old_dn, 'utf8'), old, new, reject_if_s4_changed)) or (not old_dn and not self.sync_from_ucs(key, object, premapped_ucs_dn, old_dn, old, new, reject_if_s4_changed))): |
843 |
self._save_rejected_ucs(filename, dn) |
855 |
self._save_rejected_ucs(filename, dn) |
844 |
return False |
856 |
return False |
845 |
else: |
857 |
else: |
|
968 |
# dummy |
980 |
# dummy |
969 |
pass |
981 |
pass |
970 |
|
982 |
|
971 |
def resync_rejected_ucs(self): |
983 |
def resync_rejected_ucs(self, reject_if_s4_changed=False): |
972 |
''' |
984 |
''' |
973 |
tries to resync rejected changes from UCS |
985 |
tries to resync rejected changes from UCS |
974 |
''' |
986 |
''' |
|
983 |
for filename, dn in rejected: |
995 |
for filename, dn in rejected: |
984 |
ud.debug(ud.LDAP, ud.PROCESS, 'sync from ucs: Resync rejected file: %s' % (filename)) |
996 |
ud.debug(ud.LDAP, ud.PROCESS, 'sync from ucs: Resync rejected file: %s' % (filename)) |
985 |
try: |
997 |
try: |
986 |
if self.__sync_file_from_ucs(filename, append_error=' rejected'): |
998 |
if self.__sync_file_from_ucs(filename, append_error=' rejected', reject_if_s4_changed=reject_if_s4_changed): |
987 |
try: |
999 |
try: |
988 |
os.remove(os.path.join(filename)) |
1000 |
os.remove(os.path.join(filename)) |
989 |
except OSError: # file not found |
1001 |
except OSError: # file not found |
|
1004 |
# dummy |
1016 |
# dummy |
1005 |
pass |
1017 |
pass |
1006 |
|
1018 |
|
1007 |
def poll_ucs(self): |
1019 |
def poll_ucs(self, reject_if_s4_changed=False): |
1008 |
''' |
1020 |
''' |
1009 |
poll changes from UCS: iterates over files exported by directory-listener module |
1021 |
poll changes from UCS: iterates over files exported by directory-listener module |
1010 |
''' |
1022 |
''' |
|
1044 |
|
1056 |
|
1045 |
for i in [0, 1]: # do it twice if the LDAP connection was closed |
1057 |
for i in [0, 1]: # do it twice if the LDAP connection was closed |
1046 |
try: |
1058 |
try: |
1047 |
sync_successfull = self.__sync_file_from_ucs(filename, traceback_level=traceback_level) |
1059 |
sync_successfull = self.__sync_file_from_ucs(filename, traceback_level=traceback_level, reject_if_s4_changed=reject_if_s4_changed) |
1048 |
except (ldap.SERVER_DOWN, SystemExit): |
1060 |
except (ldap.SERVER_DOWN, SystemExit): |
1049 |
# once again, ldap idletimeout ... |
1061 |
# once again, ldap idletimeout ... |
1050 |
if i == 0: |
1062 |
if i == 0: |
|
1532 |
self._debug_traceback(ud.ERROR, "Unknown Exception during sync_to_ucs") |
1544 |
self._debug_traceback(ud.ERROR, "Unknown Exception during sync_to_ucs") |
1533 |
return False |
1545 |
return False |
1534 |
|
1546 |
|
1535 |
def sync_from_ucs(self, property_type, object, pre_mapped_ucs_dn, old_dn=None, old_ucs_object=None, new_ucs_object=None): |
1547 |
def sync_from_ucs(self, property_type, object, pre_mapped_ucs_dn, old_dn=None, old_ucs_object=None, new_ucs_object=None, reject_if_s4_changed=False): |
1536 |
# dummy |
1548 |
# dummy |
1537 |
return False |
1549 |
return False |
1538 |
|
1550 |
|