[BACK]Return to install-sh CVS log [TXT][DIR] Up to [local] / src / usr.bin / sudo

Annotation of src/usr.bin/sudo/install-sh, Revision 1.4

1.1       millert     1: #! /bin/sh
                      2:
                      3: ## (From INN-1.4, written by Rich Salz)
1.4     ! millert     4: ##  $Revision: 1.7 $
1.1       millert     5: ##  A script to install files and directories.
                      6:
                      7: PROGNAME=`basename $0`
                      8:
                      9: ##  Paths to programs.  CHOWN, STRIP and WHOAMI are checked below.
                     10: CHOWN=chown
                     11: CHGRP=chgrp
                     12: CHMOD=chmod
                     13: CP=cp
                     14: LN=ln
                     15: MKDIR=mkdir
                     16: MV=mv
                     17: RM=rm
                     18: STRIP=strip
                     19: WHOAMI=whoami
                     20:
                     21: ##  Some systems don't support -x, so we have to use -f.
1.4     ! millert    22: for d in /sbin /etc /usr/sbin /usr/etc; do
        !            23:     if [ -f $d/chown ]; then
        !            24:        CHOWN=${d}/chown
        !            25:        break
1.1       millert    26:     fi
1.4     ! millert    27: done
1.1       millert    28:
1.4     ! millert    29: for d in /usr/bin /usr/ucb /usr/bsd; do
        !            30:     if [ -f $d/whoami ]; then
        !            31:        WHOAMI=${d}/whoami
        !            32:        break
1.1       millert    33:     fi
1.4     ! millert    34: done
        !            35: if [ X"$WHOAMI" = X"" ]; then
        !            36:     WHOAMI=id | sed -n 's/^[^(]*(\([^)]*\)).*/\1/p'
1.1       millert    37: fi
                     38:
1.4     ! millert    39: for d in /usr/ccs/bin /usr/bin; do
        !            40:     if [ -f $d/strip ]; then
        !            41:        STRIP=${d}/strip
        !            42:        break
1.1       millert    43:     fi
1.4     ! millert    44: done
1.1       millert    45:
                     46: ##  Defaults.
                     47: CHOWNIT=false
                     48: CHGROUPIT=false
                     49: CHMODIT=false
                     50: STRIPIT=false
                     51: BACKIT=false
                     52: TOUCHIT=true
                     53: SAVESRC=false
1.4     ! millert    54:
        !            55: case `${WHOAMI}` in
        !            56: root)
        !            57:     ROOT=true
        !            58:     ;;
        !            59: *)
        !            60:     ROOT=false
        !            61:     ;;
        !            62: esac
1.1       millert    63:
                     64: ##  Process JCL.
                     65: MORETODO=true
                     66: while ${MORETODO} ; do
                     67:     case X"$1" in
                     68:     X-b)
                     69:        BACKIT=true
                     70:        BACKUP="$2"
                     71:        shift
                     72:        ;;
                     73:     X-b*)
                     74:        BACKIT=true
                     75:        BACKUP=`expr "$1" : '-b\(.*\)'`
                     76:        ;;
                     77:     X-c)
                     78:        SAVESRC=true
                     79:        ;;
                     80:     X-g)
                     81:        GROUP="$2"
                     82:        CHGROUPIT=true
                     83:        shift
                     84:        ;;
                     85:     X-g*)
                     86:        GROUP=`expr "$1" : '-g\(.*\)'`
                     87:        CHGROUPIT=true
                     88:        ;;
                     89:     X-G)
                     90:        GROUP="$2"
                     91:        shift
                     92:        ${ROOT} && CHGROUPIT=true
                     93:        ;;
                     94:     X-G*)
                     95:        if ${ROOT} ; then
                     96:            GROUP=`expr "$1" : '-g\(.*\)'`
                     97:            CHGROUPIT=true
                     98:        fi
                     99:        ;;
                    100:     X-m)
                    101:        MODE="$2"
                    102:        CHMODIT=true
                    103:        shift
                    104:        ;;
                    105:     X-m*)
                    106:        MODE=`expr "$1" : '-m\(.*\)'`
                    107:        CHMODIT=true
                    108:        ;;
1.4     ! millert   109:     X-M)
        !           110:        MODE="$2"
        !           111:        ${ROOT} && CHMODIT=true
        !           112:        shift
        !           113:        ;;
        !           114:     X-M*)
        !           115:        MODE=`expr "$1" : '-m\(.*\)'`
        !           116:        ${ROOT} && CHMODIT=true
        !           117:        ;;
1.1       millert   118:     X-n)
                    119:        TOUCHIT=false
                    120:        ;;
                    121:     X-o)
                    122:        OWNER="$2"
                    123:        CHOWNIT=true
                    124:        shift
                    125:        ;;
                    126:     X-o*)
                    127:        OWNER=`expr "$1" : '-o\(.*\)'`
                    128:        CHOWNIT=true
                    129:        ;;
                    130:     X-O)
                    131:        OWNER="$2"
                    132:        shift
                    133:        ${ROOT} && CHOWNIT=true
                    134:        ;;
                    135:     X-O*)
                    136:        if ${ROOT} ; then
                    137:            OWNER=`expr "$1" : '-o\(.*\)'`
                    138:            CHOWNIT=true
                    139:        fi
                    140:        ;;
                    141:     X-s)
                    142:        STRIPIT=true
                    143:        ;;
                    144:     X--)
                    145:        shift
                    146:        MORETODO=false
                    147:        ;;
                    148:     X-*)
                    149:        echo "${PROGNAME}:  Unknown flag $1" 1>&2
                    150:        exit 1
                    151:        ;;
                    152:     *)
                    153:        MORETODO=false
                    154:        ;;
                    155:     esac
                    156:     ${MORETODO} && shift
                    157: done
                    158:
                    159: ##  Process arguments.
                    160: if [ $# -ne 2 ] ; then
                    161:     echo "Usage:  ${PROGNAME} [flags] source destination"
                    162:     exit 1
                    163: fi
                    164:
                    165: ##  Making a directory?
                    166: if [ X"$1" = X. ] ; then
                    167:     DEST="$2"
                    168:     if [ ! -d "${DEST}" ] ; then
                    169:        ${MKDIR} "${DEST}" || exit 1
                    170:     fi
                    171:     if ${CHOWNIT} ; then
                    172:        ${CHOWN} "${OWNER}" "${DEST}" || exit 1
                    173:     fi
                    174:     if ${CHGROUPIT} ; then
                    175:        ${CHGRP} "${GROUP}" "${DEST}" || exit 1
                    176:     fi
                    177:     if ${CHMODIT} ; then
                    178:        umask 0
                    179:        ${CHMOD} "${MODE}"  "${DEST}" || exit 1
                    180:     fi
                    181:     exit 0
                    182: fi
                    183:
                    184: ##  Get the destination and a temp file in the destination diretory.
                    185: if [ -d "$2" ] ; then
                    186:     DEST="$2/$1"
                    187:     TEMP="$2/$$.tmp"
                    188: else
                    189:     DEST="$2"
                    190:     TEMP="`expr "$2" : '\(.*\)/.*'`/$$.tmp"
                    191: fi
                    192:
                    193: ##  If not given the same name, we must try to copy.
                    194: if [ X"$1" != X"$2" -o $SAVESRC ] ; then
                    195:     if cmp -s "$1" "${DEST}" ; then
                    196:        ##  Files are same; touch or not.
                    197:        ${TOUCHIT} && touch "${DEST}"
                    198:     else
                    199:        ##  If destination exists and we wish to backup, link to backup.
                    200:        if [ -f "${DEST}" ] ; then
                    201:            if ${BACKIT} ; then
                    202:                ${RM} -f "${DEST}${BACKUP}"
                    203:                ${LN} "${DEST}" "${DEST}${BACKUP}"
                    204:            fi
                    205:        fi
                    206:        ##  Copy source to the right dir, then move to right spot.
                    207:        ##  Done in two parts so we can hope for atomicity.
                    208:        ${RM} -f "${TEMP}" || exit 1
                    209:        ${CP} "$1" "${TEMP}" || exit 1
                    210:        ${MV} -f "${TEMP}" "${DEST}" || exit 1
                    211:     fi
                    212: fi
                    213:
                    214: ##  Strip and set the modes.
                    215: if ${STRIPIT} ; then
                    216:     ${STRIP} "${DEST}" || exit 1
                    217: fi
                    218: if ${CHOWNIT} ; then
                    219:     ${CHOWN} "${OWNER}" "${DEST}" || exit 1
                    220: fi
                    221: if ${CHGROUPIT} ; then
                    222:     ${CHGRP} "${GROUP}" "${DEST}" || exit 1
                    223: fi
                    224: if ${CHMODIT} ; then
                    225:     umask 0
                    226:     ${CHMOD} "${MODE}"  "${DEST}" || exit 1
                    227: fi
                    228: exit 0