Article Listing 1 Listing 2 Listing 3 Sidebar jan2004.tar

Listing 1 changeident

#!/bin/ksh
# Listing 1: changeident
# This is the driver script for the changeident application

. ../lib/globals

if [ "$EFFECTIVE_USER" != root ]
then
   echo "You must be root to run $0"
   exit 1
fi

function run_program
{
   typeset program=$1
   echo ""
   echo "====================================================="
   if [ -x $CHANGEIDENT_LIB_DIR/$program ]
   then
      if [ -n "$nodename" ]
      then
         $CHANGEIDENT_LIB_DIR/$1 -n $nodename
      else
         $CHANGEIDENT_LIB_DIR/$1
      fi
   else
      echo "Program '$program' could not be executed!"
   fi
}

reboot_automatically=$FALSE
program_list=""

while getopts :m:n:p:r option
do
   case "$option"
   in
   m)
      modules_file=$CHANGEIDENT_ETC_DIR/modules/$OPTARG
      ;;
   n)
      nodename=$OPTARG
      ;;
   p)
      program_list=$OPTARG
      ;;
   r)
      reboot_automatically=$TRUE
      ;;
   ?)
      echo "Usage: $(basename $0) [-m modules_file] [-n nodename] \
        [-p \"program ...\"] [-r]"
      exit 1
      ;;
   esac
done

touch $REBOOT
chown root:root $REBOOT
chmod 0644 $REBOOT
echo $FALSE > $REBOOT

touch $LOG_FILE
chown root:root $LOG_FILE
chmod 0644 $LOG_FILE

touch $CHANGELIST
chown root:root $CHANGELIST
chmod 0644 $CHANGELIST
> $CHANGELIST

echo "------------------------------------"
echo "Changeident - Change System Identity"
echo "------------------------------------"
echo ""
echo "The following programs will be executed:"
echo ""

modules=""

[ -n "$modules_file" ] && modules="$modules $(cat -s $modules_file)"
[ -n "$program_list" ] && modules="$modules $program_list"
[ -z "$modules" ] && modules=$(cat -s $DEFAULT_MODULES_FILE)

i=0
for program in $modules
do
   if [ -x $CHANGEIDENT_LIB_DIR/$program ]
   then
      i=$(($i+1))
      [ $i -lt 10 ] && echo " \c"
      echo "$i. \c"
      echo $program
   fi
done

if [ -z "$nodename" ]
then
   default=y
   prompt="Continue (y/n)? [$default]:"
   answer=$(ckyorn -Q -p "$prompt" -d "$default")
else
   answer=y
fi

case $answer
in
y* | Y*)
   echo "\nchangeident was run on $(date)" >> $LOG_FILE
   echo "---------------------------------------------------" >> $LOG_FILE
   for program in $modules
   do
      if [ -x $CHANGEIDENT_LIB_DIR/$program ]
      then
         run_program $program
      fi
   done
   ;;
*)
   exit 1
   ;;
esac

echo ""
echo "====================================================="
echo "Finished ..."

if [ $(wc -l < $CHANGELIST) -gt 0 ]
then
   echo ""
   echo "The following files were changed:"
   echo ""
   sort -u $CHANGELIST
fi

echo ""

if [ "$(cat -s $REBOOT)" -eq $TRUE ]
then
   echo "The system must be rebooted!"
   if [ $reboot_automatically -eq $TRUE ]
   then
      reboot
   else
      default=n
      prompt="Reboot the system now (y/n)? [$default]:"
      answer=$(ckyorn -Q -p "$prompt" -d "$default")

      case "$answer"
      in
      y*|Y*)
         reboot
         ;;
      *)
         echo ""
         echo "The system was not rebooted."
         echo ""
         ;;
      esac
   fi
fi

exit 0