#!/bin/bash
# $Header: /cvs/WebShield/wsrc/files/mgmt/xmlconv.d/e02hfchanges,v 1.4 2002/09/09 15:15:29 bwhittak Exp $
#
# (C) Copyright Network Associates Inc. 2002
#
# Apply hotfix changes since 2.5
if [ -f $NETAWSS/.profile.vars ]; then
    . $NETAWSS/.profile.vars
else
    . /var/NAIENV/.profile.vars
fi
[[ "$PATH" == "$wsPATH":* || -z "$wsPATH" ]] || PATH=$wsPATH:$PATH
shopt -s extglob
shopt -s nullglob

# we only do files with VersionWebshield v1.0 (e500 v2.0 and e250 v2.1) and 2.5
[[ -n $OLDWSXVER && $OLDWSXVER != *'v1.0'?( *) && $OLDWSXVER != *'v2.5' ]] && exit

#********************************************************
# ChangeWSxmlFile - This function takes a path to a 
# WebShield.xml file and applies changes as needed.
#*********************************************************
ChangeWSxmlFile()
{
    unset XMLsed XMLpatches
    declare -a XMLpatches
    # AllowLockedCab=yes
    acsed='
    /\<name="\(smap\|http-gw\|pop3-pdk\|ftp-gw\)"/,/\(<\/Service\|wsn="allow-locked-cab"\)/{
    /wsn="allow-locked-cab"/s/>no</>yes</
    }
    '
    sed -e "$acsed" "$1" | diff -q "$1" - >/dev/null ||
	XMLsed=$XMLsed$acsed XMLpatches=( "${XMLpatches[@]}" 'AllowLockedCab=yes' )
    # AllowNonRFCDomain
    tsed='
    /\<name="smap"/,/\(<\/Service\|cname="AllowNonRFCDomain"\)/{
    /\([[:space:]]*\)<\/Service/s%%\1	<Property cname="AllowNonRFCDomain" wsn="allow-nonrfc-domain">no</Property>\
    &%
    }
    '
    sed -e "$tsed" "$1" | diff -q "$1" - >/dev/null ||
	XMLsed=$XMLsed$tsed XMLpatches=( "${XMLpatches[@]}" 'AllowNonRFCDomain' )
    # POP3 BadContentHandling
    tsed='
    /\<name="pop3-from-/,/\(<\/Service\|cname="\(Bad\)\?ContentHandling"\)/{
    s/cname="ContentHandling"/cname="BadContentHandling"/
    s/wsn="badcontent-handing"/wsn="badcontent-handling"/
    /\([[:space:]]*\)<\/Service/s%%\1	<Property cname="BadContentHandling" wsn="badcontent-handling">reject</Property>\
    &%
    }
    '
    sed -e "$tsed" "$1" | diff -q "$1" - >/dev/null ||
	XMLsed=$XMLsed$tsed XMLpatches=( "${XMLpatches[@]}" 'POP3 BadContentHandling' )
    # StrictPartialParse
    tsed='
    /\<name="smap"/,/\(<\/Service\|cname="StrictPartialParse"\)/{
    /\([[:space:]]*\)<\/Service/s%%\1	<Property cname="StrictPartialParse" wsn="strict-partial-parse">no</Property>\
    &%
    }
    '
    sed -e "$tsed" "$1" | diff -q "$1" - >/dev/null ||
	XMLsed=$XMLsed$tsed XMLpatches=( "${XMLpatches[@]}" 'StrictPartialParse' )
    # MultipleEnginePass
    tsed='
    /\<name="smap"/,/\(<\/Service\|cname="MultipleEnginePass"\)/{
    /\([[:space:]]*\)<\/Service/s%%\1	<Property cname="MultipleEnginePass" wsn="multiple-engine-pass">yes</Property>\
    &%
    }
    '
    sed -e "$tsed" "$1" | diff -q "$1" - >/dev/null ||
	XMLsed=$XMLsed$tsed XMLpatches=( "${XMLpatches[@]}" 'MultipleEnginePass' )
    # Copyright date
    tsed='
    s/2001, Networks Associates/2002, Networks Associates/g
    '
    sed -e "$tsed" $1 | diff -q $1 - >/dev/null ||
	XMLsed=$XMLsed$tsed XMLpatches=( "${XMLpatches[@]}" 'Copyright date' )

    [[ ${#XMLpatches[@]} -gt 0 ]] || return 0	# nothing to do
    test -f $1 || return 0	# don't bother if it's not there
    printf "Applying the %s patch to $1\n" "${XMLpatches[@]}"
    if sed -e "$XMLsed" $1 > $1.new; then
	echo Backing up original file
	cp -p $1 $1.bak
	[[ -s $1.new ]] && cp -f $1.new $1 || retVal=1
	rm -f $1.new
    else
	echo "... failed!"
	retVal=1
    fi
    return $retVal
}

# edit the files
for f; do
    ChangeWSxmlFile "$f"
done
