У меня есть разделите таблицы пользователей и доменов. Когда домен помечен как неактивный, я хочу, чтобы все пользователи этого домена не прошли аутентификацию.
Этот запрос работает нормально.
password_query = \
SELECT CONCAT("5500") AS gid, CONCAT("5500") AS uid, \
CONCAT("/mail/dir/",'%d','/','%n') AS home,Email as User, Password as password \
FROM users_table WHERE Email='%u' AND active=1;
Теперь я пытаюсь добавить проверку, чтобы увидеть, домен помечен как активный. Добавление SELECT DomainName FROM domains_table UNION
. (который я расширю позже) Но когда я добавлю это, запрос не будет выполнен. Имена таблиц и заголовки верны. Почему эта строка может вызвать запрос на сбой?
Кроме того, поддерживаются ли здесь условные операторы? Я хотел бы добавить IF (домен активен) THEN (передать запрос)
password_query = \
SELECT DomainName FROM domains_table \
UNION SELECT CONCAT("5500") AS gid, CONCAT("5500") AS uid, \
CONCAT("/mail/dir/",'%d','/','%n') AS home,Email as User, Password as password \
FROM users_table WHERE Email='%u' AND active=1;
Кажется, что каждый запрос работает, только если они возвращают gid, uid, home, переменные пользователя и пароля.
Спасибо
Решил проблему, выполнив следующие действия.
Включен auth-deny.conf.ext, раскомментировав его в dovecot.conf
Измените auth-deny.conf.ext, чтобы использовать драйвер sql, и добавьте новый файл как arg.
в новый файл добавлен еще один password_query со следующим кодом, который возвращает переменную deny
password_query =
SELECT ('% u') AS deny FROM domain_table WHERE DomainName = '% d' AND active = 0;
Это похоже на взлом, в журналах написано Запрос пароля должен возвращать поле с именем 'password'
было причиной сбоя аутентификации . Но это действительно работает. У кого-нибудь есть способ лучше?