# check for root
user=`/bin/id | /usr/bin/grep root | /usr/bin/wc -l`
if [ $user -eq 0 ]; then
	echo "You must be root to execute this script."
	exit 1
fi

# helper function
sed_file () {
    src="$1"
    dst="$2"
    regexp="$3"

    ftmp=/tmp/nsmsed$$
    /bin/sed "$regexp" "$src" > $ftmp
    if [ $? -ne 0 ]; then
        return 1
    fi
    /usr/bin/mv "$ftmp" "$dst"
    if [ $? -ne 0 ]; then
        return 1
    fi
    return 0;
}

# helper function
start_db () {
    /usr/bin/su - $SSTR_DBOWNER -c "$SSTR_DBSTART"
    this_try=1
    until /usr/bin/su $SSTR_DBOWNER  -c ". $SSTR_DBBIN/postgres.env; LD_LIBRARY_PATH=$SSTR_DBHOME/lib:$SSTR_DBHOME/nsm1/lib; export LD_LIBRARY_PATH; $SSTR_PSQL -l" > /dev/null 2>&1
    do
        if [ $this_try -ge 12 ]; then
            echo "Database still not up - giving up"
            exit 1
        fi
        echo "Wait and try connecting to database again..."
        this_try=`/usr/bin/expr $this_try + 1`
        sleep 10
    done
}

# stop TR if installed
/usr/bin/pkginfo -q SUNWnsmbj
if [ $? -eq 0 ]; then
    # don't stop it unless they've configured - otherwise this file isn't
    # created yet and you get a bad-sounding error message
    if [ -e /opt/SUNWnsm/bin/sstr_ctl ]; then
        /etc/init.d/sstrd stop
    fi

    # if database is installed need to back out some SQL 
    PKG=SUNWnsmdb
    /usr/bin/pkginfo -q $PKG
    if [ $? -eq 0 ]; then
	BASEDIR=`/usr/bin/pkginfo -r $PKG 2>&1`
	if [ $? -ne 0 ]; then
	    BASEDIR=/opt
	fi
	SSTR_HOME=$BASEDIR/SUNWnsm
        SSTR_DBHOME=$SSTR_HOME/util/pgsql
        SSTR_DBBIN=$SSTR_DBHOME/nsm1/bin
        SSTR_DBSTART=$SSTR_DBBIN/dbstart.sh
        SSTR_DBSTOP=$SSTR_DBBIN/dbstop.sh
        SSTR_DBOWNER=sstr001
        SSTR_PSQL=$SSTR_DBHOME/bin/psql
	start_db

	# first back out changes made in -04
        echo "Backing out -04 DB changes..."
        /usr/bin/su $SSTR_DBOWNER  -c ". $SSTR_DBBIN/postgres.env; LD_LIBRARY_PATH=$SSTR_DBHOME/lib:$SSTR_DBHOME/nsm1/lib; export LD_LIBRARY_PATH; $SSTR_PSQL -f $SSTR_DBHOME/nsm1/ddl/patchrm-04.sql"

	# back out changes made in -02 if previous version (-03/-02) of patch
	# hasn't been installed
        /usr/bin/showrev -p | /usr/bin/grep 114616-02 > /dev/null
	missing02=$?
        /usr/bin/showrev -p | /usr/bin/grep 114616-03 > /dev/null
	missing03=$?
        if [ missing02 -eq 1 -a missing03 -eq 1 ]; then
            echo "Backing out -02 DB changes..."

            # save annotations
	    tmpfile=/tmp/annotations.sql
	    /bin/rm -f $tmpfile
	    /usr/bin/su - $SSTR_DBOWNER -c ". $SSTR_DBBIN/postgres.env; LD_LIBRARY_PATH=$SSTR_DBHOME/lib:$SSTR_DBHOME/nsm1/lib; export LD_LIBRARY_PATH; $SSTR_DBHOME/bin/pg_dump -a -D -i -R -t annotation -f $tmpfile"
	    sed_file $tmpfile $tmpfile 's/INSERT INTO \"annotation\"/INSERT INTO \"annotationold\"/'
	    /bin/chmod a+r $tmpfile
    
            # run the patchrm sql script
            /usr/bin/su $SSTR_DBOWNER  -c ". $SSTR_DBBIN/postgres.env; LD_LIBRARY_PATH=$SSTR_DBHOME/lib:$SSTR_DBHOME/nsm1/lib; export LD_LIBRARY_PATH; $SSTR_PSQL -f $SSTR_DBHOME/nsm1/ddl/patchrm.sql"
    
            # run commands to change annotations
	    /usr/bin/su $SSTR_DBOWNER  -c ". $SSTR_DBBIN/postgres.env; LD_LIBRARY_PATH=$SSTR_DBHOME/lib:$SSTR_DBHOME/nsm1/lib; export LD_LIBRARY_PATH; $SSTR_PSQL -f $tmpfile"
	    /usr/bin/su $SSTR_DBOWNER  -c ". $SSTR_DBBIN/postgres.env; LD_LIBRARY_PATH=$SSTR_DBHOME/lib:$SSTR_DBHOME/nsm1/lib; export LD_LIBRARY_PATH; $SSTR_PSQL -c 'select convert_annotations()'"
	    /usr/bin/su $SSTR_DBOWNER  -c ". $SSTR_DBBIN/postgres.env; LD_LIBRARY_PATH=$SSTR_DBHOME/lib:$SSTR_DBHOME/nsm1/lib; export LD_LIBRARY_PATH; $SSTR_PSQL -c 'drop table annotationOld'"
	    /usr/bin/su $SSTR_DBOWNER  -c ". $SSTR_DBBIN/postgres.env; LD_LIBRARY_PATH=$SSTR_DBHOME/lib:$SSTR_DBHOME/nsm1/lib; export LD_LIBRARY_PATH; $SSTR_PSQL -c 'drop function convert_annotations()'"
	    /usr/bin/su $SSTR_DBOWNER  -c ". $SSTR_DBBIN/postgres.env; LD_LIBRARY_PATH=$SSTR_DBHOME/lib:$SSTR_DBHOME/nsm1/lib; export LD_LIBRARY_PATH; $SSTR_PSQL -c 'drop function convert_char(SMALLINT)'"
	    /bin/rm -f $tmpfile
        fi

        # shut db back down
        /usr/bin/su - $SSTR_DBOWNER -c "$SSTR_DBSTOP"
    fi
fi

# stop CS if installed
/usr/bin/pkginfo -q SUNWdm
if [ $? -eq 0 ]; then
    /etc/init.d/sscs stop
    /etc/init.d/sscs.wbem stop
    /etc/init.d/sshd stop
    os=`/sbin/uname -r`
    if [ "$os" = "5.8" ]; then
	/etc/init.d/prngd stop
    fi
fi

# stop DE if installed
/usr/bin/pkginfo -q SUNWsade
if [ $? -eq 0 ]; then
    /etc/init.d/init.ssde stop
fi
