install_sieve.sh 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #!/bin/bash
  2. # info: Install / remove sieve / manage-sieve for Dovecot
  3. #
  4. # Thos function installs manage-sieve functionality for dovecot.
  5. #----------------------------------------------------------#
  6. # Variable&Function #
  7. #----------------------------------------------------------#
  8. # Includes
  9. # shellcheck source=/etc/hestiacp/hestia.conf
  10. source /etc/hestiacp/hestia.conf
  11. # shellcheck source=/usr/local/hestia/func/main.sh
  12. source $HESTIA/func/main.sh
  13. # load config file
  14. source_conf "$HESTIA/conf/hestia.conf"
  15. source_conf "$HESTIA/install/upgrade/upgrade.conf"
  16. #----------------------------------------------------------#
  17. # Verifications #
  18. #----------------------------------------------------------#
  19. #check if string already exists
  20. if grep "dovecot_virtual_delivery" /etc/exim4/exim4.conf.template; then
  21. echo "Plugin allready enabled"
  22. exit 0
  23. fi
  24. #----------------------------------------------------------#
  25. # Action #
  26. #----------------------------------------------------------#
  27. HAS_DOVECOT_SIEVE_INSTALLED=$(dpkg --get-selections dovecot-sieve | grep dovecot-sieve | wc -l)
  28. # Folder paths
  29. RC_INSTALL_DIR="/var/lib/roundcube"
  30. RC_CONFIG_DIR="/etc/roundcube"
  31. # If we want to install sieve
  32. if [ "$HAS_DOVECOT_SIEVE_INSTALLED" = "0" ]; then
  33. # if sieve is not installed... install it.
  34. apt-get -qq install dovecot-sieve dovecot-managesieved -y
  35. # dovecot.conf install
  36. sed -i "s/namespace/service stats \{\n unix_listener stats-writer \{\n group = mail\n mode = 0660\n user = dovecot\n \}\n\}\n\nnamespace/g" /etc/dovecot/dovecot.conf
  37. # dovecot conf files
  38. # 10-master.conf
  39. sed -i -E -z "s/ }\n user = dovecot\n}/ \}\n unix_listener auth-master \{\n group = mail\n mode = 0660\n user = dovecot\n \}\n user = dovecot\n\}/g" /etc/dovecot/conf.d/10-master.conf
  40. # 15-lda.conf
  41. sed -i "s/\#mail_plugins = \\\$mail_plugins/mail_plugins = \$mail_plugins quota sieve\n auth_socket_path = \/var\/run\/dovecot\/auth-master/g" /etc/dovecot/conf.d/15-lda.conf
  42. # 20-imap.conf
  43. sed -i "s/mail_plugins = quota imap_quota/mail_plugins = quota imap_quota imap_sieve/g" /etc/dovecot/conf.d/20-imap.conf
  44. # replace dovecot-sieve config files
  45. cp -f $HESTIA_COMMON_DIR/dovecot/sieve/* /etc/dovecot/conf.d
  46. # dovecot default file install
  47. mkdir -p /etc/dovecot/sieve
  48. echo -e "require [\"fileinto\"];\n# rule:[SPAM]\nif header :contains \"X-Spam-Flag\" \"YES\" {\n fileinto \"INBOX.Spam\";\n}\n" > /etc/dovecot/sieve/default
  49. # exim4 install
  50. sed -i "s/\stransport = local_delivery/ transport = dovecot_virtual_delivery/" /etc/exim4/exim4.conf.template
  51. sed -i "s/address_pipe:/dovecot_virtual_delivery:\n driver = pipe\n command = \/usr\/lib\/dovecot\/dovecot-lda -e -d \${extract{1}{:}{\${lookup{\$local_part}lsearch{\/etc\/exim4\/domains\/\${lookup{\$domain}dsearch{\/etc\/exim4\/domains\/}}\/accounts}}}}@\${lookup{\$domain}dsearch{\/etc\/exim4\/domains\/}}\n delivery_date_add\n envelope_to_add\n return_path_add\n log_output = true\n log_defer_output = true\n user = \${extract{2}{:}{\${lookup{\$local_part}lsearch{\/etc\/exim4\/domains\/\${lookup{\$domain}dsearch{\/etc\/exim4\/domains\/}}\/passwd}}}}\n group = mail\n return_output\n\naddress_pipe:/g" /etc/exim4/exim4.conf.template
  52. # roundcube install
  53. mkdir -p $RC_CONFIG_DIR/plugins/managesieve
  54. cp -f $HESTIA_COMMON_DIR/roundcube/plugins/config_managesieve.inc.php $RC_CONFIG_DIR/plugins/managesieve/config.inc.php
  55. ln -s $RC_CONFIG_DIR/plugins/managesieve/config.inc.php $RC_INSTALL_DIR/plugins/managesieve/config.inc.php
  56. # permission changes
  57. chown -R dovecot:mail /var/log/dovecot.log
  58. chmod 660 /var/log/dovecot.log
  59. chown -R root:www-data $RC_CONFIG_DIR/
  60. chmod 751 -R $RC_CONFIG_DIR
  61. chmod 644 $RC_CONFIG_DIR/plugins/managesieve/config.inc.php
  62. sed -i "s/\"archive\"/\"archive\", \"managesieve\"/g" $RC_CONFIG_DIR/config.inc.php
  63. #restart dovecot and exim4
  64. systemctl restart dovecot > /dev/null 2>&1
  65. systemctl restart exim4 > /dev/null 2>&1
  66. else
  67. # Uninstall sieve if it exist
  68. if [ -f "/etc/dovecot/conf.d/90-sieve.conf" ]; then
  69. # dovecot.conf multiline sed
  70. sed -i -E -z "s/service stats \{\n unix_listener stats-writer \{\n group = mail\n mode = 0660\n user = dovecot\n \}\n\}\n\n//g" /etc/dovecot/dovecot.conf
  71. # dovecot conf files
  72. # 10-master.conf
  73. sed -i -E -z "s/ \}\n unix_listener auth-master \{\n group = mail\n mode = 0660\n user = dovecot\n \}\n user = dovecot\n\}/ \}\n user = dovecot\n\}/g" /etc/dovecot/conf.d/10-master.conf
  74. # 15-lda.conf
  75. sed -i -E -z "s/mail_plugins = \\\$mail_plugins sieve\n auth_socket_path = \/run\/dovecot\/auth-master/\#mail_plugins = \$mail_plugins/g" /etc/dovecot/conf.d/15-lda.conf
  76. # 20-imap.conf
  77. sed -i "s/mail_plugins = quota imap_quota imap_sieve/mail_plugins = quota imap_quota/g" /etc/dovecot/conf.d/20-imap.conf
  78. # Delete dovecot-sieve config files
  79. rm -f /etc/dovecot/conf.d/20-managesieve.conf
  80. rm -f /etc/dovecot/conf.d/90-sieve-extprograms.conf
  81. rm -f /etc/dovecot/conf.d/90-sieve.conf
  82. # Dovecot default file
  83. rm -r -f /etc/dovecot/sieve
  84. # If sieve is installed... remove it.
  85. apt-get -qq remove --purge dovecot-sieve -y
  86. # Exim4
  87. sed -i "s/\stransport = dovecot_virtual_delivery/ transport = local_delivery/" /etc/exim4/exim4.conf.template
  88. sed -i "s/dovecot_virtual_delivery:\n driver = pipe\n command = \/usr\/lib\/dovecot\/dovecot-lda -e -d \${extract{1}{:}{\${lookup{\$local_part}lsearch{\/etc\/exim4\/domains\/\${lookup{\$domain}dsearch{\/etc\/exim4\/domains/}}\/accounts}}}}@\${lookup{\$domain}dsearch{\/etc\/exim4\/domains\/}}\n delivery_date_add\n envelope_to_add\n return_path_add\n log_output = true\n log_defer_output = true\n user = \${extract{2}{:}{\${lookup{\$local_part}lsearch{\/etc\/exim4\/domains\/\${lookup{\$domain}dsearch{\/etc\/exim4\/domains\/}}\/passwd}}}}\n group = mail\n return_output\n//g" /etc/exim4/exim4.conf.template
  89. # Roundcube
  90. rm -f -r $RC_CONFIG_DIR/plugins/managesieve
  91. rm -f $RC_INSTALL_DIR/plugins/managesieve/config.inc.php
  92. sed -i "s/\"archive\", \"managesieve\"/\"archive\"/g" $RC_CONFIG_DIR/config.inc.php
  93. #restart dovecot and exim4
  94. systemctl restart dovecot > /dev/null 2>&1
  95. systemctl restart exim4 > /dev/null 2>&1
  96. fi
  97. fi