42 lines
1.6 KiB
Diff
42 lines
1.6 KiB
Diff
--- nginx-1.4.1/src/event/ngx_event_accept.c 2013-05-06 03:26:50.000000000 -0700
|
|
+++ nginx-1.4.1-patched/src/event/ngx_event_accept.c 2013-07-10 13:05:02.001249099 -0700
|
|
@@ -269,17 +269,28 @@ ngx_event_accept(ngx_event_t *ev)
|
|
#endif
|
|
|
|
if (ls->addr_ntop) {
|
|
- c->addr_text.data = ngx_pnalloc(c->pool, ls->addr_text_max_len);
|
|
- if (c->addr_text.data == NULL) {
|
|
- ngx_close_accepted_connection(c);
|
|
- return;
|
|
- }
|
|
+ if (socklen > sizeof(c->sockaddr->sa_family)) {
|
|
+ c->addr_text.data = ngx_pnalloc(c->pool, ls->addr_text_max_len);
|
|
+ if (c->addr_text.data == NULL) {
|
|
+ ngx_close_accepted_connection(c);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ c->addr_text.len = ngx_sock_ntop(c->sockaddr, c->addr_text.data,
|
|
+ ls->addr_text_max_len, 0);
|
|
+ if (c->addr_text.len == 0) {
|
|
+ ngx_close_accepted_connection(c);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ } else {
|
|
+ /*
|
|
+ * Linux accept/accept4 syscalls, for example, do not return
|
|
+ * address data upon unix domain sockets
|
|
+ */
|
|
|
|
- c->addr_text.len = ngx_sock_ntop(c->sockaddr, c->addr_text.data,
|
|
- ls->addr_text_max_len, 0);
|
|
- if (c->addr_text.len == 0) {
|
|
- ngx_close_accepted_connection(c);
|
|
- return;
|
|
+ c->addr_text.data = NULL;
|
|
+ c->addr_text.len = 0;
|
|
}
|
|
}
|
|
|