#!/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` t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$ trap 'status=$?; cd $pwd; chmod -R u+rwx $t0; rm -rf $t0 && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 framework_failure=0 # Record absolute path of srcdir and cd back to current dir. cd $srcdir || framework_failure=1 abs_srcdir=`pwd` cd $pwd || framework_failure=1 mkdir -p $tmp || framework_failure=1 cd $tmp || framework_failure=1 if test $framework_failure = 1; then echo 'failure in testing framework' (exit 1); exit 1 fi . $abs_srcdir/../setgid-check . $abs_srcdir/../umask-check 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 : 027 : -m =+x : drwxr-x--- : d--x--x--- : - : - : last : last : ' colon_tests=`echo $tests | sed 's/^ *//; s/ *: */:/g'` for p in empty -p; do test _$p = _empty && p= old_IFS=$IFS IFS=':' set $colon_tests 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/ .*//; s/+$//'` test "$parent_perms" = "$perms" \ || { fail=1; echo parent: expected $parent_perms, got $perms; } perms=`ls -ld parent/sub | sed 's/ .*//; 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 $fail