Package: postfix
Severity: wishlist

This would make the systemd conversion (as well as any other init system or process supervisor) a lot easier. I have attached a file, configure-instance.sh, that can be shipped in /usr/lib/postfix, and an init script diff that takes advantage of the configure-instance script instead of its own internal function.

Thanks,
--
Cameron Norman
26,30d25
< # Defaults - don't touch, edit /etc/default/postfix
< SYNC_CHROOT="y"
< 
< test -f /etc/default/postfix && . /etc/default/postfix
< 
59,182d53
< configure_instance() {
<     INSTANCE="$1"
<     if [ "X$INSTANCE" = X ]; then
< 	    POSTCONF="postconf"
<     else
< 	    POSTCONF="postmulti -i $INSTANCE -x postconf"
<     fi
< 
< 
<     # if you set myorigin to 'ubuntu.com' or 'debian.org', it's wrong, and annoys the admins of
<     # those domains.  See also sender_canonical_maps.
< 
<     MYORIGIN=$($POSTCONF -h myorigin | tr 'A-Z' 'a-z')
<     if [ "X${MYORIGIN#/}" != "X${MYORIGIN}" ]; then
< 	MYORIGIN=$(tr 'A-Z' 'a-z' < $MYORIGIN)
<     fi
<     if [ "X$MYORIGIN" = Xubuntu.com ] || [ "X$MYORIGIN" = Xdebian.org ]; then
< 	log_failure_msg "Invalid \$myorigin ($MYORIGIN), refusing to start"
< 	log_end_msg 1
< 	exit 1
<     fi
< 
<     config_dir=$($POSTCONF -h config_directory)
<     # see if anything is running chrooted.
<     NEED_CHROOT=$(awk '/^[0-9a-z]/ && ($5 ~ "[-yY]") { print "y"; exit}' ${config_dir}/master.cf)
< 
<     if [ -n "$NEED_CHROOT" ] && [ -n "$SYNC_CHROOT" ]; then
< 	# Make sure that the chroot environment is set up correctly.
< 	oldumask=$(umask)
< 	umask 022
< 	queue_dir=$($POSTCONF -h queue_directory)
< 	cd "$queue_dir"
< 
< 	# copy the CA path if specified
< 	ca_path=$($POSTCONF -h smtp_tls_CApath)
< 	case "$ca_path" in
< 	    '') :;; # no ca_path
< 	    $queue_dir/*) :;;  # skip stuff already in chroot, (and to make vim syntax happy: */)
< 	    *)
< 		if test -d "$ca_path"; then
< 		    dest_dir="$queue_dir/${ca_path#/}"
< 		    # strip any/all trailing /
< 		    while [ "${dest_dir%/}" != "${dest_dir}" ]; do
< 			dest_dir="${dest_dir%/}"
< 		    done
< 		    new=0
< 		    if test -d "$dest_dir"; then
< 			# write to a new directory ...
< 			dest_dir="${dest_dir}.NEW"
< 			new=1
< 		    fi
< 		    mkdir --parent ${dest_dir}
< 		    # handle files in subdirectories
< 		    (cd "$ca_path" && find . -name '*.pem' -print0 | cpio -0pdL --quiet "$dest_dir") 2>/dev/null || 
< 		        (log_failure_msg failure copying certificates; exit 1)
< 		    c_rehash "$dest_dir" >/dev/null 2>&1
< 		    if [ "$new" = 1 ]; then
< 			# and replace the old directory
< 			rm -rf "${dest_dir%.NEW}"
< 			mv "$dest_dir" "${dest_dir%.NEW}"
< 		    fi
< 		fi
< 		;;
< 	esac
< 
< 	# if there is a CA file, copy it
< 	ca_file=$($POSTCONF -h smtp_tls_CAfile)
< 	case "$ca_file" in
< 	    $queue_dir/*) :;;  # skip stuff already in chroot
< 	    '') # no ca_file
< 		# or copy the bundle to preserve functionality
< 		ca_bundle=/etc/ssl/certs/ca-certificates.crt
< 		if [ -f $ca_bundle ]; then
< 		    mkdir --parent "$queue_dir/${ca_bundle%/*}"
< 		    cp -L "$ca_bundle" "$queue_dir/${ca_bundle%/*}"
< 		fi
< 		;;
< 	    *)
< 		if test -f "$ca_file"; then
< 		    dest_dir="$queue_dir/${ca_path#/}"
< 		    mkdir --parent "$dest_dir"
< 		    cp -L "$ca_file" "$dest_dir"
< 		fi
< 		;;
< 	esac
< 
< 	# if we're using unix:passwd.byname, then we need to add etc/passwd.
< 	local_maps=$($POSTCONF -h local_recipient_maps)
< 	if [ "X$local_maps" != "X${local_maps#*unix:passwd.byname}" ]; then
< 	    if [ "X$local_maps" = "X${local_maps#*proxy:unix:passwd.byname}" ]; then
< 		sed 's/^\([^:]*\):[^:]*/\1:x/' /etc/passwd > etc/passwd
< 		chmod a+r etc/passwd
< 	    fi
< 	fi
< 
< 	FILES="etc/localtime etc/services etc/resolv.conf etc/hosts \
< 	    etc/host.conf etc/nsswitch.conf etc/nss_mdns.config"
< 	for file in $FILES; do
< 	    [ -d ${file%/*} ] || mkdir -p ${file%/*}
< 	    if [ -f /${file} ]; then rm -f ${file} && cp /${file} ${file}; fi
< 	    if [ -f  ${file} ]; then chmod a+rX ${file}; fi
< 	done
< 	# ldaps needs this. debian bug 572841
< 	(echo /dev/random; echo /dev/urandom) | cpio -pdL --quiet . 2>/dev/null || true
< 	rm -f usr/lib/zoneinfo/localtime
< 	mkdir -p usr/lib/zoneinfo
< 	ln -sf /etc/localtime usr/lib/zoneinfo/localtime
< 
< 	LIBLIST=$(for name in gcc_s nss resolv; do
< 	    for f in /lib/*/lib${name}*.so* /lib/lib${name}*.so*; do
< 	       if [ -f "$f" ]; then  echo ${f#/}; fi;
< 	    done;
< 	done)
< 
< 	if [ -n "$LIBLIST" ]; then
< 	    for f in $LIBLIST; do
< 		rm -f "$f"
< 	    done
< 	    tar cf - -C / $LIBLIST 2>/dev/null |tar xf -
< 	fi
< 	umask $oldumask
<     fi
< }
< 
191c62
< 		configure_instance $INSTANCE
---
> 		/usr/lib/postfix/configure-instance.sh $INSTANCE

Attachment: configure-instance.sh
Description: application/shellscript

Reply via email to