ID:               16121
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Feedback
+Status:           Closed
 Bug Type:         Sockets related
 Operating System: any
 PHP Version:      4.0.6
 Assigned To:      wez
 New Comment:

The new streams architecture now supports this; you can
try it out using a recent snap of CVS.
It won't be in PHP 4.2, but if you are happy making the
change you describe below to your local source, you
should be sorted.
I'm closing this; if you manage to test CVS and find it has
a problem, re-open this report.


Previous Comments:
------------------------------------------------------------------------

[2002-03-20 15:21:22] [EMAIL PROTECTED]

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...

------------------------------------------------------------------------

[2002-03-17 07:34:53] [EMAIL PROTECTED]

My man page for unix sockets says this:

If  sun_path  starts  with  a  zero  byte it refers to the
abstract namespace maintained by the Unix protocol module.
The  socket's  address  in  this namespace is given by the
rest of the bytes in sun_path.  Note  that  names  in  the
abstract namespace are not zero-terminated.

I'll integrate something that can handle this into the new
streams architecture; you might not be able to do this in
the PHP 4.2, but the release after will have it.

Do you know if this is linux-only or do other platforms
support it?



------------------------------------------------------------------------

[2002-03-16 21:56:41] [EMAIL PROTECTED]

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

------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=16121&edit=1

Reply via email to