[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: bug in [ -f file ] test
From: |
Piotr Grzybowski |
Subject: |
Re: bug in [ -f file ] test |
Date: |
Thu, 28 Jul 2016 20:19:02 +0200 |
ok, so if we now have discovered that it is +t that makes the difference and
also that it is not a bash bug, I wonder what kernel version are you running?
did Chet tests include sticky bit and the same kernel?
pg
On 28 Jul 2016, at 19:46, László Házy wrote:
> I did, and then everything works. Then, I set the sticky bit on the new
> directory containing the link (as /var/tmp has it), and the file status query
> does not work. So it is the sticky bit which prevents [[ -f file ]] from
> returning the correct status on a symlink for anyone else (even root) than
> the user who created the symlink. From my limited knowledge, the sticky bit
> is supposed to prevent file and directory removal, not status query. Am I
> missing something?
>
> Thanks.
>
>
>
> On Thu, 2016-07-28 at 19:12 +0200, Piotr Grzybowski wrote:
>> hi,
>>
>> could you move the test away from the tmp directory and try again, in some
>> other fresh dir?
>>
>> pg
>>
>> On 28 Jul 2016, at 18:52, László Házy wrote:
>>
>>
>>>
>>> Thanks for the effort Chet. Here are the results of some tests I have done,
>>> including what you requested. Note that I have SELinux as disabled.
>>>
>>> [root]$ getenforce
>>> Disabled
>>>
>>>
>>> [user1]# cat /home/user1/file
>>> This is file.
>>>
>>> [user2]# cat /home/user1/file
>>> This is file.
>>>
>>>
>>>
>>> [user1]# cat /var/tmp/link
>>> cat: /var/tmp/link: Permission denied
>>>
>>> [user2]$ cat /var/tmp/link
>>> This is file.
>>>
>>>
>>>
>>> [user1]$ stat /home/user1/file
>>> File: ‘/home/user1/file’
>>> Size: 14 Blocks: 8 IO Block: 4096 regular file
>>> Device: 803h/2051d Inode: 3414083 Links: 1
>>> Access: (0644/-rw-r--r--) Uid: ( 501/ user1) Gid: ( 100/ users)
>>> Access: 2016-07-28 12:08:34.186872745 -0400
>>> Modify: 2016-07-28 12:08:30.879845375 -0400
>>> Change: 2016-07-28 12:08:30.950845962 -0400
>>> Birth: -
>>>
>>> [user2]# stat /home/user1/file
>>> File: ‘/home/user1/file’
>>> Size: 14 Blocks: 8 IO Block: 4096 regular file
>>> Device: 803h/2051d Inode: 3414083 Links: 1
>>> Access: (0644/-rw-r--r--) Uid: ( 501/ user1) Gid: ( 100/ users)
>>> Access: 2016-07-28 12:08:34.186872745 -0400
>>> Modify: 2016-07-28 12:08:30.879845375 -0400
>>> Change: 2016-07-28 12:08:30.950845962 -0400
>>> Birth: -
>>>
>>>
>>>
>>> [user1]# stat /var/tmp/link
>>> File: ‘/var/tmp/link’ -> ‘/home/user1/file’
>>> Size: 17 Blocks: 0 IO Block: 4096 symbolic link
>>> Device: 808h/2056d Inode: 131183 Links: 1
>>> Access: (0777/lrwxrwxrwx) Uid: ( 500/ user2) Gid: ( 100/ users)
>>> Access: 2016-07-27 12:17:07.899994243 -0400
>>> Modify: 2016-07-27 12:17:07.398991028 -0400
>>> Change: 2016-07-27 12:17:07.398991028 -0400
>>> Birth: -
>>>
>>> [user2]# stat /var/tmp/link
>>> File: ‘/var/tmp/link’ -> ‘/home/user1/file’
>>> Size: 17 Blocks: 0 IO Block: 4096 symbolic link
>>> Device: 808h/2056d Inode: 131183 Links: 1
>>> Access: (0777/lrwxrwxrwx) Uid: ( 500/ user2) Gid: ( 100/ users)
>>> Access: 2016-07-27 12:17:07.899994243 -0400
>>> Modify: 2016-07-27 12:17:07.398991028 -0400
>>> Change: 2016-07-27 12:17:07.398991028 -0400
>>> Birth: -
>>>
>>>
>>>
>>> Then, I created the /home/user1/test.sh script with the following content:
>>> #!/bin/bash
>>>
>>> [[ -f /var/tmp/link ]]
>>> echo $?
>>>
>>> End of /home/user1/test.sh.
>>>
>>>
>>>
>>> [user1]$ strace ./test.sh
>>> execve("./test.sh", ["./test.sh"], [/* 59 vars */]) = 0
>>> brk(NULL) = 0x80d51000
>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>> 0xb77b5000
>>> access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or
>>> directory)
>>> open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
>>> fstat64(3, {st_mode=S_IFREG|0644, st_size=128315, ...}) = 0
>>> mmap2(NULL, 128315, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7795000
>>> close(3) = 0
>>> open("/lib/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3
>>> read(3,
>>> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220^\0\0004\0\0\0"...,
>>> 512) = 512
>>> fstat64(3, {st_mode=S_IFREG|0755, st_size=142888, ...}) = 0
>>> mmap2(NULL, 141008, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
>>> 0xb7772000
>>> mmap2(0xb7791000, 16384, PROT_READ|PROT_WRITE,
>>> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1f000) = 0xb7791000
>>> close(3) = 0
>>> open("/lib/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
>>> read(3,
>>> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220\n\0\0004\0\0\0"...,
>>> 512) = 512
>>> fstat64(3, {st_mode=S_IFREG|0755, st_size=18272, ...}) = 0
>>> mmap2(NULL, 16508, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
>>> 0xb776d000
>>> mmap2(0xb7770000, 8192, PROT_READ|PROT_WRITE,
>>> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0xb7770000
>>> close(3) = 0
>>> open("/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
>>> read(3,
>>> "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260\206\1\0004\0\0\0"...,
>>> 512) = 512
>>> fstat64(3, {st_mode=S_IFREG|0755, st_size=2125576, ...}) = 0
>>> mmap2(NULL, 1886780, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0)
>>> = 0xb75a0000
>>> mmap2(0xb7767000, 12288, PROT_READ|PROT_WRITE,
>>> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c7000) = 0xb7767000
>>> mmap2(0xb776a000, 10812, PROT_READ|PROT_WRITE,
>>> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb776a000
>>> close(3) = 0
>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>> 0xb759f000
>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>> 0xb759e000
>>> set_thread_area({entry_number:-1, base_addr:0xb759e700, limit:1048575,
>>> seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1,
>>> seg_not_present:0, useable:1}) = 0 (entry_number:6)
>>> mprotect(0xb7767000, 8192, PROT_READ) = 0
>>> mprotect(0xb7770000, 4096, PROT_READ) = 0
>>> mprotect(0xb7791000, 12288, PROT_READ) = 0
>>> mprotect(0x801be000, 8192, PROT_READ) = 0
>>> mprotect(0xb77dc000, 4096, PROT_READ) = 0
>>> munmap(0xb7795000, 128315) = 0
>>> open("/dev/tty", O_RDWR|O_NONBLOCK|O_LARGEFILE) = 3
>>> close(3) = 0
>>> brk(NULL) = 0x80d51000
>>> brk(0x80d72000) = 0x80d72000
>>> brk(NULL) = 0x80d72000
>>> open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
>>> fstat64(3, {st_mode=S_IFREG|0644, st_size=111950656, ...}) = 0
>>> mmap2(NULL, 2097152, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb739e000
>>> mmap2(NULL, 1253376, PROT_READ, MAP_PRIVATE, 3, 0x1079000) = 0xb726c000
>>> close(3) = 0
>>> getuid32() = 501
>>> getgid32() = 100
>>> geteuid32() = 501
>>> getegid32() = 100
>>> rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
>>> brk(NULL) = 0x80d72000
>>> open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3
>>> fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>> 0xb77b4000
>>> read(3, "MemTotal: 8239856 kB\nMemF"..., 1024) = 1024
>>> close(3) = 0
>>> munmap(0xb77b4000, 4096) = 0
>>> rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
>>> rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTART}, {SIG_DFL, [], SA_RESTART},
>>> 8) = 0
>>> rt_sigaction(SIGINT, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0
>>> rt_sigaction(SIGINT, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0
>>> rt_sigaction(SIGQUIT, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0
>>> rt_sigaction(SIGQUIT, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0
>>> rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
>>> rt_sigaction(SIGQUIT, {SIG_IGN, [], 0}, {SIG_DFL, [], 0}, 8) = 0
>>> uname({sysname="Linux", nodename="ws021", ...}) = 0
>>> rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
>>> open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3
>>> fstat64(3, {st_mode=S_IFREG|0644, st_size=26252, ...}) = 0
>>> mmap2(NULL, 26252, PROT_READ, MAP_SHARED, 3, 0) = 0xb77ae000
>>> close(3) = 0
>>> rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
>>> stat64("/home/user1", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
>>> stat64(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
>>> getpid() = 8430
>>> getppid() = 8428
>>> getpgrp() = 8428
>>> rt_sigaction(SIGCHLD, {0x80107930, [], SA_RESTART}, {SIG_DFL, [],
>>> SA_RESTART}, 8) = 0
>>> ugetrlimit(RLIMIT_NPROC, {rlim_cur=64221, rlim_max=64221}) = 0
>>> rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
>>> open("./test.sh", O_RDONLY|O_LARGEFILE) = 3
>>> ioctl(3, TCGETS, 0xbfaeb1ec) = -1 ENOTTY (Inappropriate ioctl
>>> for device)
>>> _llseek(3, 0, [0], SEEK_CUR) = 0
>>> read(3, "#!/bin/bash\n\n[[ -f /var/tmp/link"..., 80) = 45
>>> _llseek(3, 0, [0], SEEK_SET) = 0
>>> ugetrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=4*1024}) = 0
>>> fcntl64(255, F_GETFD) = -1 EBADF (Bad file descriptor)
>>> dup2(3, 255) = 255
>>> close(3) = 0
>>> fcntl64(255, F_SETFD, FD_CLOEXEC) = 0
>>> fcntl64(255, F_GETFL) = 0x8000 (flags
>>> O_RDONLY|O_LARGEFILE)
>>> fstat64(255, {st_mode=S_IFREG|0755, st_size=45, ...}) = 0
>>> _llseek(255, 0, [0], SEEK_CUR) = 0
>>> read(255, "#!/bin/bash\n\n[[ -f /var/tmp/link"..., 45) = 45
>>> stat64("/var/tmp/link", 0xbfaeb038) = -1 EACCES (Permission denied)
>>> fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0
>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>> 0xb77ad000
>>> write(1, "1\n", 21
>>> ) = 2
>>> read(255, "", 45) = 0
>>> rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
>>> rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
>>> exit_group(0) = ?
>>> +++ exited with 0 +++
>>>
>>>
>>> [user2]# cd /home/user1
>>> [user2]# strace ./test.sh
>>> execve("./test.sh", ["./test.sh"], [/* 58 vars */]) = 0
>>> brk(NULL) = 0x80d1c000
>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>> 0xb7778000
>>> access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or
>>> directory)
>>> open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
>>> fstat64(3, {st_mode=S_IFREG|0644, st_size=128315, ...}) = 0
>>> mmap2(NULL, 128315, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7758000
>>> close(3) = 0
>>> open("/lib/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3
>>> read(3,
>>> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220^\0\0004\0\0\0"...,
>>> 512) = 512
>>> fstat64(3, {st_mode=S_IFREG|0755, st_size=142888, ...}) = 0
>>> mmap2(NULL, 141008, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
>>> 0xb7735000
>>> mmap2(0xb7754000, 16384, PROT_READ|PROT_WRITE,
>>> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1f000) = 0xb7754000
>>> close(3) = 0
>>> open("/lib/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
>>> read(3,
>>> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220\n\0\0004\0\0\0"...,
>>> 512) = 512
>>> fstat64(3, {st_mode=S_IFREG|0755, st_size=18272, ...}) = 0
>>> mmap2(NULL, 16508, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
>>> 0xb7730000
>>> mmap2(0xb7733000, 8192, PROT_READ|PROT_WRITE,
>>> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0xb7733000
>>> close(3) = 0
>>> open("/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
>>> read(3,
>>> "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260\206\1\0004\0\0\0"...,
>>> 512) = 512
>>> fstat64(3, {st_mode=S_IFREG|0755, st_size=2125576, ...}) = 0
>>> mmap2(NULL, 1886780, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0)
>>> = 0xb7563000
>>> mmap2(0xb772a000, 12288, PROT_READ|PROT_WRITE,
>>> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c7000) = 0xb772a000
>>> mmap2(0xb772d000, 10812, PROT_READ|PROT_WRITE,
>>> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb772d000
>>> close(3) = 0
>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>> 0xb7562000
>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>> 0xb7561000
>>> set_thread_area({entry_number:-1, base_addr:0xb7561700, limit:1048575,
>>> seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1,
>>> seg_not_present:0, useable:1}) = 0 (entry_number:6)
>>> mprotect(0xb772a000, 8192, PROT_READ) = 0
>>> mprotect(0xb7733000, 4096, PROT_READ) = 0
>>> mprotect(0xb7754000, 12288, PROT_READ) = 0
>>> mprotect(0x801ba000, 8192, PROT_READ) = 0
>>> mprotect(0xb779f000, 4096, PROT_READ) = 0
>>> munmap(0xb7758000, 128315) = 0
>>> open("/dev/tty", O_RDWR|O_NONBLOCK|O_LARGEFILE) = 3
>>> close(3) = 0
>>> brk(NULL) = 0x80d1c000
>>> brk(0x80d3d000) = 0x80d3d000
>>> brk(NULL) = 0x80d3d000
>>> open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
>>> fstat64(3, {st_mode=S_IFREG|0644, st_size=111950656, ...}) = 0
>>> mmap2(NULL, 2097152, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7361000
>>> mmap2(NULL, 1253376, PROT_READ, MAP_PRIVATE, 3, 0x1079000) = 0xb722f000
>>> close(3) = 0
>>> getuid32() = 500
>>> getgid32() = 100
>>> geteuid32() = 500
>>> getegid32() = 100
>>> rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
>>> brk(NULL) = 0x80d3d000
>>> open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3
>>> fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>> 0xb7777000
>>> read(3, "MemTotal: 8239856 kB\nMemF"..., 1024) = 1024
>>> close(3) = 0
>>> munmap(0xb7777000, 4096) = 0
>>> rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTART}, {SIG_DFL, [], 0}, 8) = 0
>>> rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTART}, {SIG_DFL, [], SA_RESTART},
>>> 8) = 0
>>> rt_sigaction(SIGINT, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0
>>> rt_sigaction(SIGINT, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0
>>> rt_sigaction(SIGQUIT, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0
>>> rt_sigaction(SIGQUIT, {SIG_DFL, [], 0}, {SIG_DFL, [], 0}, 8) = 0
>>> rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
>>> rt_sigaction(SIGQUIT, {SIG_IGN, [], 0}, {SIG_DFL, [], 0}, 8) = 0
>>> uname({sysname="Linux", nodename="ws021", ...}) = 0
>>> rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
>>> open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3
>>> fstat64(3, {st_mode=S_IFREG|0644, st_size=26252, ...}) = 0
>>> mmap2(NULL, 26252, PROT_READ, MAP_SHARED, 3, 0) = 0xb7771000
>>> close(3) = 0
>>> rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
>>> stat64("/home/user1", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
>>> stat64(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
>>> getpid() = 8451
>>> getppid() = 8449
>>> getpgrp() = 8449
>>> rt_sigaction(SIGCHLD, {0x80103930, [], SA_RESTART}, {SIG_DFL, [],
>>> SA_RESTART}, 8) = 0
>>> ugetrlimit(RLIMIT_NPROC, {rlim_cur=64221, rlim_max=64221}) = 0
>>> rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
>>> open("./test.sh", O_RDONLY|O_LARGEFILE) = 3
>>> ioctl(3, TCGETS, 0xbff880dc) = -1 ENOTTY (Inappropriate ioctl
>>> for device)
>>> _llseek(3, 0, [0], SEEK_CUR) = 0
>>> read(3, "#!/bin/bash\n\n[[ -f /var/tmp/link"..., 80) = 45
>>> _llseek(3, 0, [0], SEEK_SET) = 0
>>> ugetrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=4*1024}) = 0
>>> fcntl64(255, F_GETFD) = -1 EBADF (Bad file descriptor)
>>> dup2(3, 255) = 255
>>> close(3) = 0
>>> fcntl64(255, F_SETFD, FD_CLOEXEC) = 0
>>> fcntl64(255, F_GETFL) = 0x8000 (flags
>>> O_RDONLY|O_LARGEFILE)
>>> fstat64(255, {st_mode=S_IFREG|0755, st_size=45, ...}) = 0
>>> _llseek(255, 0, [0], SEEK_CUR) = 0
>>> read(255, "#!/bin/bash\n\n[[ -f /var/tmp/link"..., 45) = 45
>>> stat64("/var/tmp/link", {st_mode=S_IFREG|0644, st_size=14, ...}) = 0
>>> fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 3), ...}) = 0
>>> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
>>> 0xb7770000
>>> write(1, "0\n", 20
>>> ) = 2
>>> read(255, "", 45) = 0
>>> rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
>>> rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
>>> exit_group(0) = ?
>>> +++ exited with 0 +++
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Wed, 2016-07-27 at 18:33 -0400, Chet Ramey wrote:
>>>
>>>>
>>>> On 7/27/16 3:34 PM, László Házy wrote:
>>>>
>>>>
>>>>>
>>>>>
>>>>> You have probably not done the first command: "[user1]$ chmod g+rx
>>>>> /home/user1". In my case, there is no access problem. I can ls and cd.
>>>>> Thing is, even root gets the wrong answer if it does the "is file?" query.
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> I performed that command, but I tore it all down and rebuilt it anyway.
>>>> Running a system call tracer (strace) shows that stat ("/var/tmp/link", )
>>>> returns -1 with errno == EACCES. `cat' displays "Permission Denied", and
>>>> `cp' says "cannot stat".
>>>>
>>>> What does strace show when you run it as user1 with a script that contains
>>>>
>>>> [[ -f /var/tmp/link ]]
>>>> echo $?
>>>>
>>>> ?
>>>>
>>>>
>>>>
>>>
>>
>>
>>
- Re: bug in [ -f file ] test, (continued)
- Re: bug in [ -f file ] test, László Házy, 2016/07/27
- Re: bug in [ -f file ] test, Chet Ramey, 2016/07/27
- Re: bug in [ -f file ] test, László Házy, 2016/07/27
- Re: bug in [ -f file ] test, Greg Wooledge, 2016/07/27
- Re: bug in [ -f file ] test, László Házy, 2016/07/27
- Re: bug in [ -f file ] test, Siteshwar Vashisht, 2016/07/28
- Re: bug in [ -f file ] test, László Házy, 2016/07/28
- Re: bug in [ -f file ] test, Chet Ramey, 2016/07/27
- Re: bug in [ -f file ] test, László Házy, 2016/07/28
- Message not available
- Re: bug in [ -f file ] test, László Házy, 2016/07/28
- Re: bug in [ -f file ] test,
Piotr Grzybowski <=
- Re: bug in [ -f file ] test, Chet Ramey, 2016/07/28
- Re: bug in [ -f file ] test, Chet Ramey, 2016/07/28
- Re: bug in [ -f file ] test, Charles Daffern, 2016/07/28
- Re: bug in [ -f file ] test, Piotr Grzybowski, 2016/07/28
- Re: bug in [ -f file ] test, László Házy, 2016/07/28
- Re: bug in [ -f file ] test, John McKown, 2016/07/28
- Re: bug in [ -f file ] test, László Házy, 2016/07/28
- Re: change in OS defaults (was: bug in [ -f file ] test), Linda Walsh, 2016/07/31