#!/bin/sh
# $Header: ftp_to_client.sh,v 1.26 2000/01/27 18:51:02 raa Stab $
#bcpyrght
#***************************************************************************
#* Copyright 1993 - 1999 VERITAS Software Corporation, All Rights Reserved *
#***************************************************************************
#ecpyrght
#
# This script makes a /usr/openv/netbackup/bp.conf file for a client 
# and makes copies of the /etc/services entries for bprd, bpcd, bpjava-msvc and 
# and vopied and the /etc/inetd.conf entry for bpcd, bpjava-msvc and  vopied. 
# It will then ftp the client
# binaries, the bp.conf, and the /etc/services and /etc/inetd.conf entries to
# the client host specified as the first parameter. It will use the user
# specified as the second parameter as the ftp user. You will be asked by ftp to
# give the password for the user specified on the client host.
# When done with this script, you need to log in as root on the client and
# execute client_config to update the /etc/services and /etc/inetd.conf
# files.
#
#  cd /usr/openv/netbackup/bin/<hardware>/<os>
#  ftp_to_client client_name user_name
#

OPENV_DIR=/usr/openv
OPENV_BIN=${OPENV_DIR}/bin
OPENV_LIB=${OPENV_DIR}/lib
OPENV_VAR=${OPENV_DIR}/var
OPENV_AUTH=${OPENV_VAR}/auth
BP_DIR=${OPENV_DIR}/netbackup
BP_BIN=${BP_DIR}/bin
BP_DB=${BP_DIR}/db
BP_HELP=${BP_DIR}/help
BP_HELP_XBP=${BP_DIR}/help/xbp
BP_HELP_BP=${BP_DIR}/help/bp
JAVA_DIR=${OPENV_DIR}/java
JAVA_LOG=${JAVA_DIR}/logs
DEST_DIR=/tmp/bp
DEST_BIN=/tmp/bp/bin
DEST_HELP=/tmp/bp/help
DEST_HELP_XBP=/tmp/bp/help/xbp
DEST_HELP_BP=/tmp/bp/help/bp
DEST_JAVA_DIR=/tmp/bp/java
SOURCE_DIR=`/bin/pwd`

if [ -f /usr/openv/netbackup/version ] ; then
	HARDWARE=`head -1 /usr/openv/netbackup/version | cut -f2 -d" "`
fi

TR=/usr/bin/tr
# Determine location of inetd.conf file.
inetdfile=/etc/inetd.conf

case "$HARDWARE" in
	ALPHA | HP* | PYRAMID)
		;;
	NCR)
		if [ -f /etc/inet/inetd.conf ] ; then
			inetdfile=/etc/inet/inetd.conf
		fi
		;;
	DGUX | RS6000)
		TR=/bin/tr ;;
	SEQUENT*)
		;;
	SGI)
		if [ -f /usr/etc/inetd.conf ] ; then
			inetdfile=/usr/etc/inetd.conf
		fi
		;;
	SOLARIS)
		TR=/bin/tr
		;;
	SUN4)
		# Prepend /usr/5bin to PATH on Suns to get System V behaviour from echo.
		PATH=/usr/5bin:$PATH
		TR=/bin/tr
		;;
	*)
		echo "
/usr/openv/netbackup/version not found or corrupted.
Unknown hardware type: \"$HARDWARE\"
"
		exit 1
		;;
esac

TAB=`/bin/echo ' ' | $TR ' ' '\011'`
SPACE=' '

if [ "$#" -ne 2 ] ; then
	/bin/echo "usage: ${0} <client> <user>" >& 2
	exit 1
else
	FTPUSER=${2}
fi

MACHINE=`pwd`
class_os=`basename $MACHINE`
MACHINE=`dirname $MACHINE`
DESTMACH=`basename $MACHINE`
# list every client we ever had in case it is still on site.
case "$DESTMACH" in
	ALPHA) ;;
	Auspex) ;;
	C910_920 | SGI) ;;
	CD4000) ;;
	CRAY) ;;
	Convex) ;;
	DN10000 | DN3000 | HP9000-400)
		if [ ! -f ${SOURCE_DIR}/rbak ] ; then
			echo "
You need to put a 10.4 version of rbak in
${SOURCE_DIR}
before attempting to ftp the files to a client.
"
			exit 1
		fi ;;
	Dec3100 | Dec5000) ;;
	DataGeneral) ;;
	FreeBSD) ;;
	HP9000-300 | HP9000-700 | HP9000-800) ;;
	INTEL) ;;
	Linux) ;;
	MACINTOSH) ;;
	Motorola) ;;
	NCR) ;;
	Pyramid) ;;
	RS6000) ;;
	SCO) ;;
	Sequent) ;;
	Solaris) ;;
	Sun3 | Sun4) ;;
	*)
		/bin/echo "
You need to be in the directory where the client's files are
located when you execute this script.
" >& 2
		exit 1;;
esac

case "$DESTMACH" in
HP*)	DSO_SUFFIX=sl ;;
*)	DSO_SUFFIX=so ;;
esac

# Look for 0 or more spaces and tabs followed by SERVER.
SRVR=`egrep "^[${SPACE}${TAB}]*SERVER" ${BP_DIR}/bp.conf`
if [ "${SRVR}" = "" ] ; then
	/bin/echo "Missing SERVER in /usr/openv/netbackup/bp.conf"
	exit 1
fi

# Build up a list of valid servers on /tmp/bp_servers_hostname.
/bin/rm -f /tmp/bp_servers_${1}

# Look for 0 or more spaces and tabs followed by SERVER.
egrep "^[${SPACE}${TAB}]*SERVER" ${BP_DIR}/bp.conf >/tmp/bp_servers_${1}

# default entry added status
bad_entry=0

# Read the bprd entry from /etc/services.
BPRDSERVICE=`grep "bprd" /etc/services`
if [ "${BPRDSERVICE}" = "" ] ; then
	/bin/echo "You need an entry for bprd in /etc/services" >& 2
	bad_entry=1
fi
/bin/rm -f /tmp/bprd_service_${1}
grep bprd /etc/services >/tmp/bprd_service_${1}

# Read the bpcd entry from /etc/services.
BPCDSERVICE=`grep "bpcd" /etc/services`
if [ "${BPCDSERVICE}" = "" ] ; then
	/bin/echo "You need an entry for bpcd in /etc/services" >& 2
	bad_entry=1
fi
/bin/rm -f /tmp/bpcd_service_${1}
grep bpcd /etc/services >/tmp/bpcd_service_${1}

# Read the vopied entry from /etc/services.
VOPIEDSERVICE=`grep "vopied" /etc/services`
if [ "${VOPIEDSERVICE}" = "" ] ; then
	/bin/echo "You need an entry for vopied in /etc/services" >& 2
	bad_entry=1
fi
/bin/rm -f /tmp/vopied_service_${1}
grep vopied /etc/services >/tmp/vopied_service_${1}

# Read the bpjava-msvc entry from /etc/services.
BPJAVASERVICE=`grep "bpjava-msvc" /etc/services`
if [ "${BPJAVASERVICE}" = "" ] ; then
	/bin/echo "You need an entry for bpjava-msvc in /etc/services" >& 2
	bad_entry=1
fi
/bin/rm -f /tmp/bpjava_service_${1}
grep bpjava-msvc /etc/services >/tmp/bpjava_service_${1}

# Read the bpcd entry from inetd.conf.
BPCDCONF=`grep "bpcd" ${inetdfile}`
if [ "${BPCDCONF}" = "" ] ; then
	/bin/echo "You need an entry for bpcd in ${inetdfile}" >& 2
	bad_entry=1
fi
/bin/rm -f /tmp/bpcd_inetd.conf_${1}
grep bpcd ${inetdfile} >/tmp/bpcd_inetd.conf_${1}

# Read the vopied entry from inetd.conf.
VOPIEDCONF=`grep "vopied" ${inetdfile}`
if [ "${VOPIEDCONF}" = "" ] ; then
	/bin/echo "You need an entry for vopied in ${inetdfile}" >& 2
	bad_entry=1
fi
/bin/rm -f /tmp/vopied_inetd.conf_${1}
grep vopied ${inetdfile} >/tmp/vopied_inetd.conf_${1}

# Read the bpjava-msvc entry from inetd.conf.
BPJAVACONF=`grep "bpjava-msvc" ${inetdfile}`
if [ "${BPJAVACONF}" = "" ] ; then
	/bin/echo "You need an entry for bpjava-msvc in ${inetdfile}" >& 2
	bad_entry=1
fi
/bin/rm -f /tmp/bpjava_inetd.conf_${1}
grep bpjava-msvc ${inetdfile} >/tmp/bpjava_inetd.conf_${1}

if [ $bad_entry = 1 ] ; then
	exit 1
fi

# For some platform we also need to copy the java tools over and install them.
# and set up USE_APP_INITIALIZER in their .../java/nbj.conf

InstallJava=0
USE_APP_INITIALIZER=""
if [ "${class_os}" = "Solaris_x86_2.6" -o "${class_os}" = "Solaris_x86_7" -o "${class_os}" = "Solaris_x86_8" ] ; then
	InstallJava=1
	JRE_FILE=Solaris_X86_JRE_117B.tar.Z
elif [ "${class_os}" = "Solaris2.5" -o "${class_os}" = "Solaris2.6" -o "${class_os}" = "Solaris7" -o "${class_os}" = "Solaris8" ] ; then
	InstallJava=1
	JRE_FILE=Solaris_JRE_117B.tar.Z
elif [ "${class_os}" = "HP-UX10.20" ] ; then
	InstallJava=1
	JRE_FILE=hp1020_jre116.tar.Z
elif [ "${class_os}" = "HP-UX11.00" ] ; then 
	InstallJava=1
	JRE_FILE=hp110_jre116.tar.Z
	USE_APP_INITIALIZER="-Dvrts.nbu.admin.USE_APP_INITIALIZER=false"
fi

/bin/rm -f /tmp/bp_client_name_${1}
/bin/echo "CLIENT_NAME = ${1}" >/tmp/bp_client_name_${1}

# Build the ftp command list.
echo "${FTPUSER}" > /tmp/ftp_input.$$
echo "mkdir ${DEST_DIR}" >> /tmp/ftp_input.$$
echo "mkdir ${DEST_BIN}" >> /tmp/ftp_input.$$
echo "mkdir ${DEST_HELP}" >> /tmp/ftp_input.$$
echo "mkdir ${DEST_HELP_BP}" >> /tmp/ftp_input.$$
echo "cd ${DEST_DIR}" >> /tmp/ftp_input.$$
echo "put /tmp/bp_servers_${1} bp_servers" >> /tmp/ftp_input.$$
echo "put /tmp/bp_client_name_${1} bp_client_name" >> /tmp/ftp_input.$$
echo "cd ${DEST_BIN}" >> /tmp/ftp_input.$$
echo "put ${SOURCE_DIR}/version version" >> /tmp/ftp_input.$$
echo "put ${SOURCE_DIR}/client_config client_config" >> /tmp/ftp_input.$$
echo "put /tmp/bprd_service_${1} bprd_service" >> /tmp/ftp_input.$$
echo "put /tmp/bpcd_service_${1} bpcd_service" >> /tmp/ftp_input.$$
echo "put /tmp/vopied_service_${1} vopied_service" >> /tmp/ftp_input.$$
echo "put /tmp/bpjava_service_${1} bpjava_service" >> /tmp/ftp_input.$$
echo "put /tmp/bpcd_inetd.conf_${1} bpcd_inetd.cnf" >> /tmp/ftp_input.$$
echo "put /tmp/vopied_inetd.conf_${1} vopied_inetd.cnf" >> /tmp/ftp_input.$$
echo "put /tmp/bpjava_inetd.conf_${1} bpjava_inetd.cnf" >> /tmp/ftp_input.$$
if [ -f ${SOURCE_DIR}/methods.txt ] ; then
	echo "put ${SOURCE_DIR}/methods.txt methods.txt" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/template.methods_allow.txt ] ; then
	echo "put ${SOURCE_DIR}/template.methods_allow.txt template.methods_allow.txt" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/template.methods_deny.txt ] ; then
	echo "put ${SOURCE_DIR}/template.methods_deny.txt template.methods_deny.txt" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/template.names_allow.txt ] ; then
	echo "put ${SOURCE_DIR}/template.names_allow.txt template.names_allow.txt" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/template.names_deny.txt ] ; then
	echo "put ${SOURCE_DIR}/template.names_deny.txt template.names_deny.txt" >> /tmp/ftp_input.$$
fi
echo "type binary" >> /tmp/ftp_input.$$
echo "put ${SOURCE_DIR}/bp bp" >> /tmp/ftp_input.$$
echo "put ${SOURCE_DIR}/bpcd bpcd" >> /tmp/ftp_input.$$
echo "put ${SOURCE_DIR}/bpjava-msvc bpjava-msvc" >> /tmp/ftp_input.$$
echo "put ${SOURCE_DIR}/bpjava-usvc bpjava-usvc" >> /tmp/ftp_input.$$
echo "put ${SOURCE_DIR}/bpbkar bpbkar" >> /tmp/ftp_input.$$
echo "put ${SOURCE_DIR}/bpbackup bpbackup" >> /tmp/ftp_input.$$
echo "put ${SOURCE_DIR}/bprestore bprestore" >> /tmp/ftp_input.$$
echo "put ${SOURCE_DIR}/bplist bplist" >> /tmp/ftp_input.$$
echo "put ${SOURCE_DIR}/bpclimagelist bpclimagelist" >> /tmp/ftp_input.$$
echo "put ${SOURCE_DIR}/bpclntcmd bpclntcmd" >> /tmp/ftp_input.$$
if [ -f ${SOURCE_DIR}/bphdb ] ; then
	echo "put ${SOURCE_DIR}/bphdb bphdb" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/bpmount ] ; then
	echo "put ${SOURCE_DIR}/bpmount bpmount" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/rbak ] ; then
	echo "put ${SOURCE_DIR}/rbak rbak" >> /tmp/ftp_input.$$
elif [ -f ${SOURCE_DIR}/tar ] ; then
	echo "put ${SOURCE_DIR}/tar tar" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/vopied ] ; then
	echo "put ${SOURCE_DIR}/vopied vopied" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/vauth_util ] ; then
	echo "put ${SOURCE_DIR}/vauth_util vauth_util" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/vopie_util ] ; then
	echo "put ${SOURCE_DIR}/vopie_util vopie_util" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/libvnoauth.${DSO_SUFFIX} ] ; then
	echo "put ${SOURCE_DIR}/libvnoauth.${DSO_SUFFIX} libvnoauth.${DSO_SUFFIX}" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/libvopie.${DSO_SUFFIX} ] ; then
	echo "put ${SOURCE_DIR}/libvopie.${DSO_SUFFIX} libvopie.${DSO_SUFFIX}" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/merge_auth_templates ] ; then
	echo "put ${SOURCE_DIR}/merge_auth_templates merge_auth_templates" >> /tmp/ftp_input.$$
fi
if [ -f ${SOURCE_DIR}/xbp ] ; then
	echo "mkdir ${DEST_HELP_XBP}" >> /tmp/ftp_input.$$
	echo "put ${SOURCE_DIR}/XKeysymDB ${DEST_DIR}/XKeysymDB" >> /tmp/ftp_input.$$
	echo "put ${SOURCE_DIR}/xbp xbp" >> /tmp/ftp_input.$$
	echo "put ${BP_BIN}/XNB XNB" >> /tmp/ftp_input.$$
	echo "put ${BP_BIN}/XNB.dt XNB.dt" >> /tmp/ftp_input.$$
	echo "cd ${DEST_HELP_XBP}" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_XBP}/Confirm Confirm" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_XBP}/Config Config" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_XBP}/Altpath Altpath" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_XBP}/Help Help" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_XBP}/Index Index" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_XBP}/Main Main" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_XBP}/Progress Progress" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_XBP}/Tutorial Tutorial" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_XBP}/Viewselect Viewselect" >> /tmp/ftp_input.$$
fi
echo "cd ${DEST_HELP_BP}" >> /tmp/ftp_input.$$
echo "put ${BP_HELP_BP}/Archive Archive" >> /tmp/ftp_input.$$
echo "put ${BP_HELP_BP}/Backup Backup" >> /tmp/ftp_input.$$
echo "put ${BP_HELP_BP}/Help Help" >> /tmp/ftp_input.$$
echo "put ${BP_HELP_BP}/Index Index" >> /tmp/ftp_input.$$
echo "put ${BP_HELP_BP}/Main Main" >> /tmp/ftp_input.$$
echo "put ${BP_HELP_BP}/Restore_backup Restore_backup" >> /tmp/ftp_input.$$
echo "put ${BP_HELP_BP}/Restore_raw Restore_raw" >> /tmp/ftp_input.$$
echo "put ${BP_HELP_BP}/Restore_tir Restore_tir" >> /tmp/ftp_input.$$
echo "put ${BP_HELP_BP}/Restore_arch Restore_arch" >> /tmp/ftp_input.$$
echo "put ${BP_HELP_BP}/Tutorial Tutorial" >> /tmp/ftp_input.$$
if [ -f ${BP_HELP_BP}/Backup_Oracle ] ; then
	echo "put ${BP_HELP_BP}/Backup_Oracle Backup_Oracle" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_BP}/Backup_Infmx Backup_Infmx" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_BP}/Backup_Btrack Backup_Btrack" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_BP}/Backup_Sybase Backup_Sybase" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_BP}/Backup_Sap Backup_Sap" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_BP}/Backup_Db2 Backup_Db2" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_BP}/Restore_Oracle Restore_Oracle" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_BP}/Restore_Infmx Restore_Infmx" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_BP}/Restore_Btrack Restore_Btrack" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_BP}/Restore_Sybase Restore_Sybase" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_BP}/Restore_Sap Restore_Sap" >> /tmp/ftp_input.$$
	echo "put ${BP_HELP_BP}/Restore_Db2 Restore_Db2" >> /tmp/ftp_input.$$
fi
if [ $InstallJava = 1 ] ; then
	JAVA_FILE=NB-Java.tar.Z
	echo "mkdir ${DEST_JAVA_DIR}" >> /tmp/ftp_input.$$
	echo "cd ${DEST_DIR}" >> /tmp/ftp_input.$$
	echo "put ${OPENV_DIR}/${JAVA_FILE} ${JAVA_FILE}" >> /tmp/ftp_input.$$
	echo "cd ${DEST_JAVA_DIR}" >> /tmp/ftp_input.$$
	echo "put ${JAVA_DIR}/${JRE_FILE} ${JRE_FILE}" >> /tmp/ftp_input.$$
	if [ -f ${JAVA_DIR}/nbj.conf ] ; then
		grep -v CLIENT_HOST /usr/openv/java/nbj.conf | grep -v USE_APP_INITIALIZER > /tmp/JAVAnbj.conf.${1}
		echo "USE_APP_INITIALIZER=${USE_APP_INITIALIZER}" >> /tmp/JAVAnbj.conf.${1}
		echo "CLIENT_HOST=$1" >> /tmp/JAVAnbj.conf.${1}
		echo "put /tmp/JAVAnbj.conf.${1} nbj.conf" >> /tmp/ftp_input.$$
	fi
fi
echo "close" >> /tmp/ftp_input.$$
echo "quit" >> /tmp/ftp_input.$$

ftp ${1} < /tmp/ftp_input.$$ >/tmp/ftp_output_${1}

/bin/rm -f /tmp/ftp_input.$$ /tmp/bp_servers_${1} /tmp/bp_client_name_${1}
/bin/rm -f /tmp/bprd_service_${1} /tmp/bpcd_service_${1} /tmp/vopied_service_${1} /tmp/bpjava_service_${1}
/bin/rm -f /tmp/bpcd_inetd.conf_${1} /tmp/vopied_inetd.conf_${1} /tmp/bpjava_inetd.conf_${1}
rm -f /tmp/JAVAnbj.conf.${1}

/bin/echo ""

FTPSUCCESS=`grep "Please login with USER and PASS." /tmp/ftp_output_${1}`
if [ "${FTPSUCCESS}" != "" ] ; then
	/bin/echo "Ftp failed because of an invalid user name or password."
	exit 1
else
	FTPTIMEOUT=`grep "Not connected" /tmp/ftp_output_${1}`
	if [ "${FTPTIMEOUT}" != "" ] ; then
		/bin/echo "Ftp failed to connect to ${1}."
		exit 1
	else
		FTPTIMEOUT=`grep "No space left on device" /tmp/ftp_output_${1}`
		if [ "${FTPTIMEOUT}" != "" ] ; then
			/bin/echo "Ftp ran out of space in /tmp on ${1}."
			exit 1
		else
			/bin/echo "ftp completed successfully.

The root user on ${1} must now execute the command
\"sh /tmp/bp/bin/client_config [-L]\", the optional argument, \"-L\",
is used to avoid modification of the client's current bp.conf file."
		fi
	fi
fi

/bin/rm -f /tmp/ftp_output_${1}
