Izbačen bash-izam iz postinsta
[dovecot-cn.git] / debian / postinst
index 18fd1cf..0b0086b 100755 (executable)
@@ -8,6 +8,40 @@ set -e
 # Load CARNet Tools
 . /usr/share/carnet-tools/functions.sh
 
+
+move_certs() {
+        if [ -f /etc/dovecot/private/dovecot.pem -a ! -f /etc/dovecot/private/dovecot.key ]; then
+                mv -f /etc/dovecot/private/dovecot.pem /etc/dovecot/private/dovecot.key || true
+        fi
+
+        if [ -f /etc/dovecot/dovecot.pem ]; then
+                mv -f /etc/dovecot/dovecot.pem /etc/dovecot/private/dovecot.pem || true
+        fi
+}
+
+put_new_certs() {
+# postavlja cert i key na nove putanje iz bustera
+  cp_check_and_sed '#ssl_key = </etc/dovecot/private/dovecot.pem' \
+                   's|#ssl_key = </etc/dovecot/private/dovecot.pem|ssl_key = </etc/dovecot/private/dovecot.key|g' \
+                   /etc/dovecot/conf.d/10-ssl.conf || true
+  cp_check_and_sed '#ssl_cert = </etc/dovecot/dovecot.pem' \
+                   's|#ssl_cert = </etc/dovecot/dovecot.pem|ssl_cert = </etc/dovecot/private/dovecot.pem|g' \
+                   /etc/dovecot/conf.d/10-ssl.conf || true
+  cp_check_and_sed 'ssl_cert = </etc/dovecot/dovecot.pem' \
+                   's|ssl_cert = </etc/dovecot/dovecot.pem|ssl_cert = </etc/dovecot/private/dovecot.pem|g' \
+                   /etc/dovecot/conf.d/10-ssl.conf || true
+  cp_check_and_sed 'ssl_key = </etc/dovecot/private/dovecot.pem' \
+                   's|ssl_key = </etc/dovecot/private/dovecot.pem|ssl_key = </etc/dovecot/private/dovecot.key|g' \
+                   /etc/dovecot/conf.d/10-ssl.conf || true
+  cp_check_and_sed '#ssl_cert = </etc/dovecot/private/dovecot.pem' \
+                   's|#ssl_cert = </etc/dovecot/private/dovecot.pem|ssl_cert = </etc/dovecot/private/dovecot.pem|g' \
+                   /etc/dovecot/conf.d/10-ssl.conf || true
+  cp_check_and_sed '#ssl_key = </etc/dovecot/private/dovecot.key' \
+                   's|#ssl_key = </etc/dovecot/private/dovecot.key|ssl_key = </etc/dovecot/private/dovecot.key|g' \
+                   /etc/dovecot/conf.d/10-ssl.conf || true
+}
+
+
 cp_check_and_sed '#disable_plaintext_auth' \
                  's/#disable_plaintext_auth/disable_plaintext_auth/g' \
                 /etc/dovecot/conf.d/10-auth.conf || true
@@ -16,6 +50,12 @@ cp_check_and_sed 'disable_plaintext_auth.*yes' \
                  's/disable_plaintext_auth.*$/disable_plaintext_auth = no/g' \
                 /etc/dovecot/conf.d/10-auth.conf || true
 
+if ! grep -q "mail_privileged_group.*mail$" /etc/dovecot/conf.d/10-mail.conf; then
+       cp_check_and_sed 'mail_privileged_group' \
+                        's/mail_privileged_group.*$/mail_privileged_group = mail/g' \
+                        /etc/dovecot/conf.d/10-mail.conf || true
+fi
+
 cp_check_and_sed '#imap_client_workarounds' \
                  's/#imap_client_workarounds/imap_client_workarounds/g' \
                 /etc/dovecot/conf.d/20-imap.conf || true
@@ -51,30 +91,45 @@ cp_check_and_sed 'ssl = no' \
                 's/^ssl = no/ssl = yes/g' \
                 /etc/dovecot/conf.d/10-ssl.conf || true
 
-if ! grep -q ^ssl_cert /etc/dovecot/conf.d/10-ssl.conf \
-  && ! grep -q ^ssl_key /etc/dovecot/conf.d/10-ssl.conf; then
 
-  if [ ! -f /etc/dovecot/dovecot.pem -a ! -f /etc/dovecot/private/dovecot.pem ]; then
-    echo "CN: Generating certificate and key..."
-    /usr/share/dovecot-cn/mkcert.sh || true
-  fi
-
-  cp_check_and_sed '#ssl_cert = </etc/dovecot/dovecot.pem' \
-                  's|#ssl_cert = </etc/dovecot/dovecot.pem|ssl_cert = </etc/dovecot/dovecot.pem|g' \
-                  /etc/dovecot/conf.d/10-ssl.conf || true
-  cp_check_and_sed '#ssl_key = </etc/dovecot/private/dovecot.pem' \
-                  's|#ssl_key = </etc/dovecot/private/dovecot.pem|ssl_key = </etc/dovecot/private/dovecot.pem|g' \
-                  /etc/dovecot/conf.d/10-ssl.conf || true
-  # negdje se pojavljuje dovecot.key umjesto dovecot.pem
-  cp_check_and_sed 'ssl_key = </etc/dovecot/private/dovecot.key' \
-                  's|ssl_key = </etc/dovecot/private/dovecot.key|ssl_key = </etc/dovecot/private/dovecot.pem|g' \
-                  /etc/dovecot/conf.d/10-ssl.conf || true
+dovecert="$(doveconf ssl_cert)"
+dovekey="$(doveconf ssl_key)"
+
+if [ -n "$dovecert" -a -n "$dovekey" ]; then
+        echo -n "CN: Opcije ssl_cert i ssl_key su pronađene"
+
+        cfile=$(grep -l ^ssl_cert /etc/dovecot/conf.d/*.conf | tail -1)
+        kfile=$(grep -l ^ssl_key /etc/dovecot/conf.d/*.conf | tail -1)
+
+        if grep -q ^ssl_cert $cfile && grep -q ^ssl_key $kfile; then
+                if [ "$cfile" != "/etc/dovecot/conf.d/10-ssl.conf" -o "$kfile" != "/etc/dovecot/conf.d/10-ssl.conf" ]; then
+                        echo " izvan 10-ssl.conf (u $cfile), preskačem rekonfiguraciju..."
+                else
+                        echo " u /etc/dovecot/conf.d/10-ssl.conf. Postavljam default vrijednosti iz Debiana 10..."
+                        put_new_certs
+                        move_certs
+                fi
+        fi
+else
+        echo "CN: ssl_cert i ssl_key nisu definirani, postavljam default vrijednosti iz Debiana 10!"
+        # ako postoji,  pomaknut ćemo stari certifikat na novo mjesto i preimenovati kljuc
+        # ako ne postoje certifikati generiraj ih i postavi na prava mjesta
+
+        move_certs
+
+        if [ ! -f /etc/dovecot/private/dovecot.pem -a ! -f /etc/dovecot/private/dovecot.key ]; then
+            echo "CN: Pravim certifikat i kljuc i postavljam ih u /etc/dovecot/private..."
+            /usr/share/dovecot-cn/mkcert.sh || true
+        fi  
+        put_new_certs
 fi
 
+
+
 ### buster ima ssl_min_protocol umjesto ssl_protocols
 # ne radimo ništa ako već postoji ^ssl_min_protocol = TLS*, možda je sistemac smanjivao level TLS-a
 
-if ! grep -q "^ssl_min_protocol = TLS"; then
+if ! grep -q "^ssl_min_protocol = TLS" /etc/dovecot/conf.d/10-ssl.conf; then
        # postavlja minimalni TLS protokol i mijenja ime varijable
        cp_check_and_sed '#ssl_protocols =' \
                         's/^#ssl_protocols.*/ssl_min_protocol = TLSv1.2/g' \
@@ -96,12 +151,26 @@ if ! grep -q "^ssl_min_protocol = TLS"; then
                         /etc/dovecot/conf.d/10-ssl.conf || true
 fi
 
+### buster ima DH ključ koji se nalazi u paketu dovecot-core
+# ne radimo ništa ako već postoji ^ssl_dh koji nije prazan
+
+if ! grep -q "^ssl_dh = /" /etc/dovecot/conf.d/10-ssl.conf; then
+       # postavlja DH i uključuje varijablu
+       cp_check_and_sed '#ssl_dh =' \
+                        's,^#ssl_dh.*,ssl_dh = </usr/share/dovecot/dh.pem,g' \
+                        /etc/dovecot/conf.d/10-ssl.conf || true
+fi
+
 # maknuti kludge kreiran u carnet-upgrade
-echo "CN: Prebacujem stare konfiguracije za dovecot 95-cn#-upgrade.conf u /var/backups..."
 test -f /etc/dovecot/conf.d/95-cn6-upgrade.conf && mv /etc/dovecot/conf.d/95-cn6-upgrade.conf /var/backups || true
 test -f /etc/dovecot/conf.d/95-cn7-upgrade.conf && mv /etc/dovecot/conf.d/95-cn7-upgrade.conf /var/backups || true
 test -f /etc/dovecot/conf.d/95-cn8-upgrade.conf && mv /etc/dovecot/conf.d/95-cn8-upgrade.conf /var/backups || true
 test -f /etc/dovecot/conf.d/95-cn9-upgrade.conf && mv /etc/dovecot/conf.d/95-cn9-upgrade.conf /var/backups || true
+# nije više potrebno editirati dovecot.conf koji je samo hrpa includea
+test -f /etc/dovecot/dovecot.conf.cn6-upgrade && mv /etc/dovecot/dovecot.conf.cn6-upgrade /var/backups || true
+test -f /etc/dovecot/dovecot.conf.cn7-upgrade && mv /etc/dovecot/dovecot.conf.cn7-upgrade /var/backups || true
+test -f /etc/dovecot/dovecot.conf.cn8-upgrade && mv /etc/dovecot/dovecot.conf.cn8-upgrade /var/backups || true
+test -f /etc/dovecot/dovecot.conf.cn9-upgrade && mv /etc/dovecot/dovecot.conf.cn9-upgrade /var/backups || true
 
 # staro, može se brisati
 # dodao ico, gasi SSLv3 protokol