#!/bin/sh

#
#  Copyright 1995-2000 Sun Microsystems, Inc.  All rights reserved.
#
# @(#)(SMI) $Id: sendtosupport,v 3.6.3.2 2000/06/21 16:37:36 whamilto Exp $
#
#								
#  Remote Support System:  sendtosupport 
#
#  $1 - File to be sent (must be in /usr/spool/uucppublic), i.e., mcdfile.Z  
#
#  $2 - Is the filetype being sent, from:
#          ckdtrace, notify, rss_fmon, errfile, mcd, crashout, hpfalert,
#          paniclog, misc, test
#
#  $3 - Subsystem (node) name where file originated (if known)
#
#  $4 - OPTIONAL, "beep" or "nobeep" overrides current RSS setting 
#

PATH=/var/remote.support/bin:/var/remote.support/scripts:/bin:/usr/bin:/usr/lbin:/usr/sbin:/usr/install/mcd/bin
#
# IGNORE HANGUP SIGNALS FOR INTERACTIVE USE
#
trap "" 1
#

# SAVE CALLING PARAMETERS
# Handle calls from old programs with old params (filename receive_script)
#
UNAME=`uname -n`
if [ $# = 2 ] ; then
    INFILE=$1
    case $INFILE in
	send_file*) INTYPE=paniclog;;
	   IAlert*) INTYPE=hpfalert;;
	   notify*) INTYPE=notify;;
	         *) INTYPE=unknown;;
    esac 
    INNODE=$UNAME
    BEEP=""
elif [ $# = 3 -o $# = 4 ] ; then
    INFILE=$1
    INTYPE=$2
    INNODE=$3
    if [ $# = 4 ] ; then
	BEEP=$4
    else
	BEEP=""
    fi
elif [ $# = 0 ] ; then
    echo "No arguments to sendtosupport, only starting uusched."

#   Workaround for svr_tty device perm being reset each time svr_tty
#   daemon starts up. This causes problems when using the pts device.

#    /usr/bin/setfacl -f /etc/svr_tty.facl /devices/pseudo/pts@0:3

    /usr/lib/uucp/uusched &
    exit 0
else
    echo "Improper number of parameters to sendtosupport. Aborting."
    exit 1
fi
#
# SET UP PARAMETERS FOR EXECUTION, SITE SPECIFIC READ FROM rss_params FILE
#
FILESDIR=/var/remote.support/files
if [ ! -r ${FILESDIR}/rss_params ] ; then
    echo "Cannot read ${FILESDIR}/rss_params,"
    echo "Check RSS configuration with update_rss_console."
    exit 1
fi
. ${FILESDIR}/rss_params
ARCHIVE=/var/remote.support/archive
DTPRINT=/usr/install/simckd/bin/dtprint
RCP=/usr/bin/rcp
RSH=/usr/bin/rsh
NULL=/dev/null
UUCPLIB=/usr/lib/uucp
CFILEPREFIX=/var/spool/uucp/${UUCPHOST}/A/C.*A
STATUSFILE=/var/spool/uucp/.Status/${UUCPHOST}
UUCPSPOOL=/var/spool/uucppublic
RECEIVEPROG=rss_receive
REMOTEBINDIR=/usr/spool/uucppublic/CS/bin
LASTFILE=lastsent
LTIME=`/bin/date +%Y%m%d.%H%M%S`	# Local date/time stamp
GTIME=`/bin/date -u +%Y%m%d.%H%M%S` # Greenwich Mean date/time stamp
SEQ=1					# Send_file sequence number
PID=$$
if [ -z "$SYSTEM_NAME" -o -z "$UUCPHOST" ] ; then
    echo "Missing site-specific parameters, check rss_params file."
    echo 
    exit 1
fi

#
# send_file - Queues up the uux job to send data back to Support Center.
#	      In the process it tars the data to preserve original
#	      (if is original) inode times, adds a GMT timestamp
#	      and compresses the tar image before sending.
#             The original file is deleted from uucppublic to save space.
#	      After the job is queued up the tar file is also deleted
#             from uucppublic (force copy to spool dir in uux command).
#	      Only things which have failed to queue and the ubiquitous
#	      errfile (from cerrd) should remain in uucppublic.
# 		$1 is the local file name
# 		$2 is the filetype being sent
# 		$3 is the data originating node name
#		$4 is the uucp Grade (priority) to use for transfer
#		   (rsshigh, rssmed, rsslow)
#
#	      Filenames sent have following form for uulog convenience:
#		<systemname>.<filetype>.<GMT_datetime>.<seq#>.tar.Z
send_file()
{
	cd ${UUCPSPOOL}
	if [ -f $1 ]
	then 
		FN=${SYSTEM_NAME}.$2.${GTIME}.${PID}.${SEQ}.tar
		tar cf $FN $1
		if [ $? = 0 ] ; then
			rm -f $1
			compress -f $FN
			if [ $? = 0 ]
			then
				if [ `uname -s` = "SunOS" ]
				then
					uux -g$4 -r -C "${UUCPHOST}!${REMOTEBINDIR}/${RECEIVEPROG} ${SYSTEM_NAME}!${UUCPSPOOL}/${FN}.Z ${CUSTOMER_NAME} ${SYSTEM_TYPE} ${SYSTEM_ID} $3 ${SYSTEM_STATE} ${SYSTEM_CITY} ${BEEP}" 2>/dev/null
				else
					uux -g$4 -r -C "${UUCPHOST}!${REMOTEBINDIR}/${RECEIVEPROG} ${UNAME}!${UUCPSPOOL}/${FN}.Z ${CUSTOMER_NAME} ${SYSTEM_TYPE} ${SYSTEM_ID} $3 ${SYSTEM_STATE} ${SYSTEM_CITY} ${BEEP}" 2>/dev/null
				fi
				rm -f ${FN}.Z
				SEQ=`expr $SEQ + 1`
				# Update LASTFILE modification date for rss.uuperiodic to test
				touch ${FILESDIR}/$LASTFILE
# Identify user id running this program.  Only root has write permission 
# to this directory so only change mode of file if running as root.
                                case X${UID} in
                                        X0 ) chmod 666 ${FILESDIR}/$LASTFILE
                                             ;; # change mode if root
                                        *  ) ;; # do not change mode if not root
                                esac
			fi
		fi
	fi
}


#
# send_errfile	sends a copy of current errfile converted 
#				to ascii using errpt
#
send_errfile()
{
	cd ${UUCPSPOOL}
	if [ -f errfile ]
	then
		errpt >errpt.${LTIME}
		send_file errpt.${LTIME} errpt $UNAME rssmed
	fi
}


#
# This moves ckdtrace file(s) using dtprint copies them
# to /usr/spool/uucppublic. There they are queued up to be
# phoned home.
#
# $1  =  Optional node name, if not provided will check all
#
ckdtrace()
{
	if [ $# = 1 ]
	then
		NODES=$1
	else
		NODES="${NODE1} ${NODE2} ${NODE3} ${NODE4} ${NODE5} ${NODE6}"
	fi
	if [ ! -d ${ARCHIVE} ]
	then
		mkdir ${ARCHIVE} 2>${NULL}
		chmod 777 ${ARCHIVE} 2>${NULL}
	fi
	for NODE in $NODES
	do
		if [ "${NODE}" != "${DSPCONS}" ]
		then
			if [ ! -d ${ARCHIVE}/${NODE} ]
			then
				mkdir ${ARCHIVE}/${NODE} 2>/dev/null
				chmod 777 ${ARCHIVE}/${NODE} 2>/dev/null
			fi
			if [ ! -d ${ARCHIVE}/${NODE}/sent ]
			then
				mkdir ${ARCHIVE}/${NODE}/sent 2>/dev/null
				chmod 777 ${ARCHIVE}/${NODE}/sent 2>/dev/null
			fi
			${RCP} ${NODE}:/rsvd/dumps/ckdtrace.* ${ARCHIVE}/${NODE}/ 2>${NULL}
			cd ${ARCHIVE}/${NODE}
			LIST=`ls ckdtrace.* 2>${NULL}`
			if [ ! -z "${LIST}" ]
			then
				for FILE in ${LIST}
				do
					cd ${ARCHIVE}/${NODE}
					CKDPRINT=`echo ${FILE} | sed "s/ckdtrace/ckdprint/"`
					${RSH} -n ${NODE} ${DTPRINT} /rsvd/dumps/${FILE} ">"/rsvd/dumps/${CKDPRINT}.${LTIME}
					${RCP} ${NODE}:/rsvd/dumps/${CKDPRINT}.${LTIME} ${CKDPRINT}.${LTIME} 2>${NULL}
					${RSH} -n ${NODE} /bin/rm /rsvd/dumps/${CKDPRINT}.${LTIME}
					${RSH} -n ${NODE} /bin/rm /rsvd/dumps/${FILE}
					mv ${FILE} ${ARCHIVE}/${NODE}/sent/
					chmod 666 ${CKDPRINT}.${LTIME}
					cp ${CKDPRINT}.${LTIME} ${UUCPSPOOL}
					rm ${CKDPRINT}.${LTIME}
					send_file ${CKDPRINT}.${LTIME} ckdprint ${NODE} rsslow
				done
			fi
		fi
	done
}

##############################################################################
# main program
##############################################################################

cd ${UUCPSPOOL}
if [ ! -f $INFILE ] ; then
    echo "Error, sendtosupport aborting, ${UUCPSPOOL}/$INFILE not found."
    exit 1
fi

#
# check to see if we want to block beeps
#
    if [ -f ${FILESDIR}/nobeep ] ; then
	BEEPEXPIRE=`/bin/cat ${FILESDIR}/nobeep`
	if [ X$BEEPEXPIRE = X ] ; then
	    rm -f ${FILESDIR}/nobeep
	    BEEP=nobeep
	elif [ `/bin/date +%Y%j%H%M` -gt $BEEPEXPIRE ] ; then
	    rm -f ${FILESDIR}/nobeep
	    BEEP=beep
	else
	    BEEP=nobeep
	fi
    fi

#  Remove status file if it exists to prevent uucp failure.

if [ -f ${STATUSFILE} ]
then
   rm -f ${STATUSFILE}
fi

# get ID of user running this program (RSS uses root, but HPF may use cmdadm)
ID=`id`
UID=`expr "${ID}" : 'uid=\([0-9][0-9]*\)'`

#
#  TAKE ACTION DEPENDING ON TYPE OF FILE BEING SENT
#
#  Note that special action is necessary for handling of old
#  RSS programs that have not yet been modified to use new calling
#  parameters and conventions.
#  If send_file (panic log) or notify is being sent, also send 
#  the current errfile.  

case $INTYPE in
    notify)	mv $INFILE ${INFILE}.${LTIME}
		send_file ${INFILE}.${LTIME} notify $UNAME rsshigh
		send_errfile
		;;
    hpfalert)	mv $INFILE ${INFILE}.${LTIME}
		send_file ${INFILE}.${LTIME} hpfalert $UNAME rsshigh
		;;
    paniclog)	send_file $INFILE paniclog $UNAME rsshigh
		send_errfile
		;;
    errfile)	send_errfile
		;;
    test)
    	mv $INFILE ${INFILE}.${LTIME}
		send_file ${INFILE}.${LTIME} $INTYPE $INNODE rssmed
		;;
#   crashout)
#   mcd)
#   rss_fmon)
#   misc)
    *)
		send_file $INFILE $INTYPE $INNODE rssmed
		;;
esac

#
# Only get and send traces once transfer of "real" data has been started.
#if [ "${UNAME}" = "${DSPCONS}" ]
#then
#    ckdtrace
#fi

#
#  NOW START TRANSFER OF QUEUED UP JOBS
#

#   Workaround for svr_tty device perm being reset each time svr_tty
#   daemon starts up. This causes problems when using the pts device.

#/usr/bin/setfacl -f /etc/svr_tty.facl /devices/pseudo/pts@0:3 > /dev/null 2>&1

/usr/lib/uucp/uusched &

# To notify any users currently connected in of pending CallHomes
/var/remote.support/bin/ssrr_trans &
