Return to install-sh CVS log | Up to [local] / src / usr.bin / sudo |
File: [local] / src / usr.bin / sudo / Attic / install-sh (download)
Revision 1.8, Thu Jul 26 16:10:16 2007 UTC (16 years, 10 months ago) by millert
Update to sudo 1.6.9p1. Note that the environment handling in sudo 1.6.9 has changed relative to older versions. Sudo now starts commands with a minimal environment containing the variables in the env_keep and env_check lists. This behavior is configurable in the sudoers file. Please see the "SECURITY NOTES" section in the sudo manual. |
#! /bin/sh ## (From INN-1.4, written by Rich Salz) ## $Revision: 1.8 $ ## A script to install files and directories. PROGNAME=`basename $0` ## Paths to programs. CHOWN, STRIP and WHOAMI are checked below. CHOWN=chown CHGRP=chgrp CHMOD=chmod CP=cp LN=ln MKDIR=mkdir MV=mv RM=rm STRIP=strip WHOAMI="echo root" ## Some systems don't support -x, so we have to use -f. for d in /sbin /etc /usr/sbin /usr/etc; do if [ -f $d/chown ]; then CHOWN=${d}/chown break fi done for d in /usr/bin /bin /usr/ucb /usr/bsd; do if [ -f $d/whoami ]; then WHOAMI=${d}/whoami break elif [ -f $d/id ]; then WHOAMI=${d}/id | sed -n 's/^[^(]*(\([^)]*\)).*/\1/p' fi done for d in /usr/ccs/bin /usr/bin /bin; do if [ -f $d/strip ]; then STRIP=${d}/strip break fi done ## Defaults. CHOWNIT=false CHGROUPIT=false CHMODIT=false STRIPIT=false BACKIT=false TOUCHIT=true SAVESRC=false case `${WHOAMI}` in root) ROOT=true ;; *) ROOT=false ;; esac ## Process JCL. MORETODO=true while ${MORETODO} ; do case X"$1" in X-b) BACKIT=true BACKUP="$2" shift ;; X-b*) BACKIT=true BACKUP=`expr "$1" : '-b\(.*\)'` ;; X-c) SAVESRC=true ;; X-g) GROUP="$2" CHGROUPIT=true shift ;; X-g*) GROUP=`expr "$1" : '-g\(.*\)'` CHGROUPIT=true ;; X-G) GROUP="$2" shift ${ROOT} && CHGROUPIT=true ;; X-G*) if ${ROOT} ; then GROUP=`expr "$1" : '-g\(.*\)'` CHGROUPIT=true fi ;; X-m) MODE="$2" CHMODIT=true shift ;; X-m*) MODE=`expr "$1" : '-m\(.*\)'` CHMODIT=true ;; X-M) MODE="$2" ${ROOT} && CHMODIT=true shift ;; X-M*) MODE=`expr "$1" : '-m\(.*\)'` ${ROOT} && CHMODIT=true ;; X-n) TOUCHIT=false ;; X-o) OWNER="$2" CHOWNIT=true shift ;; X-o*) OWNER=`expr "$1" : '-o\(.*\)'` CHOWNIT=true ;; X-O) OWNER="$2" shift ${ROOT} && CHOWNIT=true ;; X-O*) if ${ROOT} ; then OWNER=`expr "$1" : '-o\(.*\)'` CHOWNIT=true fi ;; X-s) STRIPIT=true ;; X--) shift MORETODO=false ;; X-*) echo "${PROGNAME}: Unknown flag $1" 1>&2 exit 1 ;; *) MORETODO=false ;; esac ${MORETODO} && shift done ## Process arguments. if [ $# -ne 2 ] ; then echo "Usage: ${PROGNAME} [flags] source destination" exit 1 fi ## Making a directory? if [ X"$1" = X. ] ; then DEST="$2" if [ ! -d "${DEST}" ] ; then ${MKDIR} "${DEST}" || exit 1 fi if ${CHOWNIT} ; then ${CHOWN} "${OWNER}" "${DEST}" || exit 1 fi if ${CHGROUPIT} ; then ${CHGRP} "${GROUP}" "${DEST}" || exit 1 fi if ${CHMODIT} ; then umask 0 ${CHMOD} "${MODE}" "${DEST}" || exit 1 fi exit 0 fi ## Get the destination and a temp file in the destination diretory. if [ -d "$2" ] ; then DEST="$2/$1" TEMP="$2/$$.tmp" else DEST="$2" TEMP="`expr "$2" : '\(.*\)/.*'`/$$.tmp" fi ## If not given the same name, we must try to copy. if [ X"$1" != X"$2" -o $SAVESRC ] ; then if cmp -s "$1" "${DEST}" ; then ## Files are same; touch or not. ${TOUCHIT} && touch "${DEST}" else ## If destination exists and we wish to backup, link to backup. if [ -f "${DEST}" ] ; then if ${BACKIT} ; then ${RM} -f "${DEST}${BACKUP}" ${LN} "${DEST}" "${DEST}${BACKUP}" fi fi ## Copy source to the right dir, then move to right spot. ## Done in two parts so we can hope for atomicity. ${RM} -f "${TEMP}" || exit 1 ${CP} "$1" "${TEMP}" || exit 1 ${MV} -f "${TEMP}" "${DEST}" || exit 1 fi fi ## Strip and set the modes. if ${STRIPIT} ; then ${STRIP} "${DEST}" || exit 1 fi if ${CHOWNIT} ; then ${CHOWN} "${OWNER}" "${DEST}" || exit 1 fi if ${CHGROUPIT} ; then ${CHGRP} "${GROUP}" "${DEST}" || exit 1 fi if ${CHMODIT} ; then umask 0 ${CHMOD} "${MODE}" "${DEST}" || exit 1 fi exit 0