home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / sbin / ipchains-restore < prev    next >
Text File  |  1998-12-05  |  2KB  |  102 lines

  1. #! /bin/bash
  2.  
  3. MYVERSION="1.0.1"
  4.  
  5. help()
  6. {
  7.     exec 1>&2
  8.     echo `basename $0` v$MYVERSION: Script to restore firewall chains from stdin.
  9.     echo
  10.     echo "   With the -v option, prints out every rule."
  11.     echo "   With the -f option, clears chains without asking."
  12.  
  13.     exit 1
  14. }
  15.  
  16. IPCHAINS=/sbin/ipchains
  17. #IPCHAINS=echo
  18.  
  19. IP_CHAINNAMES_FILE=/proc/net/ip_fwnames
  20. #IP_CHAINNAMES_FILE=ip_fwnames.dummy
  21.  
  22. VERBOSE=0
  23. FORCE=0
  24.  
  25. bugreport()
  26. {
  27.     echo "$@"
  28.     echo This is $0 v$MYVERSION
  29.     echo If this is the latest version of ipchains-restore, and the input
  30.     echo was created using the latest version of ipchains-save, then I\'d
  31.     echo really appreciate a bug report.  Please send the input you used,
  32.     echo and all the output from this program to the author,
  33.     echo \`ipchains@wantree.com.au\' with \`BUG-REPORT\' in the subject
  34.     echo line so I know to read the message.
  35.     echo
  36.     echo Apologies for the inconvenience,
  37.     echo Paul \`\`Rusty\'\' Russell.
  38.     exit 1
  39. }
  40.  
  41. for arg
  42. do
  43.     case "$arg"
  44.     in
  45.     -v) VERBOSE=1 ;;
  46.     -f) FORCE=1 ;;
  47.     *) help ;;
  48.     esac
  49. done
  50.  
  51. SKIP=0
  52. while read LINE
  53. do
  54.     case "$LINE"
  55.     in
  56.     :*) CHAIN=`echo $LINE | cut -c2- | cut -d\  -f1`
  57.         SKIP=0
  58.         if [ $CHAIN = input -o $CHAIN = output -o $CHAIN = forward ]
  59.         then
  60.         [ $VERBOSE = 1 ] && echo Setting policy for \`$CHAIN\'.
  61.         POLICY=`echo $LINE | cut -c2- | cut -d\  -f2`
  62.         case "$POLICY" 
  63.         in
  64.         # Old-style (numeric) policies.
  65.             -1) $IPCHAINS -P $CHAIN REJECT ;;
  66.             1) $IPCHAINS -P $CHAIN DENY ;;
  67.             2) $IPCHAINS -P $CHAIN ACCEPT ;;
  68.             3) $IPCHAINS -P $CHAIN REDIRECT ;;
  69.             4) $IPCHAINS -P $CHAIN MASQ ;;
  70.             *) $IPCHAINS -P $CHAIN $POLICY ;;
  71.         esac
  72.         elif grep -q "^$CHAIN " $IP_CHAINNAMES_FILE
  73.         then
  74.         if [ $FORCE = 1 ]; then REPL='f'
  75.         else
  76.             echo -n Chain \`$CHAIN\' already exists.  "Skip or flush? [S/f]? "
  77.             read REPL < /dev/tty
  78.         fi
  79.         case $REPL
  80.         in
  81.             [fF]*) $IPCHAINS -F $CHAIN 
  82.             [ $FORCE = 1 ] || echo Flushing \`$CHAIN\'.
  83.             ;;
  84.             *) SKIP=1; [ $VERBOSE = 1 ] || echo Skipping \`$CHAIN\'. ;;
  85.         esac
  86.         else
  87.         echo Creating chain \`$CHAIN\'.
  88.         $IPCHAINS -N $CHAIN
  89.         fi
  90.         ;;
  91.  
  92.     *)  if [ $SKIP = 1 ]
  93.         then
  94.         [ $VERBOSE = 1 ] && echo SKIPPING $IPCHAINS $LINE 1>&2
  95.         else
  96.         [ $VERBOSE = 1 ] && echo $IPCHAINS $LINE 1>&2
  97.         $IPCHAINS $LINE || bugreport "ipchains command $LINE failed"
  98.         fi
  99.         ;;
  100.     esac
  101. done
  102.