#!/bin/bash # # Gnats installation script -- written by Brian White # (This was my very first attempt at learning perl... please forgive me!) # # Forgiving -- rewritten to bash :-) by Milan Zamazal . # ...and streamlined with SED by Chad Walstrom set -e ############################################################################### # # Utility functions # # Call arguments and never return error function protect () { "$@" || true; } ############################################################################### # # Common initialization for install scripts # . /usr/share/debconf/confmodule protect db_get gnats/site SITE=${RET:-@DEFSITE@} GNATSSITE="@GNATSDBDIR@/$SITE" GNATSDBDIR="@GNATSDBDIR@" PASSWDFILE="@PASSWDFILE@" ############################################################################### # # Check the 'gnats' userid in the password file # if [ "$1" = configure ]; then if [ $(protect grep -c "^@GNATSGROUP@:" @GROUPFILE@) -eq 0 ]; then adduser --group --gid @GNATSGID@ @GNATSGROUP@ fi PWFOUND=$(protect grep -c "^@GNATSUSER@:" @PASSWDFILE@) if [ $PWFOUND -gt 1 ]; then db_subst gnats/user_multiple PASSWDFILE "@PASSWDFILE@" db_input high gnats/user_multiple || true db_go fi if [ $PWFOUND -gt 0 ]; then if [ $(protect grep -c "^@GNATSUSER@:.*:@GNATSOLDHOME@:" @PASSWDFILE@) -gt 0 ] then if [ -e @GNATSOLDHOME@/.profile ]; then mv @GNATSOLDHOME@/.profile @GNATSHOME@/ fi usermod -d @GNATSHOME@ @GNATSUSER@ fi if [ $(protect grep -c "^@GNATSUSER@:[^:]*:@GNATSID@:@GNATSGID@:" \ @PASSWDFILE@) \ -eq 0 ] then usermod -u @GNATSID@ -G @GNATSGID@ @GNATSUSER@ fi else adduser --quiet --system --home @GNATSHOME@ --no-create-home \ --gid @GNATSGID@ --shell /bin/sh --disabled-login \ --gecos 'GNU GNATS Bug-Reporting System' @GNATSUSER@ fi fi ############################################################################### # # Add the 'gnats' system into the mail aliases # if [ "$1" = configure ]; then # # Special mailers # EXIM=$(dpkg -l exim | protect grep -c '^.i') for F in /etc/exim/exim.conf /etc/exim.conf; do if [ -f $F ]; then EXIMCONF=$F break fi done if [ $EXIM -gt 0 ] && [ -n "$EXIMCONF" ]; then if [ $(grep -c '^[ \t]*user[ \t]*=' $EXIMCONF) -eq 0 ]; then LINES="$(grep '^[ \t]*#[ \t]*user[ \t]*=' $EXIMCONF)" if [ -n "$LINES" ]; then db_subst gnats/exim_user_uncomment LINES "$LINES" db_subst gnats/exim_user_uncomment EXIMCONF "$EXIMCONF" db_input high gnats/exim_user_uncomment || true db_go else db_subst gnats/exim_user_uncomment EXIMCONF "$EXIMCONF" db_input high gnats/exim_user_add || true db_go fi fi fi QMAIL=$(dpkg -l qmail | protect grep -c '^.i') if [ $QMAIL -gt 0 ]; then # Generate dot files # echo "qmail found, installing qmail dot files..." for I in "qmail root" \ "qmail-bugs | @GNATSDIR@/queue-pr -q" \ "qmail-query | @GNATSDIR@/mail-query"; do KEY=${I%% *} FILE="@GNATSHOME@/.$KEY" if [ ! -f $FILE ]; then TEMPFILE=$(tempfile) echo "${I#$KEY }" >$TEMPFILE chmod 0644 $TEMPFILE chown @GNATSUSER@.@GNATSGROUP@ $TEMPFILE mv $TEMPFILE $FILE fi done # echo "Done." # Generate aliases ASSIGN='/var/qmail/users/assign' if [ ! -f $ASSIGN ] || \ [ $(protect grep -c '^.gnats-admin' $ASSIGN) -eq 0 ]; then db_subst gnats/qmail SITE "${SITE}" db_input high gnats/qmail || true db_go fi elif [ ! -f @MAILFILE@ ]; then db_subst gnats/unknown_mailer SITE "${SITE}" db_input high gnats/unknown_mailer || true db_go else # # Common mailers # if [ $(protect \ egrep -c "^[ \t]*(gnats-admin|bugs|query-pr|$SITE-gnats)\>" \ @MAILFILE@) -lt 4 ]; then TEMPFILE=$(tempfile) sed "s/^#\([ \t]*\(gnats-admin\|bugs\|query-pr\|$SITE-gnats\)\>.*$\)/\1/" \ @MAILFILE@ >$TEMPFILE if [ $(protect \ egrep -c "^[ \t]*(gnats-admin|bugs|query-pr|$SITE-gnats)\>" \ $TEMPFILE) -lt 4 ]; then egrep -v "^[ \t]*(gnats-admin|bugs|query-pr|$SITE-gnats)\>" \ @MAILFILE@ >$TEMPFILE cat - >>$TEMPFILE <