OpenSolaris_b135/cmd/install.d/install.sh

#!/sbin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License, Version 1.0 only
# (the "License").  You may not use this file except in compliance
# with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T
#	  All Rights Reserved


#ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.12.1.1	*/

#	INSTALL COMMAND

FLIST=$ROOT/etc/syslist
DEFAULT="$ROOT/bin $ROOT/usr/bin $ROOT/etc $ROOT/lib $ROOT/usr/lib" FOUND="" MOVOLD=""
ECHO=echo PATH=/usr/bin FLAG=off
USAGE="eval echo 'usage: install [options] file [dir1 ...]'; exit 2"

if [ $# -lt 2 ] ; then
	$USAGE
fi

MFLAG=off
UFLAG=off
GFLAG=off

MODE=755
GRP=`expr "\`id\`" : ".*gid=[0-9]*(\(..*\)) .*"`
GROUP=`echo $GRP | sed -e 's/) fsid.*//p'`
OWN=`expr "\`id\`" : ".*uid=[0-9]*(\(..*\)) .*"`
OWNER=`echo $OWN | sed -e 's/) .*//p'`
if [ -z "$GROUP" ]
then
	GROUP=`expr "\`id\`" : ".*gid=\([0-9]*\).*"`
fi
if [ -z "$OWNER" ]
then
	OWNER=`expr "\`id\`" : ".*uid=\([0-9]*\).*"`
fi
if [ "$OWNER" = root ]
then
	ROOTFLAG=on
	OWNER=bin
	GROUP=bin
else
	ROOTFLAG=off
fi


for i in $*
do
	if [ $FLAG = on ]
	then
		case $i in
		    -*) echo "install: The -c, -f, -n options each require a directory following!"
			exit 2;;
		     *) FLAG=off
			continue;;
		esac
	fi
	case $i in
	    -c) if [ x$ARG = x-d -o x$ARG = x-f ]
		then
			echo "install: -c dir: illegal option with $ARG option!"
			exit 2
	        elif [ x$arg = x-i -o x$arg = x-o -o x$arg = x-n ]
		then
			echo "install: -c dir: illegal option with $arg option!"
			exit 2
		elif test $# -lt 3
		then
			echo "install: -c option must have at least 3 args!"
			exit 2
		else
			direct=$2
			FLAG=on
			ARG=-c
			shift; shift
		fi;;
	    -f) if [ x$ARG = x-d -o x$ARG = x-c ]
		then
			echo "install: -f dir: illegal option with $ARG option!"
			exit 2
		elif [ x$arg = x-i -o x$arg = x-n ]
		then
			echo "install: -f dir: illegal option with $arg option!"
			exit 2
		elif test $# -lt 3
		then
			echo "install: -f option must have at least 3 args!"
			exit 2
		else
			direct=$2
			FLAG=on
			ARG=-f
			shift; shift
		fi;;
	  -i) if [ x$ARG = x-d -o x$ARG  = x-c -o x$ARG = x-f ]
		then
			echo "install: -i: illegal option with $ARG option!"
			exit 2
		elif test $# -lt 3
		then
			echo "install: -i option requires at least 3 args!"
			exit 2
		else
			DEFAULT=""
			arg=-i
			shift
		fi;;
	    -o) if  [ x$ARG = x-d -o x$ARG = x-c ]
		then
			echo "install: -o: illegal option with $ARG option!"
			exit 2
		elif test $# -lt 2
		then
			$USAGE
		else
			MOVOLD=yes
			arg=-o
			shift
		fi;;
	    -n) if [ x$ARG = x-d -o x$ARG = x-c -o x$ARG = x-f ]
		then
			echo "install: -n dir: illegal option with $ARG option!"
			exit 2
		elif test $# -lt 3
		then
			echo "install: -n option requires at least 3 args!"
			exit 2
		else
			LASTRES=$2
			FLAG=on
			FOUND=n
			arg=-n
			shift; shift
		fi;;
	    -d) if [ x$ARG = x-c -o x$ARG = x-f ]
		then
			echo "install: -d: illegal option with $ARG option!"
			exit 2
		elif [ x$arg = x-i -o x$arg = x-o -o x$arg = x-n ]
		then
			echo "install: -d: illegal option with $arg option!"
			exit 2
		else
			ARG=-d
			shift
		fi;;
	    -s) if test $# -lt 2
		then
			$USAGE
		else
			ECHO=:
			shift
		fi;;
	    -u) if [ $ROOTFLAG = off ]
		then
			echo "install: -u option available only to root -- ignored"
		else
			OWNER=$2
			UFLAG=on
			$ECHO new owner is $OWNER
		fi
		FLAG=on
		shift; shift;;
	    -g) if [ $ROOTFLAG = off ]
		then
			echo "install: -g option available only to root -- ignored"
		else
			GROUP=$2
			GFLAG=on
		fi
		FLAG=on
		shift; shift;;
	    -m) MODE=$2
		MFLAG=on
		FLAG=on
		shift; shift;;
	     *) break;;
	esac
done


if [ x$ARG = x-d ]
then
	if [ ! -d $i ]
	then
		mkdir -p $i
		if [ $? = 0 ]
		then
			$ECHO "directory $i created"
			chgrp $GROUP $i
			chown $OWNER $i
			chmod $MODE $i
		else
			echo "install: mkdir $i failed "
		fi
	else
		chgrp $GROUP $i
		chown $OWNER $i
		chmod $MODE $i
	fi
	exit
fi

FILEP=$i FILE=`echo $i | sed -e "s/.*\///"`
if [ x$ARG = x-c -o x$ARG = x-f ]
then
	case $2 in
		-*) $USAGE ;;
		"") :	;;
	esac
	if test -f $direct/$FILE -o -f $direct/$FILE/$FILE
	then
		case $ARG in
			-c) echo "install: $FILE already exists in $direct"
			    exit 2;;
			-f) GRP=`ls -l $direct/$FILE | awk '{print $4}'`
			    OWN=`ls -l $direct/$FILE | awk '{print $3}'`
			    if [ "$MOVOLD" = yes ]
			    then
				mv -f $direct/$FILE $direct/OLD$FILE
				cp $direct/OLD$FILE $direct/$FILE
				if [ $? = 0 ]
				then
				   $ECHO "$FILE moved to $direct/OLD$FILE"
				else
				   echo "install: mv $direct/OLD$FILE $direct/$FILE failed"
				   exit 2
				fi
			    fi
			    if cp $FILEP $direct/$FILE
			    then
				chgrp $GRP $direct/$FILE
				chown $OWN $direct/$FILE

				if [ "$GFLAG" = on ]
				then	
					chgrp $GROUP $direct/$FILE
				fi
				if [ "$MFLAG" = on ]
				then
					chmod $MODE $direct/$FILE
				fi
				if [ "$UFLAG" = on ]
				then
					chown $OWNER $direct/$FILE
				fi

				$ECHO "$FILEP installed as $direct/$FILE"
			    else
				echo "install: cp $FILEP $direct/$FILE failed "
				exit 2
			    fi
			    exit;;
		esac
	else
		cp $FILEP $direct/$FILE
		if [ $? = 0 ]
		then
			$ECHO "$FILEP installed as $direct/$FILE"
			chgrp $GROUP $direct/$FILE
			chown $OWNER $direct/$FILE
			chmod $MODE $direct/$FILE
		else
			echo "install: cp $FILEP $direct/$FILE failed "
			exit 2
		fi
	fi
	exit
fi

shift

PUTHERE=""
for i in $*
do
	case $i in
		-*) $USAGE ;;
	esac
	PUTHOLD=`find $i -follow -name $FILE -type f -print`
	PUTHERE=`expr "\`echo $PUTHOLD\`" : '\([^ ]*\)'`
	if [ "$PUTHERE" != "" ]
	then break
	fi
done
if [ -r $FLIST -a "$PUTHERE" = "" ]
then
	PUTHERE=`grep "/${FILE}$" $FLIST | sed  -n -e '1p'`
	if [ "$PUTHERE" != "" -a "$ROOT" != "" ]
	then
		PUTHERE=${ROOT}${PUTHERE}
	fi
fi
if [ "$PUTHERE" = "" ]
then
	for i in $DEFAULT
	do
		PUTHOLD=`find $i -follow -name $FILE -type f -print`
		PUTHERE=`expr "\`echo $PUTHOLD\`" : '\([^ ]*\)'`
		if [ "$PUTHERE" != "" ]
		then break
		fi
	done
fi
if [ "$PUTHERE" != "" ]
then
		    GRP=`ls -l $PUTHERE | awk '{print $4}'`
		    OWN=`ls -l $PUTHERE | awk '{print $3}'`
		    if [ "$MOVOLD" = yes ]
		    then
			old=`echo $PUTHERE | sed -e "s/\/[^\/]*$//"`
			mv -f $PUTHERE $old/OLD$FILE
			cp $old/OLD$FILE $PUTHERE
			if [ $? = 0 ]
			then
				    $ECHO "old $FILE moved to $old/OLD$FILE"
			else
				   echo "install: cp $direct/OLD$FILE $direct/$FILE failed"
				    exit 2
			fi
		    fi
		    FOUND=y
		    if cp $FILEP $PUTHERE
		    then
			chgrp $GRP $PUTHERE
			chown $OWN $PUTHERE

			if [ "$GFLAG" = on ]
			then	
				chgrp $GROUP $PUTHERE
			fi
			if [ "$MFLAG" = on ]
			then
				chmod $MODE $PUTHERE
			fi
			if [ "$UFLAG" = on ]
			then
				chown $OWNER $PUTHERE
			fi

			$ECHO "$FILEP installed as $PUTHERE"
			break
		    else
			exit 2
		    fi
fi

case $FOUND in
	"") echo "install: $FILE was not found anywhere!"
	    exit 2;;
	 y) :	;;
	 n) cp $FILEP $LASTRES/$FILE
	    if [ $? = 0 ]
	    then
		$ECHO "$FILEP installed as $LASTRES/$FILE by default!"
		cd $LASTRES
		chgrp $GROUP $FILE
		chown $OWNER $FILE
		chmod $MODE $FILE
	    else
		echo "install: cp $FILEP $LASTRES/$FILE failed"
		exit 2
	    fi;;
esac