|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2002-03-16 21:56 UTC] mathias at taschenorakel dot de
fsockopen can't handle unix sockets created in abstract namespace (unix sockets with the associated pathname starting with '\0'; see UNIX(4) of the 'Linux Programmer's Manual' for details).
This bug is 'caused since the implementation of fsockopen in PHP 4.0.6 uses strlcpy to copy from $hostname to unix_addr.sun_path without looking at the first byte of $hostname (fsock.c, line 240). One possible solution would be to change line 240 from
strlcpy(unix_addr.sun_path, (*args[0])->value.str.val,
sizeof(unix_addr.sun_path));
to
pathofs = ((*args[0])->value.str.val[0] ? 0 : 1);
strlcpy(unix_addr.sun_path + pathofs,
(*args[0])->value.str.val + pathofs,
sizeof(unix_addr.sun_path) - pathofs);
where pathofs would be of type "size_t".
Another solution avoiding the ugly '\0' byte would be to introduce separate scheme prefixes like "file:" and "abstract:" for UNIX domain sockets.
Ciao,
Mathias
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 29 10:00:01 2025 UTC |
Great, that you are going to integrate something like that. Yes, unfortunatly this feature appears to be linux-only :-/ ('ve read man pages and wrote test code on SunOS 5.8, IRIX 3, FreeBSD 4.3 and MacOS X 10.1). Nevertheless it's a cool feature since Linux removes abdoned Unix sockets of the abstract namespace automatically -- you don't have to take care about removing Unix sockets, don't need clever code to figure out weither a unix socket file belongs to a vital daemon or just is left over...