Rework source layout in preparation for modular sudo.
This commit is contained in:
227
install-sh
227
install-sh
@@ -1,227 +0,0 @@
|
||||
#! /bin/sh
|
||||
|
||||
## (From INN-1.4, written by Rich Salz)
|
||||
## $Revision$
|
||||
## 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/`basename $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
|
Reference in New Issue
Block a user