#!/bin/sh # postfix is a Mail Transport agent # Eisfair-2 version PATH=/bin:/usr/bin:/sbin:/usr/sbin TZ= unset TZ check_program_pid_file='/usr/local/postfix/master' MILTERS="" . /lib/lsb/init-functions ### ------------------------------------------------------------------------- ### start/stop message color output ### ------------------------------------------------------------------------- COLOR_RED='\033[1;31m' COLOR_NRM='\033[0;39m' log_end_msg_new () { echo -en "\\033[300C\\033[8D" if [ "$1" -eq 0 ] then echo " [ OK ]" else echo -e " [${COLOR_RED}fail${COLOR_NRM}]" fi } ### ------------------------------------------------------------------------- ### check if program running ### ------------------------------------------------------------------------- get_program_pid() { if [ -n "`ps -ef | grep -v grep | grep "$check_program_pid_file" 2>/dev/null`" ] then echo "." fi } ### ------------------------------------------------------------------------- ### update chroot ### ------------------------------------------------------------------------- copy() { file=`basename ${1}` cp -dpf ${1} ${2}/${file} } update_chroot() { # setup the empty chroot directory structure rm -f /var/spool/postfix/etc/* rm -f /var/spool/postfix/lib/* chmod 0777 /var/spool/postfix/var/run chmod 0777 /var/spool/postfix/var/run/milter for i in /etc/localtime /usr/lib/zoneinfo/localtime \ /usr/share/zoneinfo/localtime \ /etc/host.conf /etc/resolv.conf /etc/nsswitch.conf \ /etc/hosts /etc/services do [ -e ${i} ] && copy ${i} `dirname /var/spool/postfix${i}` done # determine glibc version LIBCVER=`ls -l /lib/libc.so.6* | sed "s/.*libc-\(.*\).so$/\1/g"` # copy the relevant parts of glibc into the chroot for i in compat dns files hesoid ldap nis nisplus winbind wins do [ -e /lib/libnss_${i}-${LIBCVER}.so ] && copy /lib/libnss_${i}-${LIBCVER}.so /var/spool/postfix/lib/ [ -e /lib/libnss_${i}.so ] && copy /lib/libnss_${i}.so /var/spool/postfix/lib/ [ -e /lib/libnss_${i}.so.2 ] && copy /lib/libnss_${i}.so.2 /var/spool/postfix/lib/ done [ -e /lib/libnss_db.so.2.0.0 ] && copy /lib/libnss_db.so.2.0.0 /var/spool/postfix/lib/ [ -e /lib/libresolv-${LIBCVER}.so ] && copy /lib/libresolv-${LIBCVER}.so /var/spool/postfix/lib/ [ -e /lib/libresolv-${LIBCVER}.so.2 ] && copy /lib/libresolv-${LIBCVER}.so.2 /var/spool/postfix/lib/ ldconfig -n /var/spool/postfix/lib # not convinced this is necessary if [ -e /var/run/mysql ] then if [ -z "`mount | grep '/var/spool/postfix/var/run/mysql'`" ] then mount --rbind /var/run/mysql /var/spool/postfix/var/run/mysql fi fi if [ -z "`mount | grep '/var/spool/postfix/var/run/milter'`" ] then mount --rbind /var/run/milter /var/spool/postfix/var/run/milter fi # connect milter if avaiable if [ -e /var/run/milter/milter-greylist.sock ] then MILTERS="unix:/var/run/milter/milter-greylist.sock, " fi MILTERS="${MILTERS} unix:/var/run/milter/smc-milter.sock" postconf -e "smtpd_milters = $MILTERS" } ### ------------------------------------------------------------------------- ### main ### ------------------------------------------------------------------------- case "$1" in start) if [ -e /etc/postfix/dracd.internal ] then [ -e /var/run/dracd.pid ] || /usr/local/postfix/dracd -i -e 30 /etc/postfix/dracd.db fi if [ -z "$(get_program_pid)" ] then log_daemon_msg "Starting Mail Transport Agent" "postfix" update_chroot /usr/sbin/postfix start 2>/dev/null for count in 1 2 3 4 do if [ -n "$(get_program_pid)" ] then break fi echo -n "." sleep 1 done if [ ${count} -eq 4 ] then log_end_msg 1 else log_end_msg 0 fi fi ;; stop) if [ -n "$(get_program_pid)" ] then log_daemon_msg "Stopping Mail Transport Agent" "postfix" /usr/sbin/postfix stop 2>/dev/null for count in 1 2 3 4 do if [ -z "$(get_program_pid)" ] then break fi echo -n "." sleep 1 done killall -wq master log_end_msg 0 fi [ -e /var/run/dracd.pid ] && killall dracd >/dev/null 2>&1 ;; restart) $0 stop $0 start ;; force-reload|reload) log_daemon_msg "Reloading Postfix configuration" if /usr/sbin/postfix reload >/dev/null 2>&1 then log_end_msg 0 else log_end_msg 1 fi ;; status) echo -n " * Postfix mail " if [ -z "$(get_program_pid)" ] then log_end_msg_new 1 else log_end_msg_new 0 fi ;; flush|check|abort) /usr/sbin/postfix $1 ;; *) log_action_msg "Usage: /etc/init.d/postfix {start|stop|status|restart|reload|flush|check|abort|force-reload}" exit 1 ;; esac exit 0