Re: Re: Still having lstat trouble
| From: | Scott MacVicar | Date: | Wed, 23 May 2007 22:34:25 +0000 |
| Subject: | Re: Re: Still having lstat trouble | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-29708@lists.php.net to get a copy of this message | ||
Miscopied, a full strace is:
lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
lstat64("/tmp/pear", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
access("/tmp/pear", F_OK) = 0
time(NULL) = 1179959483
lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
lstat64("/tmp/link-test", {st_mode=S_IFLNK|0777, st_size=9, ...}) = 0
readlink("/tmp/link-test", "/tmp/pear", 4096) = 9
lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
lstat64("/tmp/pear", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
access("/tmp/pear", F_OK) = 0
unlink("/tmp/link-test") = 0
time(NULL) = 1179959483
lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
lstat64("/tmp/link-test", 0xbff2137c) = -1 ENOENT (No such file or directory)
time(NULL) = 1179959483lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0 lstat64("/tmp/pear", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 symlink("/tmp/pear", "/tmp/link-test") = 0
time(NULL) = 1179959483lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0 lstat64("/tmp/link-test", {st_mode=S_IFLNK|0777, st_size=9, ...}) = 0 readlink("/tmp/link-test", "/tmp/pear", 4096) = 9 lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0 lstat64("/tmp/pear", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat64("/tmp/pear", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
write(1, "dir", 3dir) = 3write(1, "\n", 1
) = 1 write(1, "not a link", 10not a link) = 10write(1, "\n", 1
) = 1 time(NULL) = 1179959483lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0 lstat64("/tmp/pear", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 stat64("/tmp/pear", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
write(1, "same", 4same) = 4SELinux is disabled on the box. Scott Rasmus Lerdorf wrote:
lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0 lstat64("/tmp/link-test", 0xbff229ec) = -1 ENOENT (No such file or directory) lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0 lstat64("/tmp/pear", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 symlink("/tmp/pear", "/tmp/link-test") = 0 lstat64("/tmp/link-test", {st_mode=S_IFLNK|0777, st_size=9, ...}) = 0write(1, "link", 4link) = 4write(1, "\n", 1) = 1 write(1, "link", 4link) = 4write(1, "\n", 1) = 1stat64("/tmp/pear", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0write(1, "differ", 6differ) = 6Scott MacVicar wrote:I'm getting similar results from a RHEL 4 box we have here, its running 5.2.3-dev. scott@scarlet [/tmp] # cat /etc/redhat-release Red Hat Enterprise Linux ES release 4 (Nahant Update 4) scott@scarlet [~] # uname -a Linux scarlet 2.6.9-42.0.2.ELsmp #1 SMP Thu Aug 17 18:00:32 EDT 2006 i686 i686 i386 GNU/Linux scott@scarlet [/tmp] # php test.php dir not a link same strace for the during execution is. lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0 lstat64("/tmp/link-test", {st_mode=S_IFLNK|0777, st_size=9, ...}) = 0That means /tmp/link-test exists already, otherwise lstat returns -1. Here is what I see if the link already exists when I run my script:access("/tmp/pear", F_OK) = 0 access("/tmp/link-test", F_OK) = 0 unlink("/tmp/link-test") = 0lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0 lstat64("/tmp/link-test", 0xbff229ec) = -1 ENOENT (No such file or directory) lstat64("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0 lstat64("/tmp/pear", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 symlink("/tmp/pear", "/tmp/link-test") = 0 lstat64("/tmp/link-test", {st_mode=S_IFLNK|0777, st_size=9, ...}) = 0write(1, "link", 4link) = 4write(1, "\n", 1) = 1 write(1, "link", 4link) = 4write(1, "\n", 1) = 1stat64("/tmp/pear", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0write(1, "differ", 6differ) = 6So did you leave out those access() calls, and did they fail, or did the unlink() fail perhaps? -Rasmus