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

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