View | Details | Raw Unified | Return to bug 34648 | Differences between
and this patch

Collapse All | Expand All

(-)a/services/univention-s4-connector/modules/univention/s4connector/__init__.py (-17 / +20 lines)
 Lines 34-39    Link Here 
34
import cPickle
34
import cPickle
35
import copy
35
import copy
36
import os
36
import os
37
import re
37
import random
38
import random
38
import string
39
import string
39
import sys
40
import sys
 Lines 569-576   class ucs: Link Here 
569
		_d = ud.function('ldap._get_config_items')
570
		_d = ud.function('ldap._get_config_items')
570
		return self.config.items(section)
571
		return self.config.items(section)
571
572
572
	def _save_rejected_ucs(self, filename, dn):
573
	def _save_rejected_ucs(self, filename, dn, resync=True, reason=''):
573
		_d = ud.function('ldap._save_rejected_ucs')
574
		_d = ud.function('ldap._save_rejected_ucs')
575
		if not resync:
576
			# Note that unescaped <> are invalid in DNs. See also:
577
			# `_list_rejected_ucs()`.
578
			dn = '<NORESYNC{}>;{}'.format('=' + reason if reason else '', dn)
574
		modstring_dn = univention.s4connector.s4.compatible_modstring(dn)
579
		modstring_dn = univention.s4connector.s4.compatible_modstring(dn)
575
		self._set_config_option('UCS rejected', filename, modstring_dn)
580
		self._set_config_option('UCS rejected', filename, modstring_dn)
576
581
 Lines 582-603   class ucs: Link Here 
582
		_d = ud.function('ldap._remove_rejected_ucs')
587
		_d = ud.function('ldap._remove_rejected_ucs')
583
		self._remove_config_option('UCS rejected', filename)
588
		self._remove_config_option('UCS rejected', filename)
584
589
590
	def list_rejected_ucs(self, filter_noresync=False):
591
		rejected = self._get_config_items('UCS rejected')
592
		if filter_noresync:
593
			no_resync = re.compile('^<NORESYNC(=.*?)?>;')
594
			return [(fn, dn) for (fn, dn) in rejected if
595
				no_resync.match(dn) is None]
596
		return rejected
597
585
	def _list_rejected_ucs(self):
598
	def _list_rejected_ucs(self):
586
		_d = ud.function('ldap._list_rejected_ucs')
599
		_d = ud.function('ldap._list_rejected_ucs')
587
		result = []
600
		return self.list_rejected_ucs(filter_noresync=True)
588
		for i in self._get_config_items('UCS rejected'):
589
			result.append(i)
590
		return result
591
601
592
	def _list_rejected_filenames_ucs(self):
602
	def _list_rejected_filenames_ucs(self):
593
		_d = ud.function('ldap._list_rejected_filenames_ucs')
603
		_d = ud.function('ldap._list_rejected_filenames_ucs')
594
		result = []
604
		return [fn for (fn, dn) in self.list_rejected_ucs()]
595
		for filename, dn in self._get_config_items('UCS rejected'):
596
			result.append(filename)
597
		return result
598
599
	def list_rejected_ucs(self):
600
		return self._get_config_items('UCS rejected')
601
605
602
	def _encode_dn_as_config_option(self, dn):
606
	def _encode_dn_as_config_option(self, dn):
603
		return dn
607
		return dn
 Lines 748-757   class ucs: Link Here 
748
			return True  # file not found so there's nothing to sync
752
			return True  # file not found so there's nothing to sync
749
		except (cPickle.UnpicklingError, EOFError) as e:
753
		except (cPickle.UnpicklingError, EOFError) as e:
750
			message = 'file emtpy' if isinstance(e, EOFError) else e.message
754
			message = 'file emtpy' if isinstance(e, EOFError) else e.message
751
			ud.debug(ud.LDAP, ud.WARN,
755
			ud.debug(ud.LDAP, ud.ERROR,
752
				'__sync_file_from_ucs: invalid pickle file {}: {}'.format(filename, message))
756
				'__sync_file_from_ucs: invalid pickle file {}: {}'.format(filename, message))
753
			# ignore corrupted pickle file, but save as rejected to not try again
757
			# ignore corrupted pickle file, but save as rejected to not try again
754
			self._save_rejected_ucs(filename, 'unknown')
758
			self._save_rejected_ucs(filename, 'unknown', resync=False, reason='broken file')
755
			return False
759
			return False
756
760
757
		if dn == 'cn=Subschema':
761
		if dn == 'cn=Subschema':
 Lines 1098-1107   class ucs: Link Here 
1098
						continue  # file not found so there's nothing to sync
1102
						continue  # file not found so there's nothing to sync
1099
					except (cPickle.UnpicklingError, EOFError) as e:
1103
					except (cPickle.UnpicklingError, EOFError) as e:
1100
						message = 'file emtpy' if isinstance(e, EOFError) else e.message
1104
						message = 'file emtpy' if isinstance(e, EOFError) else e.message
1101
						ud.debug(ud.LDAP, ud.WARN,
1105
						ud.debug(ud.LDAP, ud.ERROR,
1102
							'poll_ucs: invalid pickle file {}: {}'.format(filename, message))
1106
							'poll_ucs: invalid pickle file {}: {}'.format(filename, message))
1103
						# ignore corrupted pickle file, but save as rejected to not try again
1107
						# ignore corrupted pickle file, but save as rejected to not try again
1104
						self._save_rejected_ucs(filename, 'unknown')
1108
						self._save_rejected_ucs(filename, 'unknown', resync=False, reason='broken file')
1105
						continue
1109
						continue
1106
1110
1107
					for i in [0, 1]:  # do it twice if the LDAP connection was closed
1111
					for i in [0, 1]:  # do it twice if the LDAP connection was closed
1108
- 

Return to bug 34648