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

Collapse All | Expand All

(-)debian/changelog (+12 lines)
 Lines 1-3    Link Here 
1
univention-ad-connector (5.0.18-1) unstable; urgency=low
2
3
  * mapping.py: Remove object_memberships_sync_from_ucs from the list of
4
    post_con_modify_functions because the group object will changed if
5
    the groupmember ship was changed on UCS. This will improve the sync
6
    performance (Bug #21010, Bug #18619)
7
  * poll_ucs: Create a list of all DNs which should be synced in this
8
    run. If the DN will synced later skip the sync for this object at
9
    this point (Bug #21010, Bug #18619)
10
11
 -- Stefan Gohmann <gohmann@univention.de>  Thu, 24 Mar 2011 13:46:20 +0100
12
1
univention-ad-connector (5.0.17-1) unstable; urgency=low
13
univention-ad-connector (5.0.17-1) unstable; urgency=low
2
14
3
  * fixed name of connector/ad/mapping/group/language in umc module (Bug #20195) 
15
  * fixed name of connector/ad/mapping/group/language in umc module (Bug #20195) 
(-)conffiles/etc/univention/connector/ad/mapping.py (-1 lines)
 Lines 101-107    Link Here 
101
			post_con_modify_functions=[ univention.connector.ad.set_userPrincipalName_from_ucr,
101
			post_con_modify_functions=[ univention.connector.ad.set_userPrincipalName_from_ucr,
102
						    univention.connector.ad.password.password_sync_ucs,
102
						    univention.connector.ad.password.password_sync_ucs,
103
						    univention.connector.ad.primary_group_sync_from_ucs,
103
						    univention.connector.ad.primary_group_sync_from_ucs,
104
						    univention.connector.ad.object_memberships_sync_from_ucs,
105
						    univention.connector.ad.disable_user_from_ucs,
104
						    univention.connector.ad.disable_user_from_ucs,
106
						    ],
105
						    ],
107
106
(-)modules/univention/connector/__init__.py (-16 / +63 lines)
 Lines 471-476    Link Here 
471
			
471
			
472
		dn,new,old,old_dn=cPickle.load(f)
472
		dn,new,old,old_dn=cPickle.load(f)
473
473
474
		try:
475
			ud.debug(ud.LDAP, ud.PROCESS, "Synchronize: %s" % dn)
476
		except:
477
			ud.debug(ud.LDAP, ud.PROCESS, "Synchronize: object from file %s" % filename)
478
			pass
479
474
		def recode_attribs(attribs):
480
		def recode_attribs(attribs):
475
			nattribs={}
481
			nattribs={}
476
			for key in attribs.keys():
482
			for key in attribs.keys():
 Lines 683-689    Link Here 
683
		# dummy
689
		# dummy
684
		pass
690
		pass
685
691
686
	
692
	def _generate_dn_list_from(self, files):
693
		'''
694
		Save all filenames in a dictonary with dn as key
695
		If more than one pickle file was created for one DN we could skip the first one
696
		'''
697
		self.dn_list = {}
698
		for listener_file in files:
699
			filename = os.path.join(self.listener_dir, listener_file)
700
			if not filename == "%s/tmp" % self.baseConfig['%s/ad/listener/dir' % self.CONFIGBASENAME]:
701
				if not filename in self.rejected_files:
702
					try:
703
						f=file(filename,'r')
704
					except IOError: # file not found so there's nothing to sync
705
						continue
706
707
					dn,new,old,old_dn=cPickle.load(f)
708
					if not self.dn_list.get(dn):
709
						self.dn_list[dn]=[filename]
710
					else:
711
						self.dn_list[dn].append(filename)
712
687
	def poll_ucs(self):
713
	def poll_ucs(self):
688
		'''
714
		'''
689
		poll changes from UCS: iterates over files exported by directory-listener module
715
		poll changes from UCS: iterates over files exported by directory-listener module
 Lines 693-699    Link Here 
693
719
694
		change_counter = 0
720
		change_counter = 0
695
721
696
		rejected_files = self._list_rejected_filenames_ucs()
722
		self.rejected_files = self._list_rejected_filenames_ucs()
697
723
698
		print "--------------------------------------"
724
		print "--------------------------------------"
699
		print "try to sync %s changes from UCS" % (len(os.listdir(self.listener_dir))-1)
725
		print "try to sync %s changes from UCS" % (len(os.listdir(self.listener_dir))-1)
 Lines 702-735    Link Here 
702
		done_counter = 0
728
		done_counter = 0
703
		files = os.listdir(self.listener_dir)
729
		files = os.listdir(self.listener_dir)
704
		files.sort()
730
		files.sort()
731
732
		# Create a dictonary with all DNs
733
		self._generate_dn_list_from(files)
734
705
		for listener_file in files:
735
		for listener_file in files:
706
			sync_successfull = False
736
			sync_successfull = False
707
			delete_file = False
737
			delete_file = False
708
			filename = os.path.join(self.listener_dir, listener_file)
738
			filename = os.path.join(self.listener_dir, listener_file)
709
			if not filename == "%s/tmp" % self.baseConfig['%s/ad/listener/dir' % self.CONFIGBASENAME]:
739
			if not filename == "%s/tmp" % self.baseConfig['%s/ad/listener/dir' % self.CONFIGBASENAME]:
710
				if not filename in rejected_files:
740
				if not filename in self.rejected_files:
711
					try:
741
					try:
712
						sync_successfull = self.__sync_file_from_ucs(filename)
742
						f=file(filename,'r')
713
					except (ldap.SERVER_DOWN, SystemExit):
743
					except IOError: # file not found so there's nothing to sync
714
						raise
744
						continue
715
					except: # FIXME: which exception is to be caught?
716
						self._save_rejected_ucs(filename, 'unknown')
717
						self._debug_traceback(ud.WARN,
718
											 "sync failed, saved as rejected \n\t%s" % filename)					
719
				if sync_successfull:
720
					os.remove(os.path.join(self.listener_dir,listener_file))
721
					change_counter += 1
722
745
746
					dn,new,old,old_dn=cPickle.load(f)
747
748
					if len(self.dn_list.get(dn, [])) < 2:
749
						# If the list contains more then one file, the DN will be synced later
750
						try:
751
							sync_successfull = self.__sync_file_from_ucs(filename)
752
						except (ldap.SERVER_DOWN, SystemExit):
753
							raise
754
						except: # FIXME: which exception is to be caught?
755
							self._save_rejected_ucs(filename, 'unknown')
756
							self._debug_traceback(ud.WARN,
757
											 	"sync failed, saved as rejected \n\t%s" % filename)					
758
						if sync_successfull:
759
							os.remove(os.path.join(self.listener_dir,listener_file))
760
							change_counter += 1
761
					else:
762
						try:
763
							ud.debug(ud.LDAP, ud.PROCESS, 'Drop %s. The DN %s will synced later' % (filename, dn))
764
						except:
765
							ud.debug(ud.LDAP, ud.PROCESS, 'Drop %s. The object will synced later' % (filename))
766
767
				if self.dn_list.get(dn):
768
					self.dn_list[dn].remove(filename)
769
723
				done_counter += 1
770
				done_counter += 1
724
				print "%s"%done_counter,
771
				print "%s"%done_counter,
725
				sys.stdout.flush()
772
				sys.stdout.flush()
726
773
727
		print ""	
774
		print ""	
728
		
775
		
729
		rejected_files = self._list_rejected_filenames_ucs()
776
		self.rejected_files = self._list_rejected_filenames_ucs()
730
		
777
		
731
		if rejected_files:
778
		if self.rejected_files:
732
			print "Changes from UCS: %s (%s saved rejected)" % (change_counter, len(rejected_files))
779
			print "Changes from UCS: %s (%s saved rejected)" % (change_counter, len(self.rejected_files))
733
		else:
780
		else:
734
			print "Changes from UCS: %s (%s saved rejected)" % (change_counter, '0')
781
			print "Changes from UCS: %s (%s saved rejected)" % (change_counter, '0')
735
		print "--------------------------------------"
782
		print "--------------------------------------"

Return to bug 18619