You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.8 KiB
49 lines
1.8 KiB
#!/bin/bash |
|
# Switch support@geonet.co.id from authsource mailcow → ldap |
|
# Inbox/fetchmail unchanged — only IMAP/SMTP login uses AD password |
|
set -euo pipefail |
|
|
|
MAILBOX='support@geonet.co.id' |
|
STACK='/opt/stacks/mailcow' |
|
MYSQL_C='mailcowdockerized-mysql-mailcow-1' |
|
DOVECOT_C='mailcowdockerized-dovecot-mailcow-1' |
|
SOGO_C='mailcowdockerized-sogo-mailcow-1' |
|
PHP_C='mailcowdockerized-php-fpm-mailcow-1' |
|
|
|
mysql_q() { |
|
docker exec "$MYSQL_C" bash -lc "mysql mailcow -uroot -p\"\$MYSQL_ROOT_PASSWORD\" -N -e \"$1\"" |
|
} |
|
|
|
echo "== Pre-check ==" |
|
BEFORE=$(mysql_q "SELECT username, active, authsource FROM mailbox WHERE username='${MAILBOX}';") |
|
echo "Mailbox: $BEFORE" |
|
if ! echo "$BEFORE" | grep -q "$MAILBOX"; then |
|
echo "ERROR: mailbox ${MAILBOX} not found" |
|
exit 1 |
|
fi |
|
|
|
echo "== LDAP sync (import/provision) ==" |
|
docker exec "$PHP_C" php /crons/ldap-sync.php || true |
|
|
|
echo "== Switch authsource to ldap ==" |
|
mysql_q "UPDATE mailbox SET authsource='ldap' WHERE username='${MAILBOX}';" |
|
AFTER=$(mysql_q "SELECT username, active, authsource FROM mailbox WHERE username='${MAILBOX}';") |
|
echo "Mailbox after: $AFTER" |
|
|
|
echo "== SOGo static view (LDAP user) ==" |
|
# LDAP users: clear local password hash in SOGo view; SOGo authenticates via LDAP |
|
docker exec "$MYSQL_C" bash -lc "mysql mailcow -uroot -p\"\$MYSQL_ROOT_PASSWORD\" -e \" |
|
UPDATE _sogo_static_view SET c_password = NULL WHERE c_name = '${MAILBOX}'; |
|
\"" || echo "WARN: _sogo_static_view update skipped (table/row may differ)" |
|
|
|
echo "== Restart mail services ==" |
|
cd "$STACK" |
|
docker compose restart dovecot-mailcow sogo-mailcow |
|
|
|
echo "== fetchmail timer ==" |
|
systemctl is-active fetchmail-support.timer |
|
docker exec "$DOVECOT_C" doveadm mailbox status -u "$MAILBOX" messages INBOX 2>/dev/null || true |
|
|
|
echo "" |
|
echo "DONE. Test IMAP with AD password for ${MAILBOX}" |
|
echo "fetchmail POP3 drain unchanged (cPanel -> same inbox)"
|
|
|