diff options
Diffstat (limited to 'debian/local/update_db')
-rw-r--r-- | debian/local/update_db | 636 |
1 files changed, 0 insertions, 636 deletions
diff --git a/debian/local/update_db b/debian/local/update_db deleted file mode 100644 index 9bb1d8b..0000000 --- a/debian/local/update_db +++ /dev/null @@ -1,636 +0,0 @@ -#!/bin/sh -e -#----------------------------------------------------------------------------- -# -# $Sendmail: update_db,v 8.14.2 2007-11-02 22:20:56 cowboy Exp $ -# -# Update Sendmail databases for Debian -# -# Copyright (c) 1998-2007 Richard Nelson. All Rights Reserved. -# -# Notes (to all): -# * assumes makemap dbtype /etc/mail/database < /etc/mail/database -# -# Notes (to self): -# * changes made herein *must* be reflected in -# parse_mc,update_mk,update_db,debian.m4 -# * multiple db options not supported -# * userdb can also have multiple databases and then a forward! -# * need sendmail stop/start -# -#----------------------------------------------------------------------------- -set -e; - -# List of db files/features/etc -db_files="databases Makefile crontab QUEUE_GROUP sendmail.cf submit.cf \ - confCR_FILE confCT_FILE confCW_FILE confUSERDB_SPEC \ - access_db authinfo bitdomain domaintable \ - genericstable mailertable uucpdomain \ - use_cw_file use_ct_file virtusertable ALIAS_FILE"; - -# Path to other sendmail helpers -if [ -x ./update_sendmail ]; then - sm_path='.'; -elif [ -x $(dirname $0)/update_sendmail ]; then - sm_path=$(dirname $0); -else - sm_path=/usr/share/sendmail; - fi; -# Bring in sendmail.conf for the network definitions -if [ ! -f /etc/mail/sendmail.conf ]; then - if [ -x $sm_path/update_conf ]; then - $sm_path/update_conf; - fi; - fi; -if [ -f /etc/mail/sendmail.conf ]; then - . /etc/mail/sendmail.conf; - fi; -if [ "$HANDS_OFF" != 'No' ]; then - exit 0; - fi; - -# control amount of output -verbosity=0; - -# flag used to ensure only one newaliases command is run -newaliases_run=0; - -# flag used to indicate a dataset has been moved, may need another update -changed=0; - -# max return code -max_rc=0; -missing_rqd=0; -missing_opt=0; -missing_cre=0; -m4_errors=0; - -#------------------------------------------------------------- -# Initial update of sendmail.mc/databases -#------------------------------------------------------------- -initial () { - if [ $verbosity -gt 1 ]; then - echo "initial()"; - fi; - # Sigh... I wish this was in Perl... - $sm_path/parse_mc || true; - }; - -#------------------------------------------------------------- -# Handle found databases -#------------------------------------------------------------- -is_found () { - if [ $verbosity -gt 1 ]; then - echo "is_found: $dbfeat - $dbname"; - fi; - process=1; - - case "$dbfeat" in - ALIAS_FILE) - if [ -f /etc/mail/aliases ] & [ ! -f /etc/aliases ]; then - echo "Moving /etc/mail/aliases to /etc/aliases"; - mv /etc/mail/aliases /etc/aliases; - ln -sf ../aliases /etc/mail/aliases; - fi; - ;; - submit.cf) - if [ ! -f /usr/share/sendmail/cf/feature/msp.m4 ]; then - rm -f /etc/mail/submit.cf 2>/dev/null; - rm -f /etc/mail/submit.cf.errors 2>/dev/null; - process=0; - fi; - ;; - *) - ;; - esac; - }; - -#------------------------------------------------------------- -# Handle missing databases: -# moving /etc/xxx to /etc/mail/xxx -# rename /etc/mail/xxx to /etc/mail/yyy -#------------------------------------------------------------- -move_file () { - if [ -f $1 ]; then - if [ ! -L $1 ]; then - echo "Moving $1 to $dbname."; - mv $1 $dbname; - chown root:smmsp $dbname; - chmod 0644 $dbname; - if [ -f $1.db ]; then - mv -f /etc/$1.db $dbname.db; - fi; - if [ -f $1.pag ]; then - mv -f /etc/$1.pag $dbname.pag; - fi; - if [ -f $1.dir ]; then - mv -f /etc/$1.dir $dbname.dir; - fi; - changed=1; - process=1; - else - echo "$1 is a link, move it to $dbname"; - if [ "$dbopts" = "-o" ]; then - missing_opt=`expr $missing_opt + 1`; - else - missing_rqd=`expr $missing_rqd + 1`; - fi; - fi; - true; - else - false; - fi; - }; - -rename_file () { - if [ -f /etc/mail/$1 ]; then - echo "Renaming /etc/mail/$1 to $dbname."; - mv /etc/mail/$1 $dbname; - chown root:smmsp $dbname; - chmod 0644 $dbname; - changed=1; - process=1; - true; - else - false; - fi; - }; - -is_not_found () { - if [ $verbosity -gt 1 ]; then - echo "is_not_found: $dbfeat - $dbname"; - fi; - - case "$dbfeat" in - databases|Makefile) - :; - ;; - use_cw_file|confCW_FILE) - if move_file /etc/local-host-names; then - :; - elif rename_file sendmail.cw; then - :; - elif move_file /etc/sendmail.cw; then - :; - else - missing_cre=`expr $missing_cre + 1`; - echo "Warning: $dbfeat source" \ - "file not found: $dbname"; - echo " it was created"; - echo "localhost" > $dbname; - echo `hostname -f` >> $dbname; - chown root:smmsp $dbname; - chmod 0644 $dbname; - fi; - ;; - use_ct_file|confCT_FILE) - if move_file /etc/trusted-users; then - :; - elif rename_file sendmail.ct; then - :; - elif move_file /etc/sendmail.ct; then - :; - else - missing_cre=`expr $missing_cre + 1`; - echo "Warning: $dbfeat source" \ - "file not found: $dbname"; - echo " it was created"; - touch $dbname; - chown root:smmsp $dbname; - chmod 0644 $dbname; - fi; - ;; - HELP_FILE) - if move_file /etc/sendmail.hf; then - :; - elif rename_file sendmail.hf; then - :; - else - echo "Error: $dbfeat source file not found: $dbname"; - missing_rqd=`expr $missing_rqd + 1`; - process=0; - fi; - ;; - ALIAS_FILE) - if [ -e /etc/$dbsname ]; then - echo "Linking /etc/$dbsname to $dbname"; - ln -sf ../$dbsname $dbname; - if [ -f /etc/$dbsname.db ]; then - mv /etc/$dbsname.db /etc/mail; - fi; - if [ -f /etc/$dbsname.pag ]; then - mv /etc/$dbsname.pag /etc/mail; - fi; - if [ -f /etc/$dbsname.dir ]; then - mv /etc/$dbsname.dir /etc/mail; - fi; - elif [ "$dbopts" = "-o" ]; then - echo "Informational: $dbfeat source" \ - "file not found: $dbname"; - missing_opt=`expr $missing_opt + 1`; - process=0; - else - echo "Error: $dbfeat source file not found: $dbname"; - missing_rqd=`expr $missing_rqd + 1`; - process=0; - fi; - ;; - *.cf) - mcfile=$(echo "$dbsname" | sed -e 's/\..*//') - if move_file /etc/$dbsname; then - if [ -f /etc/${mcfile}.cf ]; then - mv -f /etc/${mcfile}.cf /etc/mail/; - fi; - elif [ "$mcfile" = "sendmail" ]; then - cp /usr/share/sendmail/cf/debian/sendmail.mc \ - $dbname; - chown root:smmsp $dbname; - chmod 0644 $dbname; - elif [ "$mcfile" = "submit" ]; then - cp /usr/share/sendmail/cf/debian/submit.mc \ - $dbname; - chown root:smmsp $dbname; - chmod 0644 $dbname; - elif [ "$dbopts" = "-o" ]; then - echo "Informational: $dbfeat source" \ - "file not found: $dbname"; - missing_opt=`expr $missing_opt + 1`; - process=0; - else - echo "Error: $dbfeat source file not found: $dbname"; - missing_rqd=`expr $missing_rqd + 1`; - process=0; - fi; - ;; - QUEUE_GROUP) - echo "Warning: $dbfeat source" \ - "file not found: $dbname"; - echo " it was created"; - mkdir -p $dbname; - chown root:smmsp $dbname; - chmod 02750 $dbname; - ;; - crontab) - if [ -x $sm_path/update_conf ]; then - $sm_path/update_conf; - fi; - ;; - access_db) - missing_cre=`expr $missing_cre + 1`; - echo "Warning: $dbfeat source" \ - "file not found: $dbname"; - echo " it was created"; - cp /usr/share/sendmail/examples/db/access \ - /etc/mail/; - chown root:root $dbname; - chmod 0644 $dbname; - ;; - *) - if move_file /etc/$dbsname; then - :; - elif [ "$dbopts" = "-o" ]; then - :; - else - missing_cre=`expr $missing_cre + 1`; - echo "Warning: $dbfeat source" \ - "file not found: $dbname"; - echo " it was created"; - touch $dbname; - chown root:smmsp $dbname; - chmod 0644 $dbname; - fi; - ;; - esac; - }; - -#------------------------------------------------------------- -# Handle empty databases -#------------------------------------------------------------- -is_empty () { - if [ $verbosity -gt 1 ]; then - echo "is_empty: $dbfeat - $dbname"; - fi; - if [ $process -eq 1 ]; then - if [ "$dbtype" != "-" ]; then - rm -f $dbname.db; - rm -f $dbname.pag; - rm -f $dbname.dir; - fi; - case "$dbfeat" in - databases|Makefile) - :; - ;; - access_db) - cp /usr/share/sendmail/examples/db/access \ - /etc/mail/; - chown root:root $dbname; - chmod 0644 $dbname; - ;; - *) - echo "Informational: $dbfeat file empty: $dbname"; - if [ "$dbopts" = "-o" ]; then - process=0; - fi; - ;; - esac; - fi; - }; - -#------------------------------------------------------------- -# Handle no data (exists, but is only comments) databases -#------------------------------------------------------------- -is_comments () { - if [ $verbosity -gt 1 ]; then - echo "is_comments: $dbfeat - $dbname"; - fi; - if [ $process -eq 1 ] && [ -s "$dbname" ]; then - if [ "$dbtype" != "-" ]; then - rm -f $dbname.db; - rm -f $dbname.pag; - rm -f $dbname.dir; - fi; - case "$dbfeat" in - databases|Makefile) - :; - ;; - *) - echo "Informational: $dbfeat no data: $dbname"; - if [ "$dbopts" = "-o" ]; then - process=0; - fi; - ;; - esac; - fi; - }; - -#------------------------------------------------------------- -# Handle normal databases (exists, has data) -#------------------------------------------------------------- -is_normal () { - if [ $verbosity -gt 1 ]; then - echo "is_normal: $dbfeat - $dbname"; - fi; - - # Make sure sensitive databases are *not* generally readable - if [ "$dbsname" = "authinfo" ] \ - || [ "$dbsname" = "access" ]; then - chmod go-rwx $dbname; - fi; - - if [ $process -eq 1 ] && [ $max_rc -eq 0 ]; then - case "$dbtype" in - '-'|text|ldap) - :; - ;; - parse_mc) - $sm_path/parse_mc || true; - ;; - update_conf) - $sm_path/update_conf || true; - ;; - update_mk) - $sm_path/update_mk || true; - ;; - btree) - echo "Updating $dbname..."; - /usr/sbin/makemap -d $dbtype $dbname.new.db < $dbname; - chown root:smmsp $dbname.new.db; - chmod 0644 $dbname.new.db; - mv -f $dbname.new.db $dbname.db; - ;; - dbm | btree | hash) - echo "Updating $dbname..."; - /usr/sbin/makemap $dbtype $dbname.new.db < $dbname; - if [ "$dbsname" = "authinfo" ] \ - || [ "$dbsname" = "access" ]; then - chown smmta:smmsp $dbname.new.db; - chmod 0640 $dbname.new.db; - else - chown root:smmsp $dbname.new.db; - chmod 0640 $dbname.new.db; - fi; - mv -f $dbname.new.db $dbname.db; - ;; - newaliases) - echo "Updating $dbname..."; - if [ $newaliases_run -eq 0 ]; then - newaliases_run=1; - /usr/lib/sm.bin/newaliases || true; - fi; - if [ -f $dbname.db ]; then - chown smmta:smmsp $dbname.db; - chmod 0640 $dbname.db; - fi; - ;; - m4) - mcfile=$(echo "$dbsname" | sed -e 's/\..*//'); - echo "Creating /etc/mail/${mcfile}.cf..."; - rm -f /etc/mail/${mcfile}.cf.errors; - m4 /etc/mail/${mcfile}.mc \ - > /etc/mail/${mcfile}.cf.new \ - 2> /etc/mail/${mcfile}.cf.errors || true; - echo "### /etc/mail/${mcfile}.mc ###" \ - >> /etc/mail/${mcfile}.cf.new; - sed -e 's/^/# /' /etc/mail/${mcfile}.mc \ - >> /etc/mail/${mcfile}.cf.new; - chown root:smmsp /etc/mail/${mcfile}.cf.new; - chmod 0644 /etc/mail/${mcfile}.cf.new; - if [ ! -s /etc/mail/${mcfile}.cf.errors ]; then - rm -f /etc/mail/${mcfile}.cf.errors; - else - chown root:smmsp /etc/mail/${mcfile}.cf.errors; - cat /etc/mail/${mcfile}.cf.errors; - echo " "; - m4_errors=1; - fi; - # Can't tell if the errors are fatal or not ;-{ - mv -f /etc/mail/${mcfile}.cf.new \ - /etc/mail/${mcfile}.cf; - ;; - *) - echo "$dbtype map not done herein"; - ;; - esac; - fi; - }; - -#------------------------------------------------------------- -# Handle completion -#------------------------------------------------------------- -final () { - if [ $verbosity -gt 1 ]; then - echo "final()"; - fi; - }; - - -# status report if not for single database -if [ -z "$1" ]; then - echo "Checking {sendmail,submit}.mc and related databases..."; -else - db_files="$1"; - fi; - -initial; - -for file in $db_files; do \ - line=$(grep -Ee "^[[:space:]]*$file" \ - /etc/mail/databases || true); - while ([ "$line" != "" ]); do - str=$(echo "$line" | cut -d " -" -f 1); - line=$(echo "$line" | cut -d " -" -f 2-); - - # Strip line back into four pieces: feature, type, opts, name - dbfeat=$(echo "$str" | cut -d ":" -f 1); - dbtype=$(echo "$str" | cut -d ":" -f 2); - dbopts=$(echo "$str" | cut -d ":" -f 3); - dbname=$(echo "$str" | cut -d ":" -f 4); - dbregx=$(echo "$str" | cut -d ":" -f 5); - if [ $(dirname "$dbname") = "/etc/mail" ]; then - dbsname=$(basename "$dbname"); - elif [ $(dirname "$dbname") = "/etc" ]; then - dbsname=$(basename "$dbname"); - else - dbsname="$dbname"; - fi; - if [ "$dbopts" = "-" ]; then - dbopts=""; - fi; - if [ "$dbregx" = "-" ]; then - dbregx=""; - fi; - - # Check to see if we're doing one, or all - if [ ! -z "$1" ]; then - if [ "$1" = "$dbfeat" ] \ - || [ "$1" = "$dbname" ] \ - || [ "$1" = "$dbsname" ]; then - :; - else - continue; - fi; - fi; - - # Check for special database types - case "$dbtype" in - ldap) - if [ $verbosity -gt 0 ]; then - echo "Skipping $dbname..."; - fi; - continue - ;; - dbm | btree | hash) - if [ ! -x /usr/lib/sm.bin/makemap ]; then - echo "Delaying $dbname..."; - continue; - fi; - ;; - newaliases) - if [ ! -x /usr/lib/sm.bin/newaliases ]; then - echo "Delaying $dbname..."; - continue; - fi; - ;; - *) - ;; - esac; - - # Kluge for aliases... - if [ "$dbname" = "ldap" ]; then - continue; - fi; - - process=1; - if [ $verbosity -gt 0 ]; then - echo "Processing $dbname..."; - fi; - - # Check for database existance - if [ -f "$dbname" ] || [ -d "$dbname" ]; then - is_found; - else - is_not_found; - fi; - - # Skip the rest for directories - if [ ! -d "$dbname" ]; then - - # Check for something in database - if [ ! -s "$dbname" ]; then - is_empty; - fi; - - # Check for real data (not just comments) - if [ $process -eq 1 ]; then - if ! grep -qEe "^[[:space:]]*[^$\#]" $dbname; then - is_comments; - fi; - fi; - - # Finally, assume a normal file... - is_normal; - fi; - - done; - done; - -final; - -# Final notices... -if [ $changed -ne 0 ]; then - echo " "; - echo "Informational: Some changes were made to file locations"; - echo " Make sure sendmail.cf is rebuilt"; - if [ $max_rc -lt 1 ]; then - max_rc=1; - fi; - fi; -if [ $missing_opt -ne 0 ]; then - echo " "; - echo "Informational: $missing_opt optional database(s) sources"; - echo " were not found, please investigate."; - fi; -if [ $missing_cre -ne 0 ]; then - echo " "; - echo "Warning: $missing_cre database(s) sources"; - echo " were not found, (but were created)"; - echo " please investigate."; - fi; -if [ $missing_rqd -ne 0 ]; then - echo " "; - echo "Error: $missing_rqd required database(s) sources"; - echo " were not found, correct this before starting sendmail!"; - if [ $max_rc -lt 2 ]; then - max_rc=2; - fi; - fi; -if [ $missing_opt -ne 0 ] || [ $missing_rqd -ne 0 ]; then - echo " "; - echo "$0 assumes that databases, and their source datasets"; - echo "have the same base name (not counting the .db). If this is not"; - echo "true, $0 can not rebuild your databases to make sure"; - echo "they will work with the newer sendmail. You will have to do this"; - echo "yourself - before starting sendmail."; - echo " "; - fi; -if [ $m4_errors -ne 0 ]; then - echo " "; - echo "Warning: These messages were issued while creating sendmail.cf"; - echo " make sure they are benign before starting sendmail!"; - echo " "; - if [ -f /etc/mail/sendmail.cf.errors ]; then - echo "Errors in generating sendmail.cf"; - cat /etc/mail/sendmail.cf.errors; - fi; - if [ -f /etc/mail/submit.cf.errors ]; then - echo "Errors in generating submit.cf"; - cat /etc/mail/submit.cf.errors; - fi; - echo " " - if [ $max_rc -lt 2 ]; then - max_rc=2; - fi; - fi; -exit $max_rc; - |