Bug #16121 Updated: fsockopen can't handle unix sockets created in abstract namespace

From: Date: Wed, 20 Mar 2002 20:21:23 +0000
Subject: Bug #16121 Updated: fsockopen can't handle unix sockets created in abstract namespace
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-2994@lists.php.net to get a copy of this message
ID: 16121 Updated by: mathias@taschenorakel.de Reported By: mathias@taschenorakel.de Status: Feedback Bug Type: Sockets related Operating System: any PHP Version: 4.0.6 Assigned To: wez New Comment: 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... Previous Comments: ------------------------------------------------------------------------ [2002-03-17 07:34:53] wez@php.net 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] mathias@taschenorakel.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 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=16121&edit=1

« previous php.bugs (#2994) next »