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