#!/bin/sh
# From original Solaris 8 version by Matthew X. Economou
# Solaris 10 version updated by JD Bronson. Caution: this copies
# too many files. There is no need to copy libc.so and other files
# that are already linked in before a Postfix daemon chroots itself.

COMMAND_DIRECTORY="/usr/sbin"
DAEMON_DIRECTORY="/usr/libexec/postfix"
QUEUE_DIRECTORY="/var/spool/postfix"

## Copy any shared libraries, device entries, or configuration files
## needed by Postfix into the jail.
binlist="
$DAEMON_DIRECTORY/virtual
$DAEMON_DIRECTORY/trivial-rewrite
$DAEMON_DIRECTORY/spawn
$DAEMON_DIRECTORY/smtpd
$DAEMON_DIRECTORY/smtp
$DAEMON_DIRECTORY/showq
$DAEMON_DIRECTORY/qmqpd
$DAEMON_DIRECTORY/qmgr
$DAEMON_DIRECTORY/proxymap
$DAEMON_DIRECTORY/pipe
$DAEMON_DIRECTORY/pickup
$DAEMON_DIRECTORY/nqmgr
$DAEMON_DIRECTORY/master
$DAEMON_DIRECTORY/local
$DAEMON_DIRECTORY/lmtp
$DAEMON_DIRECTORY/flush
$DAEMON_DIRECTORY/error
$DAEMON_DIRECTORY/cleanup
$DAEMON_DIRECTORY/bounce
/usr/lib/sendmail
$COMMAND_DIRECTORY/postsuper
$COMMAND_DIRECTORY/postqueue
$COMMAND_DIRECTORY/postmap
$COMMAND_DIRECTORY/postlog
$COMMAND_DIRECTORY/postlock
$COMMAND_DIRECTORY/postkick
$COMMAND_DIRECTORY/postfix
$COMMAND_DIRECTORY/postdrop
$COMMAND_DIRECTORY/postconf
$COMMAND_DIRECTORY/postcat
$COMMAND_DIRECTORY/postalias
"
ldd $binlist | awk '/[=]>/ { print $3 }' | sort -u | while read i
do
    mkdir -p $QUEUE_DIRECTORY`dirname $i`
    ## Sun's version of tar sucks.  We'll have to remove the leading
    ## slashes from file names ourself, otherwise the copy doesn't
    ## work.
    (cd / && tar cphf - `echo $i | sed -e 's/^\///'`) | (cd $QUEUE_DIRECTORY && tar xpf -)
done

## More stuff for the jail, mostly discovered by inspection
## (e.g. strings, lsof).
more="
/dev/zero
/dev/null
/dev/udp6
/dev/tcp6
/dev/udp
/dev/tcp
/dev/poll
/dev/rawip
/dev/ticlts
/dev/ticotsord
/dev/ticots
/devices/pseudo/mm@0:zero
/devices/pseudo/mm@0:null
/devices/pseudo/udp6@0:udp6
/devices/pseudo/tcp6@0:tcp6
/devices/pseudo/udp@0:udp
/devices/pseudo/tcp@0:tcp
/devices/pseudo/poll@0:poll
/devices/pseudo/icmp@0:icmp
/devices/pseudo/tl@0:ticlts
/devices/pseudo/tl@0:ticotsord
/devices/pseudo/tl@0:ticots
/etc/hosts
/etc/nsswitch.conf
/etc/netconfig
/etc/passwd
/etc/resolv.conf
/etc/default/init
/etc/default/nss
/etc/inet/services
/etc/inet/hosts
/etc/services
/lib/ld.so
/lib/ld.so.1
/usr/lib/nss_dns.so.1
/usr/lib/sparcv9/straddr.so
/usr/lib/straddr.so
/usr/lib/straddr.so.2
/lib/libintl.so
/lib/libintl.so.1
/lib/libw.so
/lib/libw.so.1
/lib/nss_nis.so.1
/lib/nss_nisplus.so.1
/lib/nss_dns.so.1
/lib/nss_files.so.1
/usr/share/lib/zoneinfo
/var/ld/ld.config
"
for i in $more; do
    mkdir -p $QUEUE_DIRECTORY`dirname $i`
    (cd / && tar cpf - `echo $i | sed -e 's/^\///'`) | (cd $QUEUE_DIRECTORY && tar xpf -)
done

exit 0
