Paul, I modified the C program slightly (just to better understand what's going on) and ran it like this:
-----mkdir-test.c------------------------------ #include <sys/stat.h> int main (void) { umask (022); mkdir ("acl-test/dir-022-777", 0777); mkdir ("acl-test/dir-022-755", 0755); umask (0); mkdir ("acl-test/dir-0-777", 0777); mkdir ("acl-test/dir-0-755", 0755); return 0; } -----mkdir-test.c------------------------------ What I learned was that the umask() lines had no affect on the effective rights mask of the inherited ACLs, but the mode did. The 0777 mkdir lines all inherited the default mask (rwx) properly and the 0755 lines inherited the mask as (r-x). To eliminate kernel and filesystem differences I brought the coreutils-5.97 package up to the same distro level (Slackware-current) and also tested on both ReiserFS (my original filesystem) and ext3. There were no differences in behaviors between ReiserFS and ext3 in any of my tests, so I won't mention them anymore. There was a difference in the coreutils versions however... Not in the behavior of the C program calls, but in the way that "mkdir -p" constructs those calls from the shell. So, if I understand your last note correctly, the following should be equivalent: umask (022); mkdir ("acl-test/dir-777", 0777); ...and... umask (0); mkdir ("acl-test/dir-755", 0755); With "mkdir -p", the 5.97 coreutils constructs the calls with the umask 022 + mkdir 0777 method and 6.10 uses the umask 0 + mkdir 0755 method. In 6.10, with my shell environment umask at 022, mkdir -p gives: umask(0) = 022 mkdir("acl-test", 0755) = -1 EEXIST (File exists) chdir("acl-test") = 0 mkdir("mkdir-p", 0755) = 0 ...and the inherited ACL mask is wrong. In 5.97, with my shell environment umask at 022, mkdir -p gives: umask(0) = 022 umask(022) = 0 stat64("acl-test/mkdir-p", 0xbfca8134) = -1 ENOENT (No such file or directory) umask(0) = 022 open(".", O_RDONLY|O_LARGEFILE) = 3 mkdir("acl-test", 0755) = -1 EEXIST (File exists) chdir("acl-test") = 0 umask(022) = 0 mkdir("mkdir-p", 0777) = 0 ...and the inherited ACL mask is correct. So if the shell command "mkdir" under version 6.10 uses 0777 in its system call, maybe "mkdir -p" should as well? At least for newly created dirs? I've attached traces for "mkdir -p" and the C code that I called "mkdir-test.c" for both 5.97 and 6.10 versions of coreutils. Thanks, CJM
mkdir-5.97-vs-6.10-traces.tgz
Description: Binary data
_______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils