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

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