#
# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# ident	"@(#)postinstall	1.9	07/09/20 SMI"
#
# *
# * U.S. Government Rights - Commercial software. Government users are subject
# * to the Sun Microsystems, Inc. standard license agreement and applicable
# * provisions of the FAR and its supplements.
#
# This distribution may include materials developed by third parties. Sun,
# Sun Microsystems, the Sun logo and Solaris are trademarks or registered
#  trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
#
#

# The source package contains a directory having an embedded
# pound sign.  While this character is legal in filenames,
# and pkgadd and friends don't object to it, some RE tools
# aren't too happy about it, so in this package we replace the
# pound with an underscore, and rename the directory after
# installation (and update the package database too).

# The source package contains a directory having an embedded
# pound sign.  While this character is legal in filenames,
# and pkgadd and friends don't object to it, some RE tools
# aren't too happy about it, so in this package we replace the
# pound with an underscore, and rename the directory after
# installation (and update the package database too).


#
# We have to differentiate between a pkgadd relocations
# and a Solaris install, since Solaris uses pkgadd -R 
# as well. Solaris installs on /a mounted filesystem.
#
#
# set a flag for if a Solaris Install
#


# define stmts of files used for crackle
#

spapm_reg=/etc/snmp/conf/spapm.reg
spapm_rsrc=/etc/snmp/conf/spapm.rsrc

spama_conf=/etc/opt/SUNWspa/spama.conf 
tmp_spama_conf=/tmp/spama.conf
tmp_spama_out=tmp/spama.out
spa_location=/etc/opt/SUNWspa
sma_location=/etc/sma/snmp

# These defines statements are for 
# the editing of /etc/services
#
services_file=$BASEDIR/etc/inet/services
services_bak=$BASEDIR/tmp/services.bak
services_out=$BASEDIR/tmp/services.out
SNMPD_FILE=$BASEDIR/etc/sma/snmp/snmpd.conf

RM=/usr/bin/rm
CP=/usr/bin/cp


#########################################################
#							#
#		edit /etc/services			#
#							#
#########################################################

#
# this routine checks for a pre-existing entry
# of snmpd in the etc/services file
#

check_for_snmpd() {
 cat "$services_bak" | awk '{print $1,$2}' | while read attr value
    do
	if [ "$attr" = "snmpd" ] && [ "$value" = "161/udp" ] 
	    then
	# create a services.out file if there is already 
	# an entry
	    echo "exists" >> $services_out
	fi
    done
}

#
# this routine checks if there is a services.out file
# if so, then there is already an entry in the services
# file for snmpd, if not, add it
#

add_entry() {

#
# if this file exists, then there is already an entry
# and do nothing
#
    if [ -f $services_out ] 
    then
	return
    else
    echo "snmpd           161/udp        snmp             # SMA snmp daemon" >> $services_bak
    fi

return

}

#
# make a copy of the services file
#

make_copy() {
    $CP -p $services_file $services_bak
}

#
# remove working files
#

cleanup_services() {

if [ -f $services_out ] 
	then
    	$RM $services_out
fi

#
# anything done to root at Install time is
# still relative to the mounted filesytem /a
# so for this one case we have to be aware.
#


	    $CP -p $services_bak $BASEDIR/etc/inet/services

if [ -f $services_bak ]
       then
       $RM $services_bak
fi

}

# First make a copy of the /etc/services file to work with


make_copy

# check for existence of snmpd entry

check_for_snmpd

# Add an entry if needed

add_entry

#cleanup

cleanup_services


#########################################################
#							#
# Edit the snmpd.conf file				#
#							#
#########################################################

edit_snmpd_file() {
	#
	# only add the line if it is not already there
	#
	/usr/bin/egrep -s "$1" $SNMPD_FILE || echo "$1" >> $SNMPD_FILE
}

#
# edit snmpd.conf to add the dlmod statements to the file.
# 

if [ $ARCH = "sparc" ]
then
	edit_snmpd_file "dlmod seaProxy /usr/sfw/lib/sparcv9/libseaProxy.so"
	edit_snmpd_file "dlmod seaExtensions /usr/sfw/lib/sparcv9/libseaExtensions.so"
else
# Solaris booted in 32bit mode during installation, we cannot determine the isainfo
# for AMD64. So we are adding all four entries hoping that any of the two libraries
# will be loaded when snmpd comes up.

	edit_snmpd_file "# We require amd64 entries for 64/32 bit support"
	edit_snmpd_file "dlmod seaProxy /usr/sfw/lib/libseaProxy.so"
	edit_snmpd_file "dlmod seaExtensions /usr/sfw/lib/libseaExtensions.so"
	edit_snmpd_file "dlmod seaProxy /usr/sfw/lib/amd64/libseaProxy.so"
	edit_snmpd_file "dlmod seaExtensions /usr/sfw/lib/amd64/libseaExtensions.so"
fi

#
# end edit snmpd file
#

#################################################################################
#
# - check START_MASTER_AGENT in crackle-ii's spama.conf file,
#
# if "yes" then replace it with "no" and check MASTER_AGENT_REQ_PORT atribute
# for a port number other then the default, 161, if it is a non-default port 
# number add it to the snmpd.conf's agentaddress token, need to stop/start the
# crackle-ii master agent
#
# if "no", don't do anything and continue on with other migration steps
# 
# - other migration step
#    Disable sma entity MIB implementation, if applicable.
#
#################################################################################

#
# Start crackle-II edits
#
# Need to add crackle-II non-default port number to the snmpd.conf's token 
# agentaddress 
#
add_port_to_sma() {

    #
    # "Add the agentaddress token in snmpd.conf with the crackle-II " 
    # "port number to it along with sma's default port.  SMA out of "
    # "the box does not have this defined."
    #

    cat "$tmp_snmpd_conf" | awk '{print $1,$2}' | while read attr value
    do

	if [ "$attr" = "agentaddress" ]
	then
	    sed -e "s/^agentaddress /agentaddress $1,/" "$tmp_snmpd_conf" >"$tmp_snmpd_out"
	    cp -p "$tmp_snmpd_out" "$tmp_snmpd_conf"
	    break
	fi

    done

    #
    # agentaddress token was not defined, add it to snmpd.conf,
    # use tmp_snmpd_out to see if agentaddress was nor defined or not
    #

    if [ -s "$tmp_snmpd_out" ]
    then
	echo "agentaddress was defined"
    else
	echo "agentaddress was not defined"
	echo "" >> "$tmp_snmpd_conf"
	echo "agentaddress 161,$1" >> "$tmp_snmpd_conf"
    fi

}

#
# Disable sma entity MIB implementation
#
disable_sma_entity_mib() {
    #
    # "uncommnet sma entity mib dlmod entry if present"
    #
    sed -e "s/^dlmod entity/#dlmod entity/" "$tmp_snmpd_conf" > "$tmp_snmpd_out"
    cp -p "$tmp_snmpd_out" "$tmp_snmpd_conf"
}

#
# create temporary snmpd.conf
#
create_tmp_snmpd_conf() {

    if [ -s "$tmp_snmpd_conf" ]
    then

	echo "already exists, created when adding a non-default port to snmpd.conf"
    else 
	cp "$snmpd_conf" "$tmp_snmpd_conf"
    fi
}



#
# Copy the configuration files that have been modified for crackle-ii migration
# to SMA
#

copy_files() {

    if [ -s "$tmp_snmpd_conf" ]
    then
	cp "$tmp_snmpd_conf" "$sma_location"
    fi

    if [ -s "$tmp_spama_conf" ]
    then
	cp "$tmp_spama_conf" "$spa_location"
	chmod 600 "$spama_conf"
	#
	# Stop - start crackle-ii
	#
	/etc/init.d/spama stop
	/etc/init.d/spama start
    fi
}

#
# cleanup
#
cleanup() {

    $RM /tmp/spama.*
    $RM /tmp/snmpd.*

}

#
# Check these files for the Crackle-II installation
#
if [ -s "$spapm_reg" ] && [ -s "$spapm_rsrc" ]
then

    #
    # Check if START_MASTER_AGENT is set to yes, if it is, set it to no, and
    # continue the migration configuration process
    #
    cp "$spama_conf" "$tmp_spama_conf"
    cat "$tmp_spama_conf"  | awk -F= '{print $1,$2}' | while read attr value
    do 
	if [ "$attr" = "START_MASTER_AGENT" ] && [ "$value" = "yes" ]
	then

	    sed -e "s/^START_MASTER_AGENT=yes/START_MASTER_AGENT=no/" "$tmp_spama_conf" > "$tmp_spama_out"

	    cp "$tmp_spama_out" "$tmp_spama_conf"

	    #
	    # check if the crackle-ii non-default port needs to be migrated 
	    # to sma
	    #
	    cat "$tmp_spama_conf" | awk -F= '{print $1,$2}' | while read attr value
	    do
		if [ "$attr" = "MASTER_AGENT_REQ_PORT" ]
		then

		    if [ "$value" = "161" ] || [ -z "$value" ]
		    then
			echo "using defualt port 161"
		    else 
			# create temporary snmpd.conf
			create_tmp_snmpd_conf

			#
			# "port is not empty or not the default, 161 "
			# "need to modify snmpd.conf, adding this udp port "
			#
			add_port_to_sma $value

		    fi
		fi
	    done
	    break;
    	fi
    done

    #
    # create temporary snmpd.conf, if not already created above
    # 
    create_tmp_snmpd_conf

    #
    # Disable sma entity MIB implementation
    #
    disable_sma_entity_mib

    #
    # Copy new spama.conf and snmpd.conf, if available
    # and restart daemons
    #
    copy_files

    #
    # clean up temp files created
    #
    cleanup
fi

#
# end of crackle script
#

#
# check if sma should be enabled (sma.tmp was set in preinstall)
if [ -f $BASEDIR/var/sma.tmp ]; then
	touch  $BASEDIR/var/svc/profile/upgrade
	cat >> $BASEDIR/var/svc/profile/upgrade <<\_SMA
if [ `/sbin/zonename` = global ]; then
	/usr/sbin/svcadm enable svc:/application/management/sma:default
fi
_SMA
	rm -f $BASEDIR/var/sma.tmp
fi

exit 0
