#!/bin/sh -f

FILES=./files
BACKUP=./backup

if [ ! -d $FILES ]; then
	echo "*** $FILES directory not found - make sure cwd is patch"
	echo "*** directory and restart."
	exit 1
fi

if [ ! -d $BACKUP ]; then
	echo "*** $BACKUP directory not found - make sure cwd is patch"
	echo "*** directory and restart."
	exit 1
fi

echo " "
echo "*** Backing up old files..."
echo " "
cp -p /etc/fw/bin/fw $BACKUP
cp -p /etc/fw/bin/fwui $BACKUP
cp -p /etc/fw/modules/fwmod.4.1.3.o $BACKUP
cp -p /etc/fw/bin/fwc $BACKUP
cp -p /etc/fw/bin/fwstop $BACKUP
cp -p /etc/fw/bin/fwstart $BACKUP
cp -p /etc/fw/bin/fwinfo $BACKUP
cp -p /etc/fw/cisco/fwciscoget $BACKUP
cp -p /etc/fw/cisco/fwciscoput $BACKUP
cp -p /etc/fw/cisco/fwciscologin $BACKUP
cp -p /etc/fw/cisco/fwcisco $BACKUP
cp -p /etc/fw/lib/base.def $BACKUP
cp -p /etc/fw/lib/table.def $BACKUP
cp -p /etc/fw/lib/crypt.def $BACKUP
cp -p /etc/fw/lib/code.def $BACKUP
cp -p /etc/fw/conf/objects.C $BACKUP

# set up  to save objects in objects.C
if [ -r /etc/fw/conf/objects.C ] ; then
	cp -p /etc/fw/conf/objects.C /etc/fw/conf/objects.C.orig
else
	echo ""
	echo " ERROR: Unable to find the original objects.C in "
        echo "         /etc/fw/conf/   "
	echo " The default empty network object database will be used"
	echo ""
fi

echo " "
echo "*** Installing patch..."
echo " "
cp -p $FILES/fw /etc/fw/bin
cp -p $FILES/fwui /etc/fw/bin
cp -p $FILES/fwmod.4.1.3.o /etc/fw/modules
cp -p $FILES/fwc /etc/fw/bin
cp -p $FILES/fwstop /etc/fw/bin
cp -p $FILES/fwstart /etc/fw/bin
cp -p $FILES/fwinfo /etc/fw/bin
cp -p $FILES/fwciscoget /etc/fw/cisco
cp -p $FILES/fwciscoput /etc/fw/cisco
cp -p $FILES/fwciscologin /etc/fw/cisco
cp -p $FILES/fwcisco /etc/fw/cisco
cp -p $FILES/base.def /etc/fw/lib
cp -p $FILES/table.def /etc/fw/lib
cp -p $FILES/code.def /etc/fw/lib
cp -p $FILES/crypt.def /etc/fw/lib
cp -p $FILES/objects.C /etc/fw/conf
(cd /etc/fw/bin; ln -s fwui snmp_trap)

# Update objects.C
if [ -r /etc/fw/conf/objects.C ] ; then
  echo ""
  echo "*** Updating objects database...."
  cp -p /etc/fw/conf/objects.C /etc/fw/conf/objects.C.generic
  rm -f /etc/fw/conf/objects.C.merged
  /etc/fw/bin/fw confmerge /etc/fw/conf/objects.C.orig /etc/fw/conf/objects.C > /etc/fw/conf/objects.C.merged
  if [ $? -ne 0 ]; then
	echo ""
	echo "	Merge failed. Using default objects database..."
	echo "	Continuing upgrade..."
  else
        rm -f /etc/fw/conf/objects.C
        sed '/block_reverse_tcp /s/true/false/' \
    /etc/fw/conf/objects.C.merged  > /etc/fw/conf/objects.C
#    cp /etc/fw/conf/objects.C.merged  /etc/fw/conf/objects.C
  fi
fi

# Update snmp information
if [ -r /etc/fw/conf/snmp.C ] ; then
  echo ""
  echo "*** Updating snmp database...."
  cp -p /etc/fw/conf/snmp.C /etc/fw/conf/snmp.C.orig
  rm -f /etc/fw/conf/snmp.C.upd
  sed '/CheckPoint/s/2\.0./2.0e/' /etc/fw/conf/snmp.C > /etc/fw/conf/snmp.C.upd 2> /dev/null
  if [ $? -ne 0 ]; then
	echo ""
	echo "	Update failed. Using original snmp database..."
	echo "	Continuing upgrade..."
  else
	cp /etc/fw/conf/snmp.C.upd /etc/fw/conf/snmp.C
  fi
fi



echo " "
echo "*** Updating kernel module with current license..."
echo " "
/etc/fw/bin/fw putlic 0 0-0-0 0

echo " "
echo "Patch installed successfully."
echo " "

echo " "
echo "*** You must now run /etc/fw/bin/fwconfig and select option 1"
echo "*** to update file and kernel module group permissions."
echo " "

