[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.3.6.1

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