#!/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; 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 : :drwxrwxrwx:drwxrwxrwx: 000 : -m 016 :drwxrwxrwx:d-----xrw-: 077 : :drwx------:drwx------: 050 : :drwx-w-rwx:drwx-w-rwx: 050 : -m 312 :drwx-w-rwx:d-wx--x-w-: 160 : :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 - $tests IFS=$old_IFS while :; do test "$VERBOSE" = yes && set -x umask=$1 mode=$2 parent_perms=$3 sub_perms=$4 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