|
Lines 46-51
Link Here
|
| 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 |
|
Lines 547-552
Link Here
|
| 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") |
|
Lines 698-704
Link Here
|
| 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 |
|
Lines 839-845
Link Here
|
| 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: |
|
Lines 968-974
Link Here
|
| 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 |
''' |
|
Lines 983-989
Link Here
|
| 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 |
|
Lines 1004-1010
Link Here
|
| 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 |
''' |
|
Lines 1044-1050
Link Here
|
| 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: |
|
Lines 1532-1538
Link Here
|
| 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 |
|