[PATCH] Unix domain sockets in abstract namespace

Dirk Feytons dirk.feytons at gmail.com
Fri Sep 21 07:28:16 UTC 2012

On Wed, Sep 19, 2012 at 3:56 PM, Maxim Dounin <mdounin at mdounin.ru> wrote:
> Hello!
> On Wed, Sep 12, 2012 at 11:46:52AM +0200, Dirk Feytons wrote:
>> Hi,
>> I was playing around with ngx_lua and its socket API, which is built
>> on top of nginx functionality. The API supports unix domain sockets
>> but not in the abstract namespace, at least not officially. When I
>> tried specifying an abstract address I found it didn't work. I tracked
>> it down to two calls to ngx_cpystrn() in
>> core/ngx_inet.c:ngx_parse_unix_domain_url(). That function gets
>> confused by the leading '\0' in an abstract namespace address.
> This is because the abstract namespace is actually linux extension
> to unix domain sockets, "The abstract socket namespace is a
> nonportable Linux extension" (from [1]).
> Strictly speaking, it's not something even permitted by POSIX as
> socket path ends with first null byte as per POSIX.

Yeah; I know it's Linux specific. Too bad in my opinion; I find it
easier to work with than the regular namespace.

>> Changing it to ngx_memcpy() fixes this and then everything works.
>> I attached a patch agains nginx 1.2.3. The fix seems trivial but this
>> is my first look into the nginx internals so I don't know whether
>> there are unwanted side effects from this change. Feedback welcome.
> I suspect there may be some, in particular during logging of
> errors and probably while parsing untrusted urls.

Okay, I'll have a look at the code again.
Are you willing to accept a patch to support the abstract namespace?
Or does the fact that it's a nonportable Linux extension make it a
no-go for inclusion in nginx?

> [1] http://www.kernel.org/doc/man-pages/online/pages/man7/unix.7.html

Thanks for the feedback.

Dirk F.

More information about the nginx-devel mailing list