docker-entrypoint.sh 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/bin/bash
  2. set -e
  3. if [[ ! -d "/data/dkim/txt" || ! -d "/data/dkim/keys" ]] ; then mkdir -p /data/dkim/{txt,keys} ; chown -R www-data:www-data /data/dkim; fi
  4. if [[ $(stat -c %U /data/dkim/) != "www-data" ]] ; then chown -R www-data:www-data /data/dkim ; fi
  5. # Wait for containers
  6. while ! mysqladmin ping --host mysql --silent; do
  7. sleep 2
  8. done
  9. until [ "$(redis-cli -h redis-mailcow PING)" == "PONG" ]; do
  10. sleep 2
  11. done
  12. # Migrate domain map
  13. declare -a DOMAIN_ARR
  14. redis-cli -h redis-mailcow DEL DOMAIN_MAP
  15. while read -r line
  16. do
  17. DOMAIN_ARR+=("$line")
  18. done < <(mysql -h mysql-mailcow -u "${DBUSER}" -p"${DBPASS}" "${DBNAME}" -e "SELECT domain FROM domain" -Bs)
  19. if [[ ! -z ${DOMAIN_ARR} ]]; then
  20. for domain in "${DOMAIN_ARR[@]}"; do
  21. redis-cli -h redis-mailcow HSET DOMAIN_MAP "${domain}" 1
  22. done
  23. fi
  24. # Migrate tag settings map
  25. declare -a SUBJ_TAG_ARR
  26. redis-cli -h redis-mailcow DEL SUBJ_TAG_ARR
  27. while read -r line
  28. do
  29. SUBJ_TAG_ARR+=("$line")
  30. done < <(mysql -h mysql-mailcow -u "${DBUSER}" -p"${DBPASS}" "${DBNAME}" -e "SELECT username FROM mailbox WHERE wants_tagged_subject='1'" -Bs)
  31. if [[ ! -z ${SUBJ_TAG_ARR} ]]; then
  32. for user in "${SUBJ_TAG_ARR[@]}"; do
  33. redis-cli -h redis-mailcow HSET RCPT_WANTS_SUBJECT_TAG "${user}" 1
  34. mysql -h mysql-mailcow -u "${DBUSER}" -p"${DBPASS}" "${DBNAME}" -e "UPDATE mailbox SET wants_tagged_subject='2' WHERE username = '${user}'"
  35. done
  36. fi
  37. # Migrate DKIM keys
  38. for file in /data/dkim/keys/*; do
  39. [[ -e $file ]] || break # handle the case of no files
  40. domain=${file%.dkim}
  41. if [[ -f /data/dkim/txt/${file} ]]; then
  42. redis-cli -h redis-mailcow HSET DKIM_PUB_KEYS "${domain}" "$(cat /data/dkim/txt/${file})"
  43. redis-cli -h redis-mailcow HSET DKIM_PRIV_KEYS "dkim.${domain}" "$(cat /data/dkim/keys/${file})"
  44. redis-cli -h redis-mailcow HSET DKIM_SELECTORS "${domain}" "dkim"
  45. fi
  46. rm /data/dkim/{keys,txt}/"${file}"
  47. done
  48. # Fix DKIM keys
  49. # Fetch domains
  50. declare -a DOMAIN_ARRAY
  51. while read -r line
  52. do
  53. DOMAIN_ARRAY+=("$line")
  54. done < <(mysql -h mysql-mailcow -u "${DBUSER}" -p"${DBPASS}" "${DBNAME}" -e "SELECT domain FROM domain" -Bs)
  55. while read -r line
  56. do
  57. DOMAIN_ARRAY+=("$line")
  58. done < <(mysql -h mysql-mailcow -u "${DBUSER}" -p"${DBPASS}" "${DBNAME}" -e "SELECT alias_domain FROM alias_domain" -Bs)
  59. # Loop through array and fix keys
  60. if [[ ! -z ${DOMAIN_ARRAY} ]]; then
  61. for domain in "${DOMAIN_ARRAY[@]}"; do
  62. WRONG_KEY=$(redis-cli -h redis-mailcow HGET DKIM_PRIV_KEYS "${domain}" | tr -d \")
  63. if [[ ! -z ${WRONG_KEY} ]]; then
  64. echo "Migrating defect key for domain ${domain}"
  65. redis-cli -h redis-mailcow HSET DKIM_PRIV_KEYS "dkim.${domain}" "${WRONG_KEY}"
  66. redis-cli -h redis-mailcow HDEL DKIM_PRIV_KEYS "${domain}"
  67. fi
  68. done
  69. fi
  70. exec "$@"