diff --git a/pykolab/auth/__init__.py b/pykolab/auth/__init__.py --- a/pykolab/auth/__init__.py +++ b/pykolab/auth/__init__.py @@ -193,7 +193,7 @@ else: return result - def find_recipient(self, address, domain=None): + def find_recipient(self, address, domain=None, search_attrs=None): """ Find one or more entries corresponding to the recipient address. """ @@ -203,7 +203,7 @@ if not self._auth or self._auth == None: self.connect(domain=domain) - result = self._auth.find_recipient(address) + result = self._auth.find_recipient(address, search_attrs=search_attrs) if isinstance(result, list) and len(result) == 1: return result[0] diff --git a/pykolab/auth/ldap/__init__.py b/pykolab/auth/ldap/__init__.py --- a/pykolab/auth/ldap/__init__.py +++ b/pykolab/auth/ldap/__init__.py @@ -674,7 +674,7 @@ return _entry_dns - def find_recipient(self, address="*", exclude_entry_id=None): + def find_recipient(self, address="*", exclude_entry_id=None, search_attrs=None): """ Given an address string or list of addresses, find one or more valid recipients. @@ -684,6 +684,9 @@ Specify an additional entry_id to exclude to exclude matches against the current entry. + + In search_attrs you can specify list of search attributes. By default + mail_attributes are used. """ self._bind() @@ -700,13 +703,13 @@ __filter_suffix = "" kolab_filter = self._kolab_filter() - recipient_address_attrs = self.config_get_list("mail_attributes") - - result_attributes = [] - for recipient_address_attr in recipient_address_attrs: - result_attributes.append(recipient_address_attr) + if search_attrs is not None: + recipient_address_attrs = search_attrs + else: + recipient_address_attrs = self.config_get_list("mail_attributes") + result_attributes = recipient_address_attrs result_attributes.append(self.config_get('unique_attribute')) _filter = "(|" diff --git a/pykolab/cli/cmd_sync_mailhost_attrs.py b/pykolab/cli/cmd_sync_mailhost_attrs.py --- a/pykolab/cli/cmd_sync_mailhost_attrs.py +++ b/pykolab/cli/cmd_sync_mailhost_attrs.py @@ -71,8 +71,11 @@ auth = Auth() auth.connect() - domains = auth.list_domains() + result_attribute = conf.get('cyrus-sasl', 'result_attribute') + if result_attribute is None: + result_attribute = 'mail' + domains = auth.list_domains() folders = imap.lm() imap_domains_not_domains = [] @@ -140,7 +143,7 @@ recipient = auth.find_folder_resource(folder) else: r_folder = '/'.join(folder.split('/')[1:]) - recipient = auth.find_recipient(r_folder) + recipient = auth.find_recipient(r_folder, search_attrs=[result_attribute]) if (isinstance(recipient, list)): if len(recipient) > 1: @@ -188,6 +191,6 @@ if folder.startswith('shared/'): recipient = auth.find_folder_resource(folder) else: - recipient = auth.find_recipient('/'.join(folder.split('/')[1:])) + recipient = auth.find_recipient('/'.join(folder.split('/')[1:]), search_attrs=[result_attribute]) print folder, server, recipient