Dodan /usr/sbin/newaliases-gecos u conffiles
[postfix-cn.git] / debian / postinst
index eab468e..5c0d9c7 100755 (executable)
@@ -5,11 +5,31 @@ set -e
 [ "$1" = "configure" ] || exit 0
 [ "$DEBIAN_SCRIPT_DEBUG" ] && set -vx
 
-# Load CARNet Tools
+# Load CARNET Tools
 . /usr/share/carnet-tools/functions.sh
+
 # Load Debconf
 . /usr/share/debconf/confmodule
 
+check_for_utf() {
+
+utf=$(perl -lne 'print if /[^[:ascii:]]/' /etc/passwd)
+
+if [ ! -z "$utf" ]; then
+        poruka="Detektirani su znakovi šđčćž u datoteci /etc/passwd. To bi moglo omesti generiranje mail aliasa u obliku Ime.Prezime@ustanova.hr. 
+
+Molimo uklonite naše znakove s naredbom 
+
+usermod -c \"Ime Prezime\" korisnik
+
+Korisnici koji imaju znakove u imenu ili prezimenu su:
+
+"
+
+        LC_MESSAGES=hr_HR dialog --backtitle "Postfix: problem s datotekom /etc/passwd" --msgbox "$poruka$utf" 18 75
+fi
+}
+
 db_get postfix-cn/rbl || true
 rbl="$RET"
 
@@ -31,6 +51,25 @@ if echo $rbl | grep -q opm.blitzed.org; then
   db_set postfix-cn/rbl "$rbl" || true
 fi
 
+# Wed, 12 Jun 2013 15:15:28 +0200
+# dnsbl.njabl.org je ugasen 2013-03
+if echo $rbl | grep -q dnsbl.njabl.org; then
+  rbl="`echo $rbl | sed 's/dnsbl.njabl.org, //g'`"
+  # za svaki slucaj, ako je na kraju
+  rbl="`echo $rbl | sed 's/dnsbl.njabl.org//g'`"
+  db_set postfix-cn/rbl "$rbl" || true
+fi
+
+# zelja, 2021-04-29
+# ako je spamhaus.org ovdje, postavi eta.cert.hr, a sam
+# spamhaus je nepotreban, jer imamo zen.dnsbl-sh.carnet.hr
+if echo $rbl | grep -q zen.spamhaus.org; then
+  rbl="`echo $rbl | sed 's/zen.spamhaus.org, /eta.cert.hr, /g'`"
+  # za svaki slucaj, ako je na kraju
+  rbl="`echo $rbl | sed 's/zen.spamhaus.org/eta.cert.hr/g'`"
+  db_set postfix-cn/rbl "$rbl" || true
+fi
+
 db_get postfix-cn/matchgecos || true
 matchgecos="$RET"
 
@@ -49,18 +88,52 @@ netaddr="$RET"
 cp -pf /etc/postfix/master.cf /etc/postfix/master.cf.dpkg-tmp.$$
 cp -pf /etc/postfix/main.cf /etc/postfix/main.cf.dpkg-tmp.$$
 
-# srediti master.cf za TLS
+# srediti master.cf za TLS & submission & retry
 if [ -f /etc/postfix/master.cf ]; then
   cp_check_and_sed '^#tlsmgr' \
                    's/^#tlsmgr/tlsmgr/g' \
                    /etc/postfix/master.cf || true
 
+  cp_check_and_sed '^#submission' \
+                   's/^#submission/submission/g' \
+                   /etc/postfix/master.cf || true
+
+  cp_check_and_sed '^#retry' \
+                   's/^#retry/retry/g' \
+                   /etc/postfix/master.cf || true
+
   cp_check_and_sed '^#smtps' \
                    's/^#smtps/smtps/g' \
                    /etc/postfix/master.cf || true
+
+  cp_check_and_sed '^#  -o' \
+                   's/^#  -o/  -o/g' \
+                   /etc/postfix/master.cf || true
+
+  for option in  "-o milter_macro_daemon_name=ORIGINATING" \
+                 "-o smtpd_recipient_restrictions=" \
+                 "-o smtpd_reject_unlisted_recipient=no" \
+                 "-o smtpd_relay_restrictions=permit_sasl_authenticated,reject" \
+                 "-o smtpd_sasl_auth_enable=yes" \
+                 "-o smtpd_tls_security_level=encrypt" \
+                 "-o smtpd_tls_wrappermode=yes" \
+                 "-o syslog_name=postfix/smtps" \
+                 "-o syslog_name=postfix/submission"; do
+  cp_check_and_sed "^#   $option" \
+                   "s/#   $option/$option/g" \
+                   /etc/postfix/master.cf || true
+  done
+
+  for option in  "o smtpd_client_restrictions=" \
+                 "o smtpd_helo_restrictions=" \
+                 "o smtpd_sender_restrictions="; do
+  cp_check_and_sed "$option" \
+                   "s/.*$option/# -$option/g" \
+                   /etc/postfix/master.cf || true
+  done
 fi
 
-# ovo  manje/vise uzima kao default, ali u slucaju da je multihomed stroj,
+# ovo manje/vise uzima kao default, ali u slucaju da je multihomed stroj,
 # i eventualno je sprckan, mozda nesto nece raditi kako spada pa cemo konfigurirati
 postconf -e myhostname="$fqdn"
 postconf -e mydomain="$domain"
@@ -70,9 +143,10 @@ postconf -e myorigin="$mailname"
 postconf -e append_dot_mydomain="yes"
 postconf -e append_at_myorigin="yes"
 
-# dodaj 127.0.0.0/8 i netaddr
+# dodaj 127.0.0.0/8, netaddr i ipv6-localhost
+# dodaje izlazne servere za webmail --zelja
 mynetworks="`postconf -h mynetworks`"
-for i in "127.0.0.0/8" "$netaddr"; do
+for i in "127.0.0.0/8" "\[::1\]/128" "$netaddr" "193.198.233.95" "193.198.233.96"; do
   if ! echo $mynetworks | grep -q $i; then
    mynetworks="$mynetworks, $i"
   fi
@@ -81,14 +155,17 @@ postconf -e mynetworks="$mynetworks"
 
 # obrisati $mydomain, ako je upgrade sa starije verzije
 # te srediti mydestination
-if dpkg --compare-versions "$2" lt 2.3.8-1; then
+if dpkg --compare-versions "$2" lt 2.3.8-2; then
   mydestination="`postconf -h mydestination`"
   if echo $mydestination | grep -q ", \$mydomain"; then
     mydestination="`echo $mydestination | sed 's/, \$mydomain//g'`"
   fi
-  if echo $mydestination | grep -q "localhost.\$mydomain"; then
+  if ! echo $mydestination | grep -q "localhost.\$mydomain"; then
     mydestination="$mydestination, localhost.\$mydomain"
   fi
+  if ! echo $mydestination | grep -q "\$myhostname"; then
+    mydestination="\$myhostname, $mydestination"
+  fi
   postconf -e mydestination="$mydestination"
 fi
 
@@ -104,10 +181,10 @@ if [ "$mx_domain" != "$fqdn" ]; then
   postconf -e relay_domains="\$mydestination"
   if [ "$mx_domain" != "$domain" ]; then
     if dpkg --compare-versions "$2" lt 2.1.5-8; then
-      cp_echo "CN: This host is MX for more than one domain!  postfix-cn package will"
-      cp_echo "CN  only set up $mx_domain, you HAVE TO add the other domains manually"
-      cp_echo "CN  to mydestination variable in /etc/postfix/main.cf, if you haven't"
-      cp_echo "CN  done that already or you may lose mail."
+      cp_echo "CN: Ovaj poslužitelj je podešen kao MX za više od jedne domene! Paket postfix-cn će"
+      cp_echo "CN: podesiti samo domenu $mx_domain, ostale domene MORATE DODATI RUČNO"
+      cp_echo "CN: u varijablu 'mydestination' u /etc/postfix/main.cf. Ukoliko to ne"
+      cp_echo "CN: učinite, mogli biste (iz)gubiti mail za te domene."
     fi
   fi
 fi
@@ -159,7 +236,11 @@ smtpd_recipient_restrictions="reject_invalid_hostname, \
                               reject_unauth_pipelining, \
                              permit_sasl_authenticated, \
                              permit_mynetworks, \
-                             reject_unauth_destination"
+                             reject_unauth_destination, \
+                              check_client_access hash:/etc/postfix/cn-client-access, \
+                              check_helo_access hash:/etc/postfix/cn-helo-access, \
+                              check_sender_access hash:/etc/postfix/cn-sender-access, \
+                              check_recipient_access hash:/etc/postfix/cn-recipient-access"
 
 # dodaj samo rbl-ove iz debconfa
 if [ "$rbl" ]; then
@@ -168,10 +249,18 @@ if [ "$rbl" ]; then
   done
 fi
 
-# dodaj check_policy_service i permit na kraj
-smtpd_recipient_restrictions="$smtpd_recipient_restrictions, check_policy_service inet:127.0.0.1:60000, permit"
+# dodaj permit na kraj
+smtpd_recipient_restrictions="$smtpd_recipient_restrictions, permit"
 postconf -e smtpd_recipient_restrictions="$smtpd_recipient_restrictions"
 
+# Header & body checks
+
+postconf -e header_checks="pcre:/etc/postfix/cn-header-checks"
+postconf -e mime_header_checks="pcre:/etc/postfix/cn-mime-header-checks"
+postconf -e nested_header_checks="pcre:/etc/postfix/cn-nested-header-checks"
+postconf -e body_checks="pcre:/etc/postfix/cn-body-checks"
+
+
 # SASL stuff
 postconf -e smtpd_sasl_auth_enable="yes"
 postconf -e smtpd_sasl_security_options="noanonymous"
@@ -200,22 +289,17 @@ if [ -f /etc/default/saslauthd ]; then
     echo "START=yes" >> /etc/default/saslauthd
     restart_saslauthd="yes"
   fi
-  if ! grep -q "^PARAMS.*/var/spool/postfix/var/run/saslauthd" /etc/default/saslauthd; then
-    echo "PARAMS=\"-m /var/spool/postfix/var/run/saslauthd\"" >> /etc/default/saslauthd
-    restart_saslauthd="yes"
-  fi
-  if ! grep -q "^PIDFILE.*/var/spool/postfix/var/run/saslauthd/saslauthd.pid" /etc/default/saslauthd; then
-    echo "PIDFILE=\"/var/spool/postfix/var/run/saslauthd/saslauthd.pid\"" >> /etc/default/saslauthd
-    restart_saslauthd="yes"
-  fi
-  if ! grep -q "^PWDIR.*/var/spool/postfix/var/run/saslauthd" /etc/default/saslauthd; then
-    echo "PWDIR=\"/var/spool/postfix/var/run/saslauthd\"" >> /etc/default/saslauthd
+
+  if ! grep -q "^OPTIONS.*/var/spool/postfix/var/run/saslauthd" /etc/default/saslauthd; then
+    echo "OPTIONS=\"-c -m /var/spool/postfix/var/run/saslauthd\"" >> /etc/default/saslauthd
     restart_saslauthd="yes"
   fi
+
   if ! grep -q "&& ln -s" /etc/default/saslauthd; then
     echo "[ ! -L /var/run/saslauthd -a -d /var/spool/postfix/var/run/saslauthd -a ! -d /var/run/saslauthd ] && ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd || true" >> /etc/default/saslauthd
     restart_saslauthd="yes"
   fi
+
   if [ ! -L /var/run/saslauthd ]; then
     mkdir -p /var/spool/postfix/var/run/
     if [ -d /var/run/saslauthd -a ! -d /var/spool/postfix/var/run/saslauthd ]; then
@@ -223,18 +307,18 @@ if [ -f /etc/default/saslauthd ]; then
     elif [ -d /var/run/saslauthd -a -d /var/spool/postfix/var/run/saslauthd ]; then
       rm -rf /var/run/saslauthd/
     fi
-
     # XXX jos kad bi ln -s u /var/run/ radio (bootclean.sh)
     if [ -d /var/spool/postfix/var/run/saslauthd -a ! -d /var/run/saslauthd ]; then
       ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd
     fi
-
     restart_saslauthd="yes"
   fi
+
   if [ ! -d /var/spool/postfix/var/run/saslauthd ]; then
     mkdir -p /var/spool/postfix/var/run/saslauthd
     restart_saslauthd="yes"
   fi
+
   if ! dpkg-statoverride --list /var/spool/postfix/var/run/saslauthd > /dev/null; then
     dpkg-statoverride --update --add root sasl 710 /var/spool/postfix/var/run/saslauthd
   fi
@@ -242,57 +326,38 @@ fi
 
 # restart saslauthd
 if [ "$restart_saslauthd" = "yes" ]; then
-  if [ -x /usr/sbin/invoke-rc.d ]; then
-    [ -x /etc/init.d/saslauthd ] && invoke-rc.d saslauthd restart
-  else
-    [ -x /etc/init.d/saslauthd ] && /etc/init.d/saslauthd restart
-  fi
-fi
-
-# izgenerirati certifikate
-cert="postfix"   # basename of certificate
-description="Postfix SMTP daemon"      # descriptive text
-cd /etc/ssl/certs
-PATH=$PATH:/usr/bin/ssl
-if [ -f "$cert.pem" ]; then
-  echo "CN: You already have /etc/ssl/certs/$cert.pem"
-else
-  echo "CN: Creating generic self-signed certificate: /etc/ssl/certs/$cert.pem"
-  echo "CN: (replace with hand-crafted or authorized one if needed)."
-  HOSTNAME=`hostname -s`
-  FQDN=`hostname -f`
-        openssl req -new -x509 -days 365 -nodes -out "$cert.pem" -keyout "$cert.pem" > /dev/null 2>&1 <<+
-.
-.
-.
-$description
-$hostname
-$fqdn
-root@$mailname
-+
-  ln -sf "$cert.pem" `openssl x509 -noout -hash < "$cert.pem"`.0
-  chown root.root "/etc/ssl/certs/$cert.pem"
-  chmod 0640 "/etc/ssl/certs/$cert.pem"
+  service saslauthd restart
 fi
 
 # TLS stuff
-postconf -e smtp_use_tls="yes"
-postconf -e smtp_tls_key_file="\$smtp_tls_cert_file"
-postconf -e smtp_tls_session_cache_database="sdbm:/var/spool/postfix/smtp_scache"
+postconf -e smtp_tls_security_level="may"
+postconf -e smtp_tls_session_cache_database="btree:/var/lib/postfix/smtp_scache"
 postconf -e smtp_tls_session_cache_timeout="3600s"
-postconf -e smtpd_use_tls="yes"
-postconf -e smtpd_tls_key_file="\$smtpd_tls_cert_file"
-postconf -e smtpd_tls_session_cache_database="sdbm:/var/spool/postfix/smtpd_scache"
+postconf -e smtpd_tls_security_level="may"
+postconf -e smtpd_tls_session_cache_database="btree:/var/lib/postfix/smtpd_scache"
 postconf -e smtpd_tls_session_cache_timeout="3600s"
 postconf -e tls_random_source="dev:/dev/urandom"
-# ako je postavljen neki drugi certifikat, ne diraj
-smtp_tls_cert_file="`postconf -h smtp_tls_cert_file`"
-if [ -z "$smtp_tls_cert_file" ]; then
-  postconf -e smtp_tls_cert_file="/etc/ssl/certs/$cert.pem"
+postconf -e smtpd_tls_exclude_ciphers="aNULL"
+postconf -e smtpd_tls_mandatory_exclude_ciphers="aNULL"
+
+# nije potrebno generiranje certifikata jer postfix koristi paket ssl-cert
+# ako je postavljen snakeoil certifikat za smtpd_tls_* postavi isti za smtp_tls_*
+smtpd_tls_cert_file="`postconf -h smtpd_tls_cert_file`"
+if [ "$smtpd_tls_cert_file" = "/etc/ssl/certs/ssl-cert-snakeoil.pem" ]; then
+  postconf -e smtp_tls_cert_file="/etc/ssl/certs/ssl-cert-snakeoil.pem"
+  postconf -e smtp_tls_key_file="/etc/ssl/private/ssl-cert-snakeoil.key"
 fi
+
+# ako je prazan, postavi na defaultni iz paketa ssl-cert
 smtpd_tls_cert_file="`postconf -h smtpd_tls_cert_file`"
 if [ -z "$smtpd_tls_cert_file" ]; then
-  postconf -e smtpd_tls_cert_file="/etc/ssl/certs/$cert.pem"
+  postconf -e smtpd_tls_cert_file="/etc/ssl/certs/ssl-cert-snakeoil.pem"
+  postconf -e smtpd_tls_key_file="/etc/ssl/private/ssl-cert-snakeoil.key"
+fi
+smtp_tls_cert_file="`postconf -h smtp_tls_cert_file`"
+if [ -z "$smtp_tls_cert_file" ]; then
+  postconf -e smtp_tls_cert_file="/etc/ssl/certs/ssl-cert-snakeoil.pem"
+  postconf -e smtp_tls_key_file="/etc/ssl/private/ssl-cert-snakeoil.key"
 fi
 
 # prije bilo u /etc/postfix/, od verzije 2.1.5-2 je u /var/spool/postfix
@@ -300,6 +365,11 @@ fi
 [ -f /etc/postfix/smtp_scache.pag ] && rm -f /etc/postfix/smtp_scache.pag
 [ -f /etc/postfix/smtpd_scache.dir ] && rm -f /etc/postfix/smtpd_scache.dir
 [ -f /etc/postfix/smtpd_scache.pag ] && rm -f /etc/postfix/smtpd_scache.pag
+# prije bilo u /var/spool/postfix/, od verzije 2.5.5 je u /var/lib/postfix
+[ -f /var/spool/postfix/smtp_scache.dir ] && rm -f /var/spool/postfix/smtp_scache.dir
+[ -f /var/spool/postfix/smtp_scache.pag ] && rm -f /var/spool/postfix/smtp_scache.pag
+[ -f /var/spool/postfix/smtpd_scache.dir ] && rm -f /var/spool/postfix/smtpd_scache.dir
+[ -f /var/spool/postfix/smtpd_scache.pag ] && rm -f /var/spool/postfix/smtpd_scache.pag
 
 # debconf stop
 db_go || true
@@ -313,8 +383,8 @@ fi
 # provjeri da li postoji sendmail-base
 if ! dpkg -l sendmail-base | grep -q '^.n'; then
   cp_echo ""
-  cp_echo "CN: Package sendmail-base detected."
-  cp_echo "CN: Please, purge this package with command:"
+  cp_echo "CN: Pronađen je paket sendmail-base."
+  cp_echo "CN: Molimo, obrišite paket s naredbom:"
   cp_echo "CN: # dpkg --purge sendmail-base"
   cp_echo ""
 fi
@@ -322,8 +392,8 @@ fi
 # sendmailov /etc/mail/access
 if [ -f /etc/mail/access -a /etc/mail/access.db ]; then
   cp_echo ""
-  cp_echo "CN: Sendmail's access file (/etc/mail/access) detected."
-  cp_echo "CN: Please, upgrade your's /etc/postfix/access."
+  cp_echo "CN: Pronađena je sendmailova datoteka /etc/mail/access."
+  cp_echo "CN: Ukoliko je potrebno, nadogradite /etc/mail/access po uputama sa:"
   cp_echo "CN: http://www.postfix.org/SMTPD_ACCESS_README.html"
   cp_echo ""
 fi
@@ -335,33 +405,64 @@ fi
 
 # ako ima razlika, backupiraj stari, ako ne, obrisi privremeni backup
 if ! cmp -s /etc/postfix/master.cf /etc/postfix/master.cf.dpkg-tmp.$$; then
-  cp_echo "CN: Backing up old version of /etc/postfix/master.cf in /var/backups/..."
+  cp_echo "CN: Backupiram staru inačicu /etc/postfix/master.cf u /var/backups/..."
   cp_backup_conffile /etc/postfix/master.cf.dpkg-tmp.$$ master.cf
   restart_postfix="yes"
 fi
 rm -f /etc/postfix/master.cf.dpkg-tmp.$$
 
 if ! cmp -s /etc/postfix/main.cf /etc/postfix/main.cf.dpkg-tmp.$$; then
-  cp_echo "CN: Backing up old version of /etc/postfix/main.cf in /var/backups/..."
+  cp_echo "CN: Backupiram staru inačicu /etc/postfix/main.cf u /var/backups/..."
   cp_backup_conffile /etc/postfix/main.cf.dpkg-tmp.$$ main.cf
   restart_postfix="yes"
 fi
 rm -f /etc/postfix/main.cf.dpkg-tmp.$$
 
+#if ! grep -q "retry     unix  -       -       y       -       -       error" /etc/postfix/master.cf; then
+#  echo "CN: Please, add this line in /etc/postfix/master.cf and restart Postfix."
+#  echo "retry     unix  -       -       y       -       -       error"
+#  echo
+#fi
+
+# Provjera postoje li naša slova šđčćž u /etc/passwd
+check_for_utf
+
 # kreiraj aliases_gecos
-if [ -x /usr/share/postfix-cn/make-aliases-gecos.sh ]; then
+if [ -x /usr/sbin/newaliases-gecos ]; then
   if [ "$matchgecos" = "true" ]; then
-    echo "CN: Creating GECOS alias map..."
-    /usr/share/postfix-cn/make-aliases-gecos.sh
+    echo "CN: Pravim GECOS alias mapu..."
+    /usr/sbin/newaliases-gecos
   fi
 fi
 
+# rješava grešku "using backwards-compatible default setting chroot=y"
+
+for service in smtps/inet smtp/inet smtp/unix submission/inet pickup/fifo cleanup/unix qmgr/fifo rewrite/unix bounce/unix defer/unix trace/unix verify/unix flush/unix relay/unix showq/unix error/unix scache/unix discard/unix retry/unix
+do
+       postconf -F $service/chroot=y
+done   
+restart_postfix="yes"
+
+
+# obavijest za webmail
+
+cp-update -t postfix-cn /etc/postfix/main.cf <<EOF
+
+# Posluzitelji "193.198.233.95" "193.198.233.96" su odlazni posluzitelji za webmail.carnet.hr
+# Ukoliko koristite uslugu CARNET-ovog Webmaila, nemojte ih brisati iz "mynetworks"!
+
+EOF
+
+test -f /etc/postfix/cn-client-access && /usr/sbin/postmap /etc/postfix/cn-client-access
+test -f /etc/postfix/cn-recipient-access && /usr/sbin/postmap /etc/postfix/cn-recipient-access
+test -f /etc/postfix/cn-sender-access && /usr/sbin/postmap /etc/postfix/cn-sender-access
+test -f /etc/postfix/cn-helo-access && /usr/sbin/postmap /etc/postfix/cn-helo-access
+
+
 # restart 
 if [ "$restart_postfix" = "yes" ]; then
-  if [ -x /usr/sbin/invoke-rc.d ]; then
-    [ -x /etc/init.d/postfix ] && invoke-rc.d postfix restart
-  else
-    [ -x /etc/init.d/postfix ] && /etc/init.d/postfix restart
-  fi
+  service postfix restart
 fi
 cp_mail postfix-cn
+
+#DEBHELPER#