У меня есть система электронной почты, которая свободно настроена в соответствии с руководствами ISPMail здесь - https://workaround.org/ispmail/buster/
Я пытаюсь настроить сценарий для автоматического переноса схемы паролей, но у меня возникают проблемы. Я следовал руководствам, похожим на это: https://wiki.dovecot.org/HowTo/ConvertPasswordSchemes
Когда я включаю предварительную выборку userdb, Couldn't drop privileges: User is missing UID (see mail_uid setting)
появляется ошибка.
Мои user_query и password_query следующие:
user_query = SELECT user, \
concat('*:bytes=', quota) AS quota_rule, \
'/var/vmail/%d/%n' AS home, \
5000 AS uid, 5000 AS gid \
FROM users WHERE user='%u';
password_query = SELECT user, password, \
'%w' AS userdb_plain_pass, \
concat('*:bytes=', quota) AS quota_rule, \
'/var/vmail/%d/%n' AS home, \
5000 AS uid, 5000 AS gid \
FROM users WHERE user='%u';
У меня есть следующая конфигурация: (в этом порядке)
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = prefetch
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
Глядя на журналы отладки, когда я удаляю предварительную выборку, и все работает, как ожидалось:
Jan 5 15:21:38 m1 dovecot: auth: Debug: master userdb out: USER#0114090494977#011aaron@example.com#011plain_pass=Password1234#011quota_rule=*:bytes=0#011home=/var/vmail/example.com/aaron#011uid=5000#011gid=5000#011auth_token=bdxxxxx
Однако, когда предварительная выборка включена, он не получает uid и gid в passdb:
Jan 5 15:18:36 m1 dovecot: auth: Debug: master userdb out: USER#0113382444033#011aaron@example.com#011plain_pass=Password1234#011auth_token=bdxxxx
Есть предложения по решению этой проблемы при использовании предварительной выборки?
Спасибо!
Оказывается, в моем запросе passdb отсутствовал userdb_
префиксы. Регулировка его следующим образом решила проблему.
password_query = SELECT user, password, \
'%w' AS userdb_plain_pass, \
concat('*:bytes=', quota) AS quota_rule, \
'/var/vmail/%d/%n' AS home, \
5000 AS userdb_uid, 5000 AS userdb_gid \
FROM users WHERE user='%u';
Dovecot Документация по Предварительная выборка базы данных пользователей:
Prefetch в основном работает, требуя, чтобы passdb возвращал информацию userdb в дополнительных полях с
userdb_
префиксы. Например, если userdb обычно возвращаетuid
,gid
иhome
полей, passdb должен будет вернутьuserdb_uid
,userdb_gid
иuserdb_home
поля.