#!/bin/sh # Verify that mkdir's `-m MODE' option works properly # with various umask settings. if test "$VERBOSE" = yes; then set -x mkdir --version fi pwd=`pwd` tmp=perm.$$ trap 'status=$?; cd $pwd; chmod -R u+rwx $tmp; rm -rf $tmp && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 framework_failure=0 mkdir $tmp || framework_failure=1 cd $tmp || framework_failure=1 if test $framework_failure = 1; then echo 'failure in testing framework' (exit 1); exit fi fail=0 # parent parent/dir # umask -m option resulting perm resulting perm tests=' 000 : empty : drwxrwxrwx : drwxrwxrwx : 000 : -m 016 : drwxrwxrwx : d-----xrw- : 077 : empty : drwx------ : drwx------ : 050 : empty : drwx-w-rwx : drwx-w-rwx : 050 : -m 312 : drwx-w-rwx : d-wx--x-w- : 160 : empty : drwx--xrwx : drw---xrwx : 160 : -m 743 : drwx--xrwx : drwxr---wx : - : - : last : last : ' for p in empty -p; do test _$p = _empty && p= old_IFS=$IFS IFS=':' set - `(echo "$tests"|tr -d '\012'; echo)|sed 's/^ *//;s/ *:/:/g;s/: */:/g'` IFS=$old_IFS while :; do test "$VERBOSE" = yes && set -x umask=$1 mode=$2 parent_perms=$3 sub_perms=$4 test "_$mode" = _empty && mode= test $sub_perms = last && break # echo p=$p umask=$1 mode=$2 parent_perms=$3 sub_perms=$4 shift; shift; shift; shift umask $umask # If we're not using -p, then create the parent manually, # and adjust expectations accordingly. test x$p = x && \ { mkdir -m =,u=rwx parent || fail=1 parent_perms=drwx------ } mkdir $p $mode parent/sub || fail=1 perms=`ls -ld parent | sed 's/ .*//'` test "$parent_perms" = "$perms" \ || { fail=1; echo parent: expected $parent_perms, got $perms; } perms=`ls -ld parent/sub | sed 's/ .*//'` test "$sub_perms" = "$perms" \ || { fail=1; echo parent/sub: expected $sub_perms, got $perms; } chmod -R u+rwx parent rm -rf parent || fail=1 done done (exit $fail); exit