docker-entrypoint.sh 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. 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 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 $(ls /data/dkim/keys/); do
  39. domain=${file%.dkim}
  40. if [[ -f /data/dkim/txt/${file} ]]; then
  41. redis-cli -h redis-mailcow HSET DKIM_PUB_KEYS "${domain}" "$(cat /data/dkim/txt/${file})"
  42. redis-cli -h redis-mailcow HSET DKIM_PRIV_KEYS "dkim.${domain}" "$(cat /data/dkim/keys/${file})"
  43. redis-cli -h redis-mailcow HSET DKIM_SELECTORS "${domain}" "dkim"
  44. fi
  45. rm /data/dkim/{keys,txt}/${file}
  46. done
  47. # Fix DKIM keys
  48. # Fetch domains
  49. declare -a DOMAIN_ARRAY
  50. while read line
  51. do
  52. DOMAIN_ARRAY+=("$line")
  53. done < <(mysql -h mysql-mailcow -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT domain FROM domain" -Bs)
  54. while read line
  55. do
  56. DOMAIN_ARRAY+=("$line")
  57. done < <(mysql -h mysql-mailcow -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT alias_domain FROM alias_domain" -Bs)
  58. # Loop through array and fix keys
  59. if [[ ! -z ${DOMAIN_ARRAY} ]]; then
  60. for domain in "${DOMAIN_ARRAY[@]}"; do
  61. WRONG_KEY=$(redis-cli -h redis-mailcow HGET DKIM_PRIV_KEYS ${domain} | tr -d \")
  62. if [[ ! -z ${WRONG_KEY} ]]; then
  63. echo "Migrating defect key for domain ${domain}"
  64. redis-cli -h redis-mailcow HSET DKIM_PRIV_KEYS "dkim.${domain}" ${WRONG_KEY}
  65. redis-cli -h redis-mailcow HDEL DKIM_PRIV_KEYS "${domain}"
  66. fi
  67. done
  68. fi
  69. exec "$@"