#!/bin/sh # Verify that mkdir's `-m MODE' option works properly # with various umask settings. # Copyright (C) 2000, 2002, 2003, 2004, 2005, 2006 Free Software # Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. 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--- : 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