[PATH] support for UNIX socket in abstract namespace

Roberto De Ioris roberto at unbit.it
Mon May 23 22:17:46 MSD 2011


> On Mon, May 23, 2011 at 07:42:02PM +0200, Roberto De Ioris wrote:
>>
>> > On Mon, May 23, 2011 at 04:18:30PM +0200, Roberto De Ioris wrote:
>> >> (Warning this is Linux only)
>> >>
>> >> Hi all, the attached path adds support for unix socket in abstract
>> >> namespace.
>> >> They are special sockets without filesystem correspondence (so you
>> can
>> >> use
>> >> them without thinking about permissions or in chroot). In netstat
>> they
>> >> are
>> >> reported with a '@' prefix.
>> >>
>> >> For example (using uWSGI):
>> >>
>> >> uwsgi -s @funnysock
>> >>
>> >> netstat -l
>> >>
>> >> unix  2      [ ACC ]     STREAM     LISTENING     23813    @funnysock
>> >>
>> >> After applying the patch you can connect to it with
>> >>
>> >> uwsgi_pass unix:@funnysock;
>> >>
>> >> I hope it can be useful
>> >
>> > Thank you for the feature. I think it's better to allow nginx
>> > configuration
>> > parser to support "\0" as binary 0. Then this socket may be set as
>> >
>> > uwsgi_pass   unix:\0funnysock;
>> >
>>
>> I fear it will require changes changes as 0 being the token delimeter in
>> config parsing :(
>
> Could you test the attached patch ?


This is the same code i made after you suggestion, but in the url parsing
code (ngx_parse_unix_domain_url), ngx_cpystrn() is used and it takes '\0'
in account.

Changing ngx_cpystrn to not use \0 fixes the problem. Probably
substituting it with ngx_memcpy is the way to go.

Another thing to do is "fixing"

u->addrs[0].socklen = sizeof(struct sockaddr_un);

to

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



-- 
Roberto De Ioris
http://unbit.it



More information about the nginx mailing list