#!/bin/ksh

# $Id: patchPostInstall.sh 250 2009-10-14 23:19:51Z elkner $

JUMPSTART_FILES="/net/hathor/pool1/install/jumpstart/files"

Usage() {
	echo "
Usage: $0 [-h] [-R root_path]

Biegt Sachen, die Patchinstallationen normalerweise verbrechen (z.B. das
Ueberpinseln der sendmail.cf) wieder gerade. Sollte nach jeder Patch-
installation aufgerufen werden (jel's modifiziertes pca tut das am Ende
der Install-session automatisch).

   -h      .. diese Hilfe ausgeben und script beenden
   -R path .. path, where the global zone is lumounted. Default: /mnt
"
}

RPATH="/mnt"
while getopts "hR:" option ; do
	case "$option" in
		h) Usage ; exit 0 ;;
		R) RPATH="${OPTARG}";;
		*) print -u2 "Unbekannter Schalter $option" ; Usage ; exit 2 ;;
	esac
done

typeset -ft $(typeset +f)

# (C) Jens Elkner  [elkner@cs.uni-magdeburg.de]

REL=`uname -r`
[ "$REL" != "5.10" -a "$REL" != "5.11" ] && exit 0

if [ ! -d "${RPATH}/etc" ]; then
	echo "directory $RPATH/etc does not exist - forgot to lumount?"
	exit 1
fi
# If libtool is able to find an $lib.la it will pick up the pathes and 
# "required" libs from the $lib.la and links it into the target binary,
# as well as $lib.so, which might be found by the linker via LD_LIBRARY_PATH
# LD_RUN_PATH, -L and/or -R switches. So really stupid things may happen
# (linking libstd.so.5 and libstd.so.6 into the same binary) and that's
# why one should remove alll *.la files from a system. Developers know,
# how to use -R|-L and optional pkg-info may give them a hint, where the
# required libs are installed - no need at all for stupid *.la files!

if [ -d ${RPATH}/usr/sfw/lib ]; then
	rm -rf ${RPATH}/usr/sfw/lib/*.la >/dev/null 2>&1
	rm -rf ${RPATH}/usr/sfw/lib/sparcv9/*.la >/dev/null 2>&1
fi
if [ -d ${RPATH}/usr/lib/gtkhtml ]; then
	rm -rf ${RPATH}/usr/lib/gtkhtml/*.la >/dev/null 2>&1
fi

# sendmail patches overwrite the sendmail.cf and submit.cf - so restore
# out own configuration if required
adjustSendmail() {
	BASEDIR="$1"
	_ZONE="$2"
	_STATE="$3"
	RESTART=""
	SM="sendmail submit"
	# SUN sendmail installed - *.cf might have been overwritten
	for CF in $SM ; do
		if [ -r $BASEDIR/etc/mail/${CF}.cf -a -r $BASEDIR/etc/mail/local/${CF}.cf ]
		then
			cmp -s $BASEDIR/etc/mail/${CF}.cf $BASEDIR/etc/mail/local/${CF}.cf
			if [ $? -ne 0 ]; then
				cp -p $BASEDIR/etc/mail/${CF}.cf $BASEDIR/etc/mail/${CF}.cf.orig
				cp $BASEDIR/etc/mail/local/${CF}.cf $BASEDIR/etc/mail/${CF}.cf
				RESTART="yes"
			fi
		fi
	done
	if [ -n "$RESTART" -a "${_STATE}" = "running" ]; then
		if [ "$_ZONE" = "global" ]; then
			echo "Restarting sendmail for global zone"
			ZL=""
		else
			echo "Restarting sendmail for zone ${_ZONE}"
			ZL="/usr/sbin/zlogin ${_ZONE}"
		fi
		$ZL /usr/sbin/svcadm disable sendmail
		sleep 1
		$ZL /usr/sbin/svcadm enable sendmail
	fi
}

/usr/sbin/zoneadm -R "${RPATH}" list -pi | sed -e 's,:, ,g' | \
while read IDX ZONE STATE ZPATH REST ; do
	if [ "$ZONE" = "global" ]; then
		RP=""
	else
		RP="-R $ZPATH/root"
		ZPATH="$ZPATH/root"
	fi
	pkginfo -q ${RP} SUNWsndmu
	if [ $? -eq 0 ]; then
		adjustSendmail ${ZPATH} $ZONE $STATE
	fi
done

# GNOME patches wrt. Mozilla - only important for global zones, since there
# users are usually running GNOME

# *.desktop files
if [ `uname -r` = "5.10" ]; then
	APPDIR=${RPATH}/usr/share/applications
	FILES="jimregis.desktop runjim.desktop"
	for FILE in $FILES ; do
		[ -r $APPDIR/${FILE}.sav ] || touch $APPDIR/${FILE}.sav
		cmp -s $APPDIR/${FILE}.sav $APPDIR/${FILE}
		if [ $? -ne 0 ]; then
			# a patch changed the original
			cp -p $APPDIR/${FILE} $APPDIR/${FILE}.orig
			sed -e '/Exec=/ s,=.*$,=firefox,' \
				$APPDIR/${FILE} > $APPDIR/${FILE}.sav
			cp $APPDIR/${FILE}.sav $APPDIR/${FILE}
		fi
	done
fi

# *.schemas files
GCONF=/usr/bin/gconftool-2
SCHEMADIR=/etc/gconf/schemas
RSCHEMADIR="${RPATH}${SCHEMADIR}"
FUPDATE=""
if [ `uname -r` = "5.10" ]; then
	FILE="desktop_gnome_url_handlers.schemas"
	[ -r $RSCHEMADIR/${FILE}.sav ] || touch $RSCHEMADIR/${FILE}.sav
	cmp -s $RSCHEMADIR/${FILE}.sav $RSCHEMADIR/${FILE}
	if [ $? -ne 0 ]; then
		FUPDATE="${FUPDATE} ${FILE}"
		# a patch changed the original
		cp -p $RSCHEMADIR/${FILE} $RSCHEMADIR/${FILE}.orig
		gsed -i -e 's#/usr/sfw/bin/mozilla#firefox#' \
			-e 's#evolution %s#thunderbird "%s"#' \
			$RSCHEMADIR/${FILE}
	fi
else
	FILE="gnome-session.schemas"
	[ -r $RSCHEMADIR/${FILE}.sav ] || touch $RSCHEMADIR/${FILE}.sav
	cmp -s $RSCHEMADIR/${FILE}.sav $RSCHEMADIR/${FILE}
	if [ $? -ne 0 ]; then
		FUPDATE="${FUPDATE} ${FILE}"
		if [ -r "$JUMPSTART_FILES"/${FILE#.schemas}.xslt ]; then
			cp -p $RSCHEMADIR/${FILE} $RSCHEMADIR/${FILE}.orig
			sed -e 's/\&/\&amp;/g' $RSCHEMADIR/${FILE}.orig | \
			xsltproc --novalid "$JUMPSTART_FILES"/${FILE#.schemas}.xslt - | \
			sed -e 's/\&amp;/\&/g' >$RSCHEMADIR/${FILE}
		fi
	fi
fi
if [ -n "$FUPDATE" ]; then
	GCONF_CONFIG_SOURCE=`$GCONF --get-default-source`
	GCONF_CONFIG_SOURCE=${GCONF_CONFIG_SOURCE%xml::}
	GCONF_CONFIG_SOURCE="xml::${RPATH}${GCONF_CONFIG_SOURCE}"
	export GCONF_CONFIG_SOURCE
	for FILE in $FUPDATE ; do
		cp -p $RSCHEMADIR/${FILE} $RSCHEMADIR/${FILE}.sav
		$GCONF --makefile-uninstall-rule $RSCHEMADIR/${FILE}.orig
		$GCONF --makefile-install-rule $RSCHEMADIR/${FILE}
	done
fi
