def _searchCompleted(self, entries): target = self.user+'@'+self.domain alias = [] real = [] ldapAttributeAlias=self.config.getLDAPAttributeAlias() ldapAttributeMailbox=self.config.getLDAPAttributeMailbox() for e in entries: if target in e.get(ldapAttributeMailbox, []): real.append(e) elif target in e.get(ldapAttributeAlias, []): alias.append(e) if alias and real: raise util.ScaleMailAccountMultipleEntries if not alias: return None else: l = [] for e in alias: for address in e[ldapAttributeMailbox]: local, host = address.split('@', 1) user, folder = util.addr_split( local, self.config.getRecipientDelimiters()) if folder is None: folder = self.folder newAddress = util.addr_join(user, folder, host, self.config.getRecipientDelimiters()) l.append(newAddress) return l
def ldapUserExists(self, username): username, folder = util.addr_split(username, self.config.getRecipientDelimiters()) dn = self.config.getDNForDomain(self.domain) c=ldapconnector.LDAPClientCreator(reactor, ldapclient.LDAPClient) d=c.connect(dn, self.config.getServiceLocationOverride()) def _bind(proto): d=proto.bind() d.addCallback(lambda _: proto) return d d.addCallback(_bind) def _search(proto, user, box, domain, ldapAttributeMailbox, ldapAttributeMailHost, dn): o = ldapsyntax.LDAPEntry(client=proto, dn=dn) d=o.search(filterObject=pureldap.LDAPFilter_and( [ pureldap.LDAPFilter_equalityMatch( attributeDesc=pureldap.LDAPAttributeDescription(ldapAttributeMailbox), assertionValue=pureldap.LDAPAssertionValue(user+'@'+domain)), pureldap.LDAPFilter_equalityMatch( attributeDesc=pureldap.LDAPAttributeDescription(ldapAttributeMailHost), assertionValue=pureldap.LDAPAssertionValue(box)), ]), attributes=[self.config.getLDAPAttributeAway(), self.config.getLDAPAttributeFullName()], sizeLimit=1) def _unbind(entries, proto): proto.unbind() if len(entries) > 1: raise RuntimeError, "LDAP server exceeded size limit." if entries: return entries[0] else: return None d.addCallback(_unbind, proto) return d d.addCallback(_search, user=username, box=self.box, domain=self.domain, ldapAttributeMailbox=self.config.getLDAPAttributeMailbox(), ldapAttributeMailHost=self.config.getLDAPAttributeMailHost(), dn=self.config.getDNForDomain(self.domain)) def _found(exists, prefix, dir): if exists: try: os.mkdir(prefix, 0700) except OSError, err: if err.errno!=errno.EEXIST: raise maildirmake(dir) return exists
def _userdir(self, username): username, folder = util.addr_split(username, self.config.getRecipientDelimiters()) return (os.path.join(self._userdir_prefix(username), username), folder)