1#!/bin/sh 2# From original Solaris 8 version by Matthew X. Economou 3# Solaris 10 version updated by JD Bronson. Caution: this copies 4# too many files. There is no need to copy libc.so and other files 5# that are already linked in before a Postfix daemon chroots itself. 6 7COMMAND_DIRECTORY="/usr/sbin" 8DAEMON_DIRECTORY="/usr/libexec/postfix" 9QUEUE_DIRECTORY="/var/spool/postfix" 10 11## Copy any shared libraries, device entries, or configuration files 12## needed by Postfix into the jail. 13binlist=" 14$DAEMON_DIRECTORY/virtual 15$DAEMON_DIRECTORY/trivial-rewrite 16$DAEMON_DIRECTORY/spawn 17$DAEMON_DIRECTORY/smtpd 18$DAEMON_DIRECTORY/smtp 19$DAEMON_DIRECTORY/showq 20$DAEMON_DIRECTORY/qmqpd 21$DAEMON_DIRECTORY/qmgr 22$DAEMON_DIRECTORY/proxymap 23$DAEMON_DIRECTORY/pipe 24$DAEMON_DIRECTORY/pickup 25$DAEMON_DIRECTORY/nqmgr 26$DAEMON_DIRECTORY/master 27$DAEMON_DIRECTORY/local 28$DAEMON_DIRECTORY/lmtp 29$DAEMON_DIRECTORY/flush 30$DAEMON_DIRECTORY/error 31$DAEMON_DIRECTORY/cleanup 32$DAEMON_DIRECTORY/bounce 33/usr/lib/sendmail 34$COMMAND_DIRECTORY/postsuper 35$COMMAND_DIRECTORY/postqueue 36$COMMAND_DIRECTORY/postmap 37$COMMAND_DIRECTORY/postlog 38$COMMAND_DIRECTORY/postlock 39$COMMAND_DIRECTORY/postkick 40$COMMAND_DIRECTORY/postfix 41$COMMAND_DIRECTORY/postdrop 42$COMMAND_DIRECTORY/postconf 43$COMMAND_DIRECTORY/postcat 44$COMMAND_DIRECTORY/postalias 45" 46ldd $binlist | awk '/[=]>/ { print $3 }' | sort -u | while read i 47do 48 mkdir -p $QUEUE_DIRECTORY`dirname $i` 49 ## Sun's version of tar sucks. We'll have to remove the leading 50 ## slashes from file names ourself, otherwise the copy doesn't 51 ## work. 52 (cd / && tar cphf - `echo $i | sed -e 's/^\///'`) | (cd $QUEUE_DIRECTORY && tar xpf -) 53done 54 55## More stuff for the jail, mostly discovered by inspection 56## (e.g. strings, lsof). 57more=" 58/dev/zero 59/dev/null 60/dev/udp6 61/dev/tcp6 62/dev/udp 63/dev/tcp 64/dev/poll 65/dev/rawip 66/dev/ticlts 67/dev/ticotsord 68/dev/ticots 69/devices/pseudo/mm@0:zero 70/devices/pseudo/mm@0:null 71/devices/pseudo/udp6@0:udp6 72/devices/pseudo/tcp6@0:tcp6 73/devices/pseudo/udp@0:udp 74/devices/pseudo/tcp@0:tcp 75/devices/pseudo/poll@0:poll 76/devices/pseudo/icmp@0:icmp 77/devices/pseudo/tl@0:ticlts 78/devices/pseudo/tl@0:ticotsord 79/devices/pseudo/tl@0:ticots 80/etc/hosts 81/etc/nsswitch.conf 82/etc/netconfig 83/etc/passwd 84/etc/resolv.conf 85/etc/default/init 86/etc/default/nss 87/etc/inet/services 88/etc/inet/hosts 89/etc/services 90/lib/ld.so 91/lib/ld.so.1 92/usr/lib/nss_dns.so.1 93/usr/lib/sparcv9/straddr.so 94/usr/lib/straddr.so 95/usr/lib/straddr.so.2 96/lib/libintl.so 97/lib/libintl.so.1 98/lib/libw.so 99/lib/libw.so.1 100/lib/nss_nis.so.1 101/lib/nss_nisplus.so.1 102/lib/nss_dns.so.1 103/lib/nss_files.so.1 104/usr/share/lib/zoneinfo 105/var/ld/ld.config 106" 107for i in $more; do 108 mkdir -p $QUEUE_DIRECTORY`dirname $i` 109 (cd / && tar cpf - `echo $i | sed -e 's/^\///'`) | (cd $QUEUE_DIRECTORY && tar xpf -) 110done 111 112exit 0 113