Update mail container for quota support
This commit is contained in:
+15
-7
@@ -268,19 +268,27 @@ async function groupAdminsCompare(req, res, next) {
|
||||
async function mailboxSearch(req, res, next) {
|
||||
debug('mailbox search: dn %s, scope %s, filter %s (from %s)', req.dn.toString(), req.scope, req.filter.toString(), req.connection.ldap.id);
|
||||
|
||||
// if cn is set we only search for one mailbox specifically
|
||||
// if cn is set OR filter is mail= we only search for one mailbox specifically
|
||||
let email, dn;
|
||||
if (req.dn.rdns[0].attrs.cn) {
|
||||
const email = req.dn.rdns[0].attrs.cn.value.toLowerCase();
|
||||
email = req.dn.rdns[0].attrs.cn.value.toLowerCase();
|
||||
dn = req.dn.toString();
|
||||
} else if (req.filter instanceof ldap.EqualityFilter && req.filter.attribute === 'mail') {
|
||||
email = req.filter.value.toLowerCase();
|
||||
dn = `cn=${email},${req.dn.toString()}`;
|
||||
}
|
||||
|
||||
if (email) {
|
||||
const parts = email.split('@');
|
||||
if (parts.length !== 2) return next(new ldap.NoSuchObjectError(req.dn.toString()));
|
||||
if (parts.length !== 2) return next(new ldap.NoSuchObjectError(dn.toString()));
|
||||
|
||||
const [error, mailbox] = await safe(mail.getMailbox(parts[0], parts[1]));
|
||||
if (error) return next(new ldap.OperationsError(error.toString()));
|
||||
if (!mailbox) return next(new ldap.NoSuchObjectError(req.dn.toString()));
|
||||
if (!mailbox.active) return next(new ldap.NoSuchObjectError(req.dn.toString()));
|
||||
if (!mailbox) return next(new ldap.NoSuchObjectError(dn.toString()));
|
||||
if (!mailbox.active) return next(new ldap.NoSuchObjectError(dn.toString()));
|
||||
|
||||
const obj = {
|
||||
dn: req.dn.toString(),
|
||||
dn: dn.toString(),
|
||||
attributes: {
|
||||
objectclass: ['mailbox'],
|
||||
objectcategory: 'mailbox',
|
||||
@@ -301,7 +309,7 @@ async function mailboxSearch(req, res, next) {
|
||||
} else {
|
||||
res.end();
|
||||
}
|
||||
} else { // new sogo
|
||||
} else { // new sogo and dovecot listing (doveadm -A)
|
||||
// TODO figure out how proper pagination here could work
|
||||
let [error, mailboxes] = await safe(mail.listAllMailboxes(1, 100000));
|
||||
if (error) return next(new ldap.OperationsError(error.toString()));
|
||||
|
||||
Reference in New Issue
Block a user