Updated support for unix socket in abstract namespace

Hi all,
attached there is an updated patch for adding support for unix socket in
abstract namespace.

As requested by Igor, the syntax is now

unix:\0foobar

instead of

unix:@foobar

The only relevant note is this part of code:

  • if (saun->sun_path[0] != ‘\0’) {
  •    u->addrs[0].socklen = sizeof(struct sockaddr_un);
    
  • }
  • else {
  •    u->addrs[0].socklen = sizeof(saun->sun_family) + len;
    
  • }

it looks like using

u->addrs[0].socklen = sizeof(saun->sun_family) + len;

is not reliable in all os (NetBSD and OpenBSD in my tests did not work)
so
i think
an exception (as i did) is more “secure”.

Probably, as linux is the only os supporting abstract namespace, we
could
use:

#ifdef linux
u->addrs[0].socklen = sizeof(saun->sun_family) + len;
#else
u->addrs[0].socklen = sizeof(struct sockaddr_un);
#endif

On Sat, Jun 04, 2011 at 07:27:07AM +0200, Roberto De Ioris wrote:

unix:@foobar

#ifdef linux
u->addrs[0].socklen = sizeof(saun->sun_family) + len;
#else
u->addrs[0].socklen = sizeof(struct sockaddr_un);
#endif

Thank you for the patch, I will look how to resolve this on all
platforms.
The one issue remains - how to log this address in error_log.
My first thought was to use “@foobar” as Linux does, but now I think
it’s better to create a name with slash “\0foobar”.


Igor S.

Probably, as linux is the only os supporting abstract namespace, we
The one issue remains - how to log this address in error_log.
My first thought was to use “@foobar” as Linux does, but now I think
it’s better to create a name with slash “\0foobar”.

I would suggest \0 for sure. Users can be fooled by different naming
scheme.
I have added support in uWSGI for \0 too, to avoid this sort of
problems.


Roberto De Ioris
http://unbit.it