154 metagenerator = UserMetaGenerator(self._cw, source=self.source) |
154 metagenerator = UserMetaGenerator(self._cw, source=self.source) |
155 return stores.NoHookRQLObjectStore(self._cw, metagenerator) |
155 return stores.NoHookRQLObjectStore(self._cw, metagenerator) |
156 |
156 |
157 def extentities_generator(self): |
157 def extentities_generator(self): |
158 self.debug('processing ldapfeed source %s %s', self.source, self.searchgroupfilterstr) |
158 self.debug('processing ldapfeed source %s %s', self.source, self.searchgroupfilterstr) |
|
159 # get existing users *not* managed by this source |
|
160 non_managed_users = dict(self._cw.execute( |
|
161 'Any L, SN WHERE' |
|
162 ' U is CWUser, U login L,' |
|
163 ' U cw_source S, S name SN,' |
|
164 ' NOT S eid %(eid)s', |
|
165 {'eid': self.source.eid}, build_descr=False)) |
159 # generate users and email addresses |
166 # generate users and email addresses |
160 for userdict in self.user_source_entities_by_extid.values(): |
167 for userdict in self.user_source_entities_by_extid.values(): |
161 attrs = self.ldap2cwattrs(userdict, 'CWUser') |
168 attrs = self.ldap2cwattrs(userdict, 'CWUser') |
|
169 login = attrs['login'][0] |
|
170 try: |
|
171 source = non_managed_users[login] |
|
172 except KeyError: |
|
173 pass |
|
174 else: |
|
175 self.error( |
|
176 'not synchronizing user %s. User already exist in source %s', |
|
177 login, source) |
|
178 continue |
162 pwd = attrs.get('upassword') |
179 pwd = attrs.get('upassword') |
163 if not pwd: |
180 if not pwd: |
164 # generate a dumb password if not fetched from ldap (see |
181 # generate a dumb password if not fetched from ldap (see |
165 # userPassword) |
182 # userPassword) |
166 pwd = crypt_password(generate_password()) |
183 pwd = crypt_password(generate_password()) |