Branch 'pykolab-0.4' - pykolab/auth
Jeroen van Meeuwen
vanmeeuwen at kolabsys.com
Thu Sep 13 17:36:19 CEST 2012
pykolab/auth/ldap/__init__.py | 97 ++++++++++++++++++++++++++++++------------
1 file changed, 71 insertions(+), 26 deletions(-)
New commits:
commit 4a82ec72aae5e82cc1dcf4ad7b9b497670de3698
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Thu Sep 13 16:35:42 2012 +0100
Initial fixes for syncrepl compatibility
diff --git a/pykolab/auth/ldap/__init__.py b/pykolab/auth/ldap/__init__.py
index 58035bf..fd3aee4 100644
--- a/pykolab/auth/ldap/__init__.py
+++ b/pykolab/auth/ldap/__init__.py
@@ -1444,34 +1444,75 @@ class LDAP(pykolab.base.Base):
self.connect()
def _synchronize_callback(self, *args, **kw):
- change_type = None
+ if kw.has_key('change_type'):
+ change_type = None
- change_dict = {
- 'change_type': kw['change_type'],
- 'previous_dn': kw['previous_dn'],
- 'change_number': kw['change_number'],
- 'dn': kw['dn']
- }
+ change_dict = {
+ 'change_type': kw['change_type'],
+ 'previous_dn': kw['previous_dn'],
+ 'change_number': kw['change_number'],
+ 'dn': kw['dn']
+ }
- entry = utils.normalize(kw['entry'])
- entry['dn'] = kw['dn']
+ entry = utils.normalize(kw['entry'])
+ entry['dn'] = kw['dn']
- unique_attr = self.config_get('unique_attribute')
- entry['id'] = entry[unique_attr]
+ unique_attr = self.config_get('unique_attribute')
+ entry['id'] = entry[unique_attr]
- try:
- entry['type'] = self._entry_type(entry)
- except:
- entry['type'] = "unknown"
+ try:
+ entry['type'] = self._entry_type(entry)
+ except:
+ entry['type'] = "unknown"
- log.debug(_("Entry type: %s") % (entry['type']), level=8)
+ log.debug(_("Entry type: %s") % (entry['type']), level=8)
- if change_dict['change_type'] == None:
- # This entry was in the start result set
- eval("self._change_none_%s(entry, change_dict)" % (entry['type']))
- else:
- change = psearch.CHANGE_TYPES_STR[change_dict['change_type']].lower()
- eval("self._change_%s_%s(entry, change_dict)" % (change, entry['type']))
+ if change_dict['change_type'] == None:
+ # This entry was in the start result set
+ eval("self._change_none_%s(entry, change_dict)" % (entry['type']))
+ else:
+ change = psearch.CHANGE_TYPES_STR[change_dict['change_type']].lower()
+ eval("self._change_%s_%s(entry, change_dict)" % (change, entry['type']))
+
+ # Typical for Paged Results Control
+ elif kw.has_key('entry') and isinstance(kw['entry'], list):
+ for entry_dn,entry_attrs in kw['entry']:
+ entry = { 'dn': entry_dn }
+ entry_attrs = utils.normalize(entry_attrs)
+ for attr in entry_attrs.keys():
+ entry[attr.lower()] = entry_attrs[attr]
+
+ unique_attr = self.config_get('unique_attribute')
+ entry['id'] = entry[unique_attr]
+
+ try:
+ entry['type'] = self._entry_type(entry)
+ except:
+ entry['type'] = "unknown"
+
+ log.debug(_("Entry type: %s") % (entry['type']), level=8)
+
+ eval("self._change_none_%s(entry, None)" % (entry['type']))
+
+# result_attribute = conf.get('cyrus-sasl', 'result_attribute')
+#
+# rcpt_addrs = self.recipient_policy(entry)
+#
+# log.debug(_("Recipient Addresses: %r") % (rcpt_addrs), level=9)
+#
+# for key in rcpt_addrs.keys():
+# entry[key] = rcpt_addrs[key]
+#
+# cache.get_entry(self.domain, entry)
+#
+# self.imap.connect(domain=self.domain)
+#
+# if not self.imap.user_mailbox_exists(entry[result_attribute]):
+# folder = self.imap.user_mailbox_create(
+# entry[result_attribute]
+# )
+#
+# server = self.imap.user_mailbox_server(folder)
def _unbind(self):
"""
@@ -1687,20 +1728,24 @@ class LDAP(pykolab.base.Base):
secondary_domains=[]
):
+ import ldapurl
import syncrepl
+ ldap_url = ldapurl.LDAPUrl(self.config_get('ldap_uri'))
+
ldap_sync_conn = syncrepl.DNSync(
- '/var/lib/pykolab/syncrepl.db',
+ '/var/lib/kolab/syncrepl_%s.db' % (self.domain),
ldap_url.initializeUrl(),
- trace_level=ldapmodule_trace_level,
- trace_file=ldapmodule_trace_file
+ trace_level=2,
+ callback=self._synchronize_callback
)
msgid = ldap_sync_conn.syncrepl_search(
base_dn,
scope,
mode='refreshAndPersist',
- filterstr=filterstr
+ filterstr=filterstr,
+ attrlist=attrlist,
)
try:
More information about the commits
mailing list