Forum: NGINX support for UNIX socket in abstract namespace

Posted by Roberto De Ioris (Guest)
on 2011-05-23 16:19
Attachment: unix_abstract.patch (1,03 KB)
(Received via mailing list)
(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
Posted by Igor Sysoev (Guest)
on 2011-05-23 18:36
(Received via mailing list)
On Mon, May 23, 2011 at 04:18:30PM +0200, Roberto De Ioris wrote:
>
> 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;


--
Igor Sysoev
Posted by Roberto De Ioris (Guest)
on 2011-05-23 19:43
(Received via mailing list)
>>
>> 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 :(


--
Roberto De Ioris
http://unbit.it
Posted by Roberto De Ioris (Guest)
on 2011-05-23 19:44
(Received via mailing list)
>>> 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



i mean "heavy changes"



--
Roberto De Ioris
http://unbit.it
Posted by Igor Sysoev (Guest)
on 2011-05-23 19:49
(Received via mailing list)
On Mon, May 23, 2011 at 07:42:02PM +0200, Roberto De Ioris wrote:
> >> reported with a '@' prefix.
> >>
>
> I fear it will require changes changes as 0 being the token delimeter in
> config parsing :(

No, nginx does not use zero-trailing strings.


--
Igor Sysoev
Posted by Igor Sysoev (Guest)
on 2011-05-23 19:52
Attachment: patch.zero (542 Bytes)
(Received via mailing list)
On Mon, May 23, 2011 at 07:42:02PM +0200, Roberto De Ioris wrote:
> >> reported with a '@' prefix.
> >>
>
> I fear it will require changes changes as 0 being the token delimeter in
> config parsing :(

Could you test the attached patch ?
Posted by Roberto De Ioris (Guest)
on 2011-05-23 20:18
(Received via mailing list)
>> >> them without thinking about permissions or in chroot). In netstat
>> >> unix  2      [ ACC ]     STREAM     LISTENING     23813    @funnysock
>> >
>> > 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
Posted by Igor Sysoev (Guest)
on 2011-05-23 20:38
(Received via mailing list)
On Mon, May 23, 2011 at 08:17:46PM +0200, Roberto De Ioris wrote:
> 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;

nxg_memcpy should work here.


--
Igor Sysoev
Posted by nri.pl (Guest)
on 2012-09-17 09:05
(Received via mailing list)
In addition to this discussion, I found this:
http://forum.nginx.org/read.php?29,230660,230660

I wonder if this patch is included in the main code?
I could not use unix domain sockets in abstract namespace, like this:
unix:@socket_name
nor:
unix:\0socket_name

in nginx/1.3.6

What are the chances of include this patch, where is the problem?

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?2,200086,230765#msg-230765
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.