示例#1
0
文件: alias.py 项目: tv42/scalemail
    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
示例#2
0
文件: smtp.py 项目: tv42/scalemail
    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
示例#3
0
文件: smtp.py 项目: tv42/scalemail
 def _userdir(self, username):
     username, folder = util.addr_split(username, self.config.getRecipientDelimiters())
     return (os.path.join(self._userdir_prefix(username), username), folder)