File ngircd-start-pre of Package ngircd
#!/bin/bash
#
# Set up chroot environment for ngircd
# when required by /etc/ngircd.conf
#
CONFIG='/etc/ngircd.conf'
MOTD='/etc/ngircd.motd'
CHROOTDIR='/var/lib/ngircd'
# Actual directory set by spec file
PIDDIR='__piddir__'
TAB=' '
WHICH='/usr/bin/which'
CPCMD=$($WHICH cp)
CP="$CPCMD -du --preserve=all"
MDCMD=$($WHICH mkdir)
MD="$MDCMD -p"
RMCMD=$($WHICH rm)
RM="$RMCMD -f"
LNCMD=$($WHICH ln)
LN="$LNCMD -sf"
CAT=$($WHICH cat)
CHOWN=$($WHICH chown)
CHMOD=$($WHICH chmod)
SED='/usr/bin/sed'
USER='ngircd'
GROUP='ngircd'
warn_user()
{
echo -e "*** WARNING ***"
echo -e $1
}
if test -r $CONFIG ; then
CHROOTED=$($CAT $CONFIG | $SED \
-e "/ChrootDir/!d; /^[$TAB ]*[;#]/d" \
-e "s|.*ChrootDir *= *$CHROOTDIR *|foobar|" \
-e 's/.*ChrootDir.*/false/; s/foobar/true/' | /usr/bin/tail -n 1)
if test -z "$CHROOTED" ; then
if ! test -d ${PIDDIR} ; then
$MD ${PIDDIR}
$CHOWN $USER.$GROUP ${PIDDIR}
fi
if test -L $PIDDIR/ngircd.pid ; then
$RM $PIDDIR/ngircd.pid
fi
exit 0
elif ! $CHROOTED ; then
warn_user "Chroot directory for ngircd must be $CHROOTDIR"
exit 1
fi
else
warn_user "File $CONFIG not found. This should not happen."
exit 1
fi
# Set up chroot environment
if $CHROOTED ; then
if test -r /lib64/libresolv.so.2 ; then
LIBDIR='lib64'
else
LIBDIR='lib'
fi
$MD $CHROOTDIR/$LIBDIR
$MD $CHROOTDIR/$LIBDIR/security
$MD $CHROOTDIR/usr/$LIBDIR
$CP /$LIBDIR/libresolv* $CHROOTDIR/$LIBDIR/
$CP /$LIBDIR/libnss_* $CHROOTDIR/$LIBDIR/
$CP /$LIBDIR/security/pam_permit.so $CHROOTDIR/$LIBDIR/security/
$CP /$LIBDIR/security/pam_warn.so $CHROOTDIR/$LIBDIR/security/
$CP /$LIBDIR/security/pam_deny.so $CHROOTDIR/$LIBDIR/security/
$LN ../../$LIBDIR/libresolv.so.2 $CHROOTDIR/usr/$LIBDIR/libresolv.so
LIBNSS=$(ls -1 /usr/$LIBDIR/libnss_*)
for LINK in $LIBNSS ; do
TRUNC=$(echo $LINK | sed -e 's|^/usr||')
TARGET=$(ls -1 $TRUNC.*)
$LN ../..$TARGET ${CHROOTDIR}$LINK
done
$MD $CHROOTDIR/etc/pam.d
$CP /etc/hosts $CHROOTDIR/etc/
$CP /etc/nsswitch.conf $CHROOTDIR/etc/
$CP /etc/resolv.conf $CHROOTDIR/etc/
$CP /etc/pam.d/ngircd $CHROOTDIR/etc/pam.d/
$CP /etc/pam.d/other $CHROOTDIR/etc/pam.d/
$CP $CONFIG $CHROOTDIR/etc/
$CHOWN root.$GROUP ${CHROOTDIR}${CONFIG}
if test -r $MOTD ; then
$CP $MOTD $CHROOTDIR/etc/
fi
$CAT /etc/passwd | /usr/bin/sed -e '/^ngircd/!d' \
> $CHROOTDIR/etc/passwd
$CAT /etc/group | /usr/bin/sed -e '/^ngircd/!d' \
> $CHROOTDIR/etc/group
if ! test -d ${CHROOTDIR}${PIDDIR} ; then
$MD ${CHROOTDIR}${PIDDIR}
$CHOWN $USER.$GROUP ${CHROOTDIR}${PIDDIR}
$CHMOD g-w ${CHROOTDIR}${PIDDIR}
fi
if ! test -d $PIDDIR ; then
$MD $PIDDIR
$CHOWN $USER.$GROUP $PIDDIR
fi
$RM $PIDDIR/ngircd.pid
$LN ${CHROOTDIR}${PIDDIR}/ngircd.pid $PIDDIR/ngircd.pid
fi