docker-entrypoint.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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 -u${DBUSER} -p${DBPASS} --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 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. while read line
  20. do
  21. DOMAIN_ARR+=("$line")
  22. done < <(mysql -h mysql-mailcow -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT alias_domain FROM alias_domain" -Bs)
  23. if [[ ! -z ${DOMAIN_ARR} ]]; then
  24. for domain in "${DOMAIN_ARR[@]}"; do
  25. redis-cli -h redis-mailcow HSET DOMAIN_MAP ${domain} 1
  26. done
  27. fi
  28. # Migrate tag settings map
  29. declare -a SUBJ_TAG_ARR
  30. redis-cli -h redis-mailcow DEL SUBJ_TAG_ARR
  31. while read line
  32. do
  33. SUBJ_TAG_ARR+=("$line")
  34. done < <(mysql -h mysql-mailcow -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT username FROM mailbox WHERE wants_tagged_subject='1'" -Bs)
  35. if [[ ! -z ${SUBJ_TAG_ARR} ]]; then
  36. for user in "${SUBJ_TAG_ARR[@]}"; do
  37. redis-cli -h redis-mailcow HSET RCPT_WANTS_SUBJECT_TAG ${user} 1
  38. mysql -h mysql-mailcow -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "UPDATE mailbox SET wants_tagged_subject='2' WHERE username = '${user}'"
  39. done
  40. fi
  41. # Migrate DKIM keys
  42. for file in $(ls /data/dkim/keys/); do
  43. domain=${file%.dkim}
  44. if [[ -f /data/dkim/txt/${file} ]]; then
  45. redis-cli -h redis-mailcow HSET DKIM_PUB_KEYS "${domain}" "$(cat /data/dkim/txt/${file})"
  46. redis-cli -h redis-mailcow HSET DKIM_PRIV_KEYS "dkim.${domain}" "$(cat /data/dkim/keys/${file})"
  47. redis-cli -h redis-mailcow HSET DKIM_SELECTORS "${domain}" "dkim"
  48. fi
  49. rm /data/dkim/{keys,txt}/${file}
  50. done
  51. # Fix DKIM keys
  52. # Fetch domains
  53. declare -a DOMAIN_ARRAY
  54. while read line
  55. do
  56. DOMAIN_ARRAY+=("$line")
  57. done < <(mysql -h mysql-mailcow -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT domain FROM domain" -Bs)
  58. while read line
  59. do
  60. DOMAIN_ARRAY+=("$line")
  61. done < <(mysql -h mysql-mailcow -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT alias_domain FROM alias_domain" -Bs)
  62. # Loop through array and fix keys
  63. if [[ ! -z ${DOMAIN_ARRAY} ]]; then
  64. for domain in "${DOMAIN_ARRAY[@]}"; do
  65. WRONG_KEY=$(redis-cli -h redis-mailcow HGET DKIM_PRIV_KEYS ${domain} | tr -d \")
  66. if [[ ! -z ${WRONG_KEY} ]]; then
  67. echo "Migrating defect key for domain ${domain}"
  68. redis-cli -h redis-mailcow HSET DKIM_PRIV_KEYS "dkim.${domain}" ${WRONG_KEY}
  69. redis-cli -h redis-mailcow HDEL DKIM_PRIV_KEYS "${domain}"
  70. fi
  71. done
  72. fi
  73. exec "$@"