.
[coreutils.git] / tests / mkdir / perm
blob3e18eab1a20a79c021ddd6b2778df8264ef33267
1 #!/bin/sh
2 # Verify that mkdir's `-m MODE' option works properly
3 # with various umask settings.
5 if test "$VERBOSE" = yes; then
6 set -x
7 mkdir --version
8 fi
10 pwd=`pwd`
11 t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$
12 trap 'status=$?; cd $pwd; chmod -R u+rwx $t0; rm -rf $t0 && exit $status' 0
13 trap '(exit $?); exit' 1 2 13 15
15 framework_failure=0
17 # Record absolute path of srcdir and cd back to current dir.
18 cd $srcdir || framework_failure=1
19 abs_srcdir=`pwd`
20 cd $pwd || framework_failure=1
22 mkdir -p $tmp || framework_failure=1
23 cd $tmp || framework_failure=1
25 if test $framework_failure = 1; then
26 echo 'failure in testing framework'
27 (exit 1); exit
30 . $abs_srcdir/../setgid-check
32 fail=0
34 # parent parent/dir
35 # umask -m option resulting perm resulting perm
36 tests='
37 000 : empty : drwxrwxrwx : drwxrwxrwx :
38 000 : -m 016 : drwxrwxrwx : d-----xrw- :
39 077 : empty : drwx------ : drwx------ :
40 050 : empty : drwx-w-rwx : drwx-w-rwx :
41 050 : -m 312 : drwx-w-rwx : d-wx--x-w- :
42 160 : empty : drwx--xrwx : drw---xrwx :
43 160 : -m 743 : drwx--xrwx : drwxr---wx :
44 - : - : last : last :
46 for p in empty -p; do
47 test _$p = _empty && p=
49 old_IFS=$IFS
50 IFS=':'
51 set - `(echo "$tests"|tr -d '\012'; echo)|sed 's/^ *//;s/ *:/:/g;s/: */:/g'`
52 IFS=$old_IFS
54 while :; do
55 test "$VERBOSE" = yes && set -x
56 umask=$1 mode=$2 parent_perms=$3 sub_perms=$4
57 test "_$mode" = _empty && mode=
58 test $sub_perms = last && break
59 # echo p=$p umask=$1 mode=$2 parent_perms=$3 sub_perms=$4
60 shift; shift; shift; shift
61 umask $umask
63 # If we're not using -p, then create the parent manually,
64 # and adjust expectations accordingly.
65 test x$p = x && \
67 mkdir -m =,u=rwx parent || fail=1
68 parent_perms=drwx------
71 mkdir $p $mode parent/sub || fail=1
73 perms=`ls -ld parent | sed 's/ .*//'`
74 test "$parent_perms" = "$perms" \
75 || { fail=1; echo parent: expected $parent_perms, got $perms; }
77 perms=`ls -ld parent/sub | sed 's/ .*//'`
78 test "$sub_perms" = "$perms" \
79 || { fail=1; echo parent/sub: expected $sub_perms, got $perms; }
81 chmod -R u+rwx parent
82 rm -rf parent || fail=1
83 done
84 done
86 (exit $fail); exit