nginxtra 1.2.3.7 → 1.2.4.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/bin/nginxtra +1 -1
  2. data/bin/nginxtra_rails +1 -1
  3. data/lib/nginxtra/version.rb +1 -1
  4. data/vendor/nginx/CHANGES +28 -0
  5. data/vendor/nginx/CHANGES.ru +27 -0
  6. data/vendor/nginx/auto/install +1 -1
  7. data/vendor/nginx/auto/lib/libatomic/make +1 -1
  8. data/vendor/nginx/auto/lib/perl/make +1 -1
  9. data/vendor/nginx/auto/lib/zlib/makefile.bcc +5 -3
  10. data/vendor/nginx/auto/lib/zlib/makefile.msvc +5 -2
  11. data/vendor/nginx/auto/lib/zlib/makefile.owc +2 -2
  12. data/vendor/nginx/html/50x.html +14 -11
  13. data/vendor/nginx/html/index.html +19 -2
  14. data/vendor/nginx/src/core/nginx.c +1 -1
  15. data/vendor/nginx/src/core/nginx.h +2 -2
  16. data/vendor/nginx/src/core/ngx_conf_file.c +1 -2
  17. data/vendor/nginx/src/core/ngx_conf_file.h +1 -0
  18. data/vendor/nginx/src/core/ngx_crypt.c +9 -2
  19. data/vendor/nginx/src/core/ngx_cycle.c +8 -8
  20. data/vendor/nginx/src/core/ngx_radix_tree.c +1 -1
  21. data/vendor/nginx/src/core/ngx_resolver.c +9 -9
  22. data/vendor/nginx/src/core/ngx_slab.c +2 -2
  23. data/vendor/nginx/src/core/ngx_string.c +1 -1
  24. data/vendor/nginx/src/core/ngx_string.h +1 -1
  25. data/vendor/nginx/src/core/ngx_times.c +4 -0
  26. data/vendor/nginx/src/event/ngx_event.c +1 -1
  27. data/vendor/nginx/src/http/modules/ngx_http_fastcgi_module.c +3 -0
  28. data/vendor/nginx/src/http/modules/ngx_http_geo_module.c +14 -5
  29. data/vendor/nginx/src/http/modules/ngx_http_geoip_module.c +10 -1
  30. data/vendor/nginx/src/http/modules/ngx_http_limit_conn_module.c +4 -0
  31. data/vendor/nginx/src/http/modules/ngx_http_limit_req_module.c +7 -4
  32. data/vendor/nginx/src/http/modules/ngx_http_map_module.c +4 -18
  33. data/vendor/nginx/src/http/modules/ngx_http_ssi_filter_module.c +1 -0
  34. data/vendor/nginx/src/http/modules/perl/nginx.pm +1 -1
  35. data/vendor/nginx/src/http/ngx_http_core_module.c +11 -10
  36. data/vendor/nginx/src/http/ngx_http_write_filter_module.c +7 -11
  37. data/vendor/nginx/src/mail/ngx_mail.c +11 -0
  38. data/vendor/nginx/src/mail/ngx_mail_auth_http_module.c +1 -1
  39. data/vendor/nginx/src/mail/ngx_mail_core_module.c +22 -12
  40. data/vendor/nginx/src/mail/ngx_mail_handler.c +0 -2
  41. data/vendor/nginx/src/os/unix/ngx_files.c +1 -1
  42. metadata +3 -3
data/bin/nginxtra CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "rubygems"
3
- gem "nginxtra", "= 1.2.3.7"
3
+ gem "nginxtra", "= 1.2.4.7"
4
4
  gem "thor", "~> 0.16.0"
5
5
  require "nginxtra"
6
6
  Nginxtra::CLI.start
data/bin/nginxtra_rails CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "rubygems"
3
- gem "nginxtra", "= 1.2.3.7"
3
+ gem "nginxtra", "= 1.2.4.7"
4
4
  gem "thor", "~> 0.16.0"
5
5
  require "nginxtra"
6
6
  Nginxtra::Rails::CLI.start
@@ -2,7 +2,7 @@ module Nginxtra
2
2
  class Version
3
3
  class << self
4
4
  def to_s
5
- "1.2.3.7"
5
+ "1.2.4.7"
6
6
  end
7
7
  end
8
8
  end
data/vendor/nginx/CHANGES CHANGED
@@ -1,4 +1,32 @@
1
1
 
2
+ Changes with nginx 1.2.4 25 Sep 2012
3
+
4
+ *) Bugfix: in the "limit_req" directive; the bug had appeared in 1.1.14.
5
+ Thanks to Charles Chen.
6
+
7
+ *) Bugfix: nginx could not be built by gcc 4.7 with -O2 optimization if
8
+ the --with-ipv6 option was used.
9
+
10
+ *) Bugfix: a segmentation fault might occur in a worker process if the
11
+ "map" directive was used with variables as values.
12
+
13
+ *) Bugfix: a segmentation fault might occur in a worker process if the
14
+ "geo" directive was used with the "ranges" parameter but without the
15
+ "default" parameter; the bug had appeared in 0.8.43.
16
+ Thanks to Zhen Chen and Weibin Yao.
17
+
18
+ *) Bugfix: in the -p command-line parameter handling.
19
+
20
+ *) Bugfix: in the mail proxy server.
21
+
22
+ *) Bugfix: of minor potential bugs.
23
+ Thanks to Coverity.
24
+
25
+ *) Bugfix: nginx/Windows could not be built with Visual Studio 2005
26
+ Express.
27
+ Thanks to HAYASHI Kentaro.
28
+
29
+
2
30
  Changes with nginx 1.2.3 07 Aug 2012
3
31
 
4
32
  *) Feature: the Clang compiler support.
@@ -1,4 +1,31 @@
1
1
 
2
+ Изменения в nginx 1.2.4 25.09.2012
3
+
4
+ *) Исправление: в директиве "limit_req"; ошибка появилась в 1.1.14.
5
+ Спасибо Charles Chen.
6
+
7
+ *) Исправление: nginx не собирался gcc 4.7 с оптимизацией -O2 если
8
+ использовался параметр --with-ipv6.
9
+
10
+ *) Исправление: в рабочем процессе мог произойти segmentation fault,
11
+ если в директиве map в качестве значений использовались переменные.
12
+
13
+ *) Исправление: в рабочем процессе мог произойти segmentation fault при
14
+ использовании директивы geo с параметром ranges, но без параметра
15
+ default; ошибка появилась в 0.8.43.
16
+ Спасибо Zhen Chen и Weibin Yao.
17
+
18
+ *) Исправление: в обработке параметра командной строки -p.
19
+
20
+ *) Исправление: в почтовом прокси-сервере.
21
+
22
+ *) Исправление: незначительных потенциальных ошибок.
23
+ Спасибо Coverity.
24
+
25
+ *) Исправление: nginx/Windows не собирался с Visual Studio 2005 Express.
26
+ Спасибо HAYASHI Kentaro.
27
+
28
+
2
29
  Изменения в nginx 1.2.3 07.08.2012
3
30
 
4
31
  *) Добавление: поддержка компилятора Clang.
@@ -8,7 +8,7 @@ if [ $USE_PERL = YES ]; then
8
8
  cat << END >> $NGX_MAKEFILE
9
9
 
10
10
  install_perl_modules:
11
- cd $NGX_OBJS/src/http/modules/perl && \${MAKE} install
11
+ cd $NGX_OBJS/src/http/modules/perl && \$(MAKE) install
12
12
  END
13
13
 
14
14
  NGX_INSTALL_PERL_MODULES=install_perl_modules
@@ -6,7 +6,7 @@
6
6
  cat << END >> $NGX_MAKEFILE
7
7
 
8
8
  $NGX_LIBATOMIC/src/libatomic_ops.a: $NGX_LIBATOMIC/Makefile
9
- cd $NGX_LIBATOMIC && \${MAKE}
9
+ cd $NGX_LIBATOMIC && \$(MAKE)
10
10
 
11
11
  $NGX_LIBATOMIC/Makefile: $NGX_MAKEFILE
12
12
  cd $NGX_LIBATOMIC && ./configure
@@ -12,7 +12,7 @@ $NGX_OBJS/src/http/modules/perl/blib/arch/auto/nginx/nginx.so: \
12
12
  $NGX_OBJS/src/http/modules/perl/Makefile
13
13
  cp -p src/http/modules/perl/nginx.* $NGX_OBJS/src/http/modules/perl/
14
14
 
15
- cd $NGX_OBJS/src/http/modules/perl && \${MAKE}
15
+ cd $NGX_OBJS/src/http/modules/perl && \$(MAKE)
16
16
 
17
17
  rm -rf $NGX_OBJS/install_perl
18
18
 
@@ -8,8 +8,10 @@ CFLAGS = -q -O2 -tWM -w-8004 -w-8012 $(CPU_OPT)
8
8
  zlib.lib:
9
9
  cd $(ZLIB)
10
10
 
11
- bcc32 -c $(CFLAGS) adler32.c crc32.c deflate.c trees.c zutil.c \
12
- compress.c
11
+ bcc32 -c $(CFLAGS) adler32.c crc32.c deflate.c \
12
+ trees.c zutil.c compress.c \
13
+ inflate.c inffast.c inftrees.c
13
14
 
14
15
  tlib zlib.lib +adler32.obj +crc32.obj +deflate.obj \
15
- +trees.obj +zutil.obj +compress.obj
16
+ +trees.obj +zutil.obj +compress.obj \
17
+ +inflate.obj +inffast.obj +inftrees.obj
@@ -8,7 +8,10 @@ CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT)
8
8
  zlib.lib:
9
9
  cd $(ZLIB)
10
10
 
11
- cl -c $(CFLAGS) adler32.c crc32.c deflate.c trees.c zutil.c compress.c
11
+ cl -c $(CFLAGS) adler32.c crc32.c deflate.c \
12
+ trees.c zutil.c compress.c \
13
+ inflate.c inffast.c inftrees.c
12
14
 
13
15
  link -lib -out:zlib.lib adler32.obj crc32.obj deflate.obj \
14
- trees.obj zutil.obj compress.obj
16
+ trees.obj zutil.obj compress.obj \
17
+ inflate.obj inffast.obj inftrees.obj
@@ -9,6 +9,6 @@ zlib.lib:
9
9
  cd $(ZLIB)
10
10
 
11
11
  wcl386 -c $(CFLAGS) adler32.c crc32.c deflate.c trees.c zutil.c &
12
- compress.c
12
+ compress.c inflate.c inffast.c inftrees.c
13
13
  wlib -n zlib.lib adler32.obj crc32.obj deflate.obj trees.obj &
14
- zutil.obj compress.obj
14
+ zutil.obj compress.obj inflate.obj inffast.obj inftrees.obj
@@ -1,18 +1,21 @@
1
+ <!DOCTYPE html>
1
2
  <html>
2
3
  <head>
3
- <title>The page is temporarily unavailable</title>
4
+ <title>Error</title>
4
5
  <style>
5
- body { font-family: Tahoma, Verdana, Arial, sans-serif; }
6
+ body {
7
+ width: 35em;
8
+ margin: 0 auto;
9
+ font-family: Tahoma, Verdana, Arial, sans-serif;
10
+ }
6
11
  </style>
7
12
  </head>
8
- <body bgcolor="white" text="black">
9
- <table width="100%" height="100%">
10
- <tr>
11
- <td align="center" valign="middle">
12
- The page you are looking for is temporarily unavailable.<br/>
13
- Please try again later.
14
- </td>
15
- </tr>
16
- </table>
13
+ <body>
14
+ <h1>An error occurred.</h1>
15
+ <p>Sorry, the page you are looking for is currently unavailable.<br/>
16
+ Please try again later.</p>
17
+ <p>If you are the system administrator of this resource then you should check
18
+ the <a href="http://nginx.org/r/error_log">error log</a> for details.</p>
19
+ <p><em>Faithfully yours, nginx.</em></p>
17
20
  </body>
18
21
  </html>
@@ -1,8 +1,25 @@
1
+ <!DOCTYPE html>
1
2
  <html>
2
3
  <head>
3
4
  <title>Welcome to nginx!</title>
5
+ <style>
6
+ body {
7
+ width: 35em;
8
+ margin: 0 auto;
9
+ font-family: Tahoma, Verdana, Arial, sans-serif;
10
+ }
11
+ </style>
4
12
  </head>
5
- <body bgcolor="white" text="black">
6
- <center><h1>Welcome to nginx!</h1></center>
13
+ <body>
14
+ <h1>Welcome to nginx!</h1>
15
+ <p>If you see this page, the nginx web server is successfully installed and
16
+ working. Further configuration is required.</p>
17
+
18
+ <p>For online documentation and support please refer to
19
+ <a href="http://nginx.org/">nginx.org</a>.<br/>
20
+ Commercial support is available at
21
+ <a href="http://nginx.com/">nginx.com</a>.</p>
22
+
23
+ <p><em>Thank you for using nginx.</em></p>
7
24
  </body>
8
25
  </html>
@@ -836,7 +836,7 @@ ngx_process_options(ngx_cycle_t *cycle)
836
836
  len = ngx_strlen(ngx_prefix);
837
837
  p = ngx_prefix;
838
838
 
839
- if (!ngx_path_separator(*p)) {
839
+ if (len && !ngx_path_separator(p[len - 1])) {
840
840
  p = ngx_pnalloc(cycle->pool, len + 1);
841
841
  if (p == NULL) {
842
842
  return NGX_ERROR;
@@ -9,8 +9,8 @@
9
9
  #define _NGINX_H_INCLUDED_
10
10
 
11
11
 
12
- #define nginx_version 1002003
13
- #define NGINX_VERSION "1.2.3"
12
+ #define nginx_version 1002004
13
+ #define NGINX_VERSION "1.2.4"
14
14
  #define NGINX_VER "nginx/" NGINX_VERSION
15
15
 
16
16
  #define NGINX_VAR "NGINX"
@@ -12,7 +12,6 @@
12
12
 
13
13
  static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last);
14
14
  static ngx_int_t ngx_conf_read_token(ngx_conf_t *cf);
15
- static char *ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
16
15
  static ngx_int_t ngx_conf_test_full_name(ngx_str_t *name);
17
16
  static void ngx_conf_flush_files(ngx_cycle_t *cycle);
18
17
 
@@ -731,7 +730,7 @@ ngx_conf_read_token(ngx_conf_t *cf)
731
730
  }
732
731
 
733
732
 
734
- static char *
733
+ char *
735
734
  ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
736
735
  {
737
736
  char *rv;
@@ -317,6 +317,7 @@ char *ngx_conf_check_num_bounds(ngx_conf_t *cf, void *post, void *data);
317
317
 
318
318
  char *ngx_conf_param(ngx_conf_t *cf);
319
319
  char *ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename);
320
+ char *ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
320
321
 
321
322
 
322
323
  ngx_int_t ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name,
@@ -194,6 +194,7 @@ static ngx_int_t
194
194
  ngx_crypt_ssha(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
195
195
  {
196
196
  size_t len;
197
+ ngx_int_t rc;
197
198
  ngx_str_t encoded, decoded;
198
199
  ngx_sha1_t sha1;
199
200
 
@@ -204,12 +205,18 @@ ngx_crypt_ssha(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
204
205
  encoded.data = salt + sizeof("{SSHA}") - 1;
205
206
  encoded.len = ngx_strlen(encoded.data);
206
207
 
207
- decoded.data = ngx_pnalloc(pool, ngx_base64_decoded_length(encoded.len));
208
+ len = ngx_max(ngx_base64_decoded_length(encoded.len), 20);
209
+
210
+ decoded.data = ngx_pnalloc(pool, len);
208
211
  if (decoded.data == NULL) {
209
212
  return NGX_ERROR;
210
213
  }
211
214
 
212
- ngx_decode_base64(&decoded, &encoded);
215
+ rc = ngx_decode_base64(&decoded, &encoded);
216
+
217
+ if (rc != NGX_OK || decoded.len < 20) {
218
+ decoded.len = 20;
219
+ }
213
220
 
214
221
  /* update SHA1 from key and salt */
215
222
 
@@ -1285,14 +1285,6 @@ ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name, size_t size, void *tag)
1285
1285
  continue;
1286
1286
  }
1287
1287
 
1288
- if (size && size != shm_zone[i].shm.size) {
1289
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
1290
- "the size %uz of shared memory zone \"%V\" "
1291
- "conflicts with already declared size %uz",
1292
- size, &shm_zone[i].shm.name, shm_zone[i].shm.size);
1293
- return NULL;
1294
- }
1295
-
1296
1288
  if (tag != shm_zone[i].tag) {
1297
1289
  ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
1298
1290
  "the shared memory zone \"%V\" is "
@@ -1301,6 +1293,14 @@ ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name, size_t size, void *tag)
1301
1293
  return NULL;
1302
1294
  }
1303
1295
 
1296
+ if (size && size != shm_zone[i].shm.size) {
1297
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
1298
+ "the size %uz of shared memory zone \"%V\" "
1299
+ "conflicts with already declared size %uz",
1300
+ size, &shm_zone[i].shm.name, shm_zone[i].shm.size);
1301
+ return NULL;
1302
+ }
1303
+
1304
1304
  return &shm_zone[i];
1305
1305
  }
1306
1306
 
@@ -60,7 +60,7 @@ ngx_radix_tree_create(ngx_pool_t *pool, ngx_int_t preallocate)
60
60
  */
61
61
 
62
62
  if (preallocate == -1) {
63
- switch (ngx_pagesize / sizeof(ngx_radix_tree_t)) {
63
+ switch (ngx_pagesize / sizeof(ngx_radix_node_t)) {
64
64
 
65
65
  /* amd64 */
66
66
  case 128:
@@ -113,15 +113,6 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
113
113
  return NULL;
114
114
  }
115
115
 
116
- if (n) {
117
- if (ngx_array_init(&r->udp_connections, cf->pool, n,
118
- sizeof(ngx_udp_connection_t))
119
- != NGX_OK)
120
- {
121
- return NULL;
122
- }
123
- }
124
-
125
116
  cln->data = r;
126
117
 
127
118
  r->event = ngx_calloc(sizeof(ngx_event_t), cf->log);
@@ -153,6 +144,15 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
153
144
  r->log = &cf->cycle->new_log;
154
145
  r->log_level = NGX_LOG_ERR;
155
146
 
147
+ if (n) {
148
+ if (ngx_array_init(&r->udp_connections, cf->pool, n,
149
+ sizeof(ngx_udp_connection_t))
150
+ != NGX_OK)
151
+ {
152
+ return NULL;
153
+ }
154
+ }
155
+
156
156
  for (i = 0; i < n; i++) {
157
157
  if (ngx_strncmp(names[i].data, "valid=", 6) == 0) {
158
158
  s.len = names[i].len - 6;
@@ -162,8 +162,8 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
162
162
  ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, ngx_cycle->log, 0,
163
163
  "slab alloc: %uz", size);
164
164
 
165
- page = ngx_slab_alloc_pages(pool, (size + ngx_pagesize - 1)
166
- >> ngx_pagesize_shift);
165
+ page = ngx_slab_alloc_pages(pool, (size >> ngx_pagesize_shift)
166
+ + ((size % ngx_pagesize) ? 1 : 0));
167
167
  if (page) {
168
168
  p = (page - pool->pages) << ngx_pagesize_shift;
169
169
  p += (uintptr_t) pool->start;
@@ -1827,7 +1827,7 @@ ngx_sort(void *base, size_t n, size_t size,
1827
1827
  #if (NGX_MEMCPY_LIMIT)
1828
1828
 
1829
1829
  void *
1830
- ngx_memcpy(void *dst, void *src, size_t n)
1830
+ ngx_memcpy(void *dst, const void *src, size_t n)
1831
1831
  {
1832
1832
  if (n > NGX_MEMCPY_LIMIT) {
1833
1833
  ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0, "memcpy %uz bytes", n);
@@ -89,7 +89,7 @@ ngx_strlchr(u_char *p, u_char *last, u_char c)
89
89
 
90
90
  #if (NGX_MEMCPY_LIMIT)
91
91
 
92
- void *ngx_memcpy(void *dst, void *src, size_t n);
92
+ void *ngx_memcpy(void *dst, const void *src, size_t n);
93
93
  #define ngx_cpymem(dst, src, n) (((u_char *) ngx_memcpy(dst, src, n)) + (n))
94
94
 
95
95
  #else
@@ -211,6 +211,10 @@ ngx_time_sigsafe_update(void)
211
211
  slot++;
212
212
  }
213
213
 
214
+ tp = &cached_time[slot];
215
+
216
+ tp->sec = 0;
217
+
214
218
  ngx_gmtime(sec + cached_gmtoff * 60, &tm);
215
219
 
216
220
  p = &cached_err_log_time[slot][0];
@@ -1214,7 +1214,7 @@ ngx_event_core_init_conf(ngx_cycle_t *cycle, void *conf)
1214
1214
  fd = epoll_create(100);
1215
1215
 
1216
1216
  if (fd != -1) {
1217
- close(fd);
1217
+ (void) close(fd);
1218
1218
  module = &ngx_epoll_module;
1219
1219
 
1220
1220
  } else if (ngx_errno != NGX_ENOSYS) {
@@ -1626,6 +1626,9 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
1626
1626
  }
1627
1627
 
1628
1628
  part = ngx_array_push(f->split_parts);
1629
+ if (part == NULL) {
1630
+ return NGX_ERROR;
1631
+ }
1629
1632
 
1630
1633
  part->start = part_start;
1631
1634
  part->end = part_end;
@@ -233,12 +233,21 @@ ngx_http_geo_addr(ngx_http_request_t *r, ngx_http_geo_ctx_t *ctx)
233
233
  #if (NGX_HAVE_INET6)
234
234
 
235
235
  if (addr.sockaddr->sa_family == AF_INET6) {
236
+ u_char *p;
237
+ in_addr_t inaddr;
236
238
  struct in6_addr *inaddr6;
237
239
 
238
240
  inaddr6 = &((struct sockaddr_in6 *) addr.sockaddr)->sin6_addr;
239
241
 
240
242
  if (IN6_IS_ADDR_V4MAPPED(inaddr6)) {
241
- return ntohl(*(in_addr_t *) &inaddr6->s6_addr[12]);
243
+ p = inaddr6->s6_addr;
244
+
245
+ inaddr = p[12] << 24;
246
+ inaddr += p[13] << 16;
247
+ inaddr += p[14] << 8;
248
+ inaddr += p[15];
249
+
250
+ return inaddr;
242
251
  }
243
252
  }
244
253
 
@@ -400,15 +409,15 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
400
409
  }
401
410
  }
402
411
 
412
+ if (ctx.high.default_value == NULL) {
413
+ ctx.high.default_value = &ngx_http_variable_null_value;
414
+ }
415
+
403
416
  geo->u.high = ctx.high;
404
417
 
405
418
  var->get_handler = ngx_http_geo_range_variable;
406
419
  var->data = (uintptr_t) geo;
407
420
 
408
- if (ctx.high.default_value == NULL) {
409
- ctx.high.default_value = &ngx_http_variable_null_value;
410
- }
411
-
412
421
  ngx_destroy_pool(ctx.temp_pool);
413
422
  ngx_destroy_pool(pool);
414
423
 
@@ -226,12 +226,21 @@ ngx_http_geoip_addr(ngx_http_request_t *r, ngx_http_geoip_conf_t *gcf)
226
226
  #if (NGX_HAVE_INET6)
227
227
 
228
228
  if (addr.sockaddr->sa_family == AF_INET6) {
229
+ u_char *p;
230
+ in_addr_t inaddr;
229
231
  struct in6_addr *inaddr6;
230
232
 
231
233
  inaddr6 = &((struct sockaddr_in6 *) addr.sockaddr)->sin6_addr;
232
234
 
233
235
  if (IN6_IS_ADDR_V4MAPPED(inaddr6)) {
234
- return ntohl(*(in_addr_t *) &inaddr6->s6_addr[12]);
236
+ p = inaddr6->s6_addr;
237
+
238
+ inaddr = p[12] << 24;
239
+ inaddr += p[13] << 16;
240
+ inaddr += p[14] << 8;
241
+ inaddr += p[15];
242
+
243
+ return inaddr;
235
244
  }
236
245
  }
237
246
 
@@ -721,6 +721,10 @@ ngx_http_limit_conn(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
721
721
  }
722
722
 
723
723
  limit = ngx_array_push(&lccf->limits);
724
+ if (limit == NULL) {
725
+ return NGX_CONF_ERROR;
726
+ }
727
+
724
728
  limit->conn = n;
725
729
  limit->shm_zone = shm_zone;
726
730
 
@@ -444,17 +444,17 @@ ngx_http_limit_req_lookup(ngx_http_limit_req_limit_t *limit, ngx_uint_t hash,
444
444
 
445
445
  node->key = hash;
446
446
 
447
- ngx_rbtree_insert(&ctx->sh->rbtree, node);
448
-
449
447
  lr = (ngx_http_limit_req_node_t *) &node->color;
450
448
 
451
- ngx_queue_insert_head(&ctx->sh->queue, &lr->queue);
452
-
453
449
  lr->len = (u_char) len;
454
450
  lr->excess = 0;
455
451
 
456
452
  ngx_memcpy(lr->data, data, len);
457
453
 
454
+ ngx_rbtree_insert(&ctx->sh->rbtree, node);
455
+
456
+ ngx_queue_insert_head(&ctx->sh->queue, &lr->queue);
457
+
458
458
  if (account) {
459
459
  lr->last = now;
460
460
  lr->count = 0;
@@ -937,6 +937,9 @@ ngx_http_limit_req(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
937
937
  }
938
938
 
939
939
  limit = ngx_array_push(&lrcf->limits);
940
+ if (limit == NULL) {
941
+ return NGX_CONF_ERROR;
942
+ }
940
943
 
941
944
  limit->shm_zone = shm_zone;
942
945
  limit->burst = burst * 1000;
@@ -369,7 +369,7 @@ static char *
369
369
  ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
370
370
  {
371
371
  ngx_int_t rc, index;
372
- ngx_str_t *value, file, name;
372
+ ngx_str_t *value, name;
373
373
  ngx_uint_t i, key;
374
374
  ngx_http_map_conf_ctx_t *ctx;
375
375
  ngx_http_variable_value_t *var, **vp;
@@ -391,15 +391,7 @@ ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
391
391
  }
392
392
 
393
393
  if (ngx_strcmp(value[0].data, "include") == 0) {
394
- file = value[1];
395
-
396
- if (ngx_conf_full_name(cf->cycle, &file, 1) != NGX_OK) {
397
- return NGX_CONF_ERROR;
398
- }
399
-
400
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, cf->log, 0, "include %s", file.data);
401
-
402
- return ngx_conf_parse(cf, &file);
394
+ return ngx_conf_include(cf, dummy, conf);
403
395
  }
404
396
 
405
397
  if (value[1].data[0] == '$') {
@@ -416,11 +408,12 @@ ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
416
408
 
417
409
  for (i = 0; i < ctx->var_values.nelts; i++) {
418
410
  if (index == (ngx_int_t) var[i].data) {
411
+ var = &var[i];
419
412
  goto found;
420
413
  }
421
414
  }
422
415
 
423
- var = ngx_palloc(ctx->keys.pool, sizeof(ngx_http_variable_value_t));
416
+ var = ngx_array_push(&ctx->var_values);
424
417
  if (var == NULL) {
425
418
  return NGX_CONF_ERROR;
426
419
  }
@@ -431,13 +424,6 @@ ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
431
424
  var->len = 0;
432
425
  var->data = (u_char *) index;
433
426
 
434
- vp = ngx_array_push(&ctx->var_values);
435
- if (vp == NULL) {
436
- return NGX_CONF_ERROR;
437
- }
438
-
439
- *vp = var;
440
-
441
427
  goto found;
442
428
  }
443
429
 
@@ -1024,6 +1024,7 @@ ngx_http_ssi_parse(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx)
1024
1024
  switch (state) {
1025
1025
 
1026
1026
  case ssi_start_state:
1027
+ /* not reached */
1027
1028
  break;
1028
1029
 
1029
1030
  case ssi_tag_state:
@@ -50,7 +50,7 @@ our @EXPORT = qw(
50
50
  HTTP_INSUFFICIENT_STORAGE
51
51
  );
52
52
 
53
- our $VERSION = '1.2.3';
53
+ our $VERSION = '1.2.4';
54
54
 
55
55
  require XSLoader;
56
56
  XSLoader::load('nginx', $VERSION);
@@ -2733,7 +2733,15 @@ ngx_http_get_forwarded_addr(ngx_http_request_t *r, ngx_addr_t *addr,
2733
2733
 
2734
2734
  if (IN6_IS_ADDR_V4MAPPED(inaddr6)) {
2735
2735
  family = AF_INET;
2736
- inaddr = *(in_addr_t *) &inaddr6->s6_addr[12];
2736
+
2737
+ p = inaddr6->s6_addr;
2738
+
2739
+ inaddr = p[12] << 24;
2740
+ inaddr += p[13] << 16;
2741
+ inaddr += p[14] << 8;
2742
+ inaddr += p[15];
2743
+
2744
+ inaddr = htonl(inaddr);
2737
2745
  }
2738
2746
  }
2739
2747
  #endif
@@ -3193,7 +3201,7 @@ ngx_http_core_type(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
3193
3201
  {
3194
3202
  ngx_http_core_loc_conf_t *clcf = conf;
3195
3203
 
3196
- ngx_str_t *value, *content_type, *old, file;
3204
+ ngx_str_t *value, *content_type, *old;
3197
3205
  ngx_uint_t i, n, hash;
3198
3206
  ngx_hash_key_t *type;
3199
3207
 
@@ -3206,15 +3214,8 @@ ngx_http_core_type(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
3206
3214
  " in \"include\" directive");
3207
3215
  return NGX_CONF_ERROR;
3208
3216
  }
3209
- file = value[1];
3210
-
3211
- if (ngx_conf_full_name(cf->cycle, &file, 1) != NGX_OK) {
3212
- return NGX_CONF_ERROR;
3213
- }
3214
-
3215
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, cf->log, 0, "include %s", file.data);
3216
3217
 
3217
- return ngx_conf_parse(cf, &file);
3218
+ return ngx_conf_include(cf, dummy, conf);
3218
3219
  }
3219
3220
 
3220
3221
  content_type = ngx_palloc(cf->pool, sizeof(ngx_str_t));
@@ -185,18 +185,14 @@ ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
185
185
  }
186
186
 
187
187
  if (size == 0 && !(c->buffered & NGX_LOWLEVEL_BUFFERED)) {
188
- if (last) {
189
- r->out = NULL;
190
- c->buffered &= ~NGX_HTTP_WRITE_BUFFERED;
191
-
192
- return NGX_OK;
193
- }
194
-
195
- if (flush) {
196
- do {
197
- r->out = r->out->next;
198
- } while (r->out);
188
+ if (last || flush) {
189
+ for (cl = r->out; cl; /* void */) {
190
+ ln = cl;
191
+ cl = cl->next;
192
+ ngx_free_chain(r->pool, ln);
193
+ }
199
194
 
195
+ r->out = NULL;
200
196
  c->buffered &= ~NGX_HTTP_WRITE_BUFFERED;
201
197
 
202
198
  return NGX_OK;
@@ -263,6 +263,12 @@ ngx_mail_add_ports(ngx_conf_t *cf, ngx_array_t *ports,
263
263
  break;
264
264
  #endif
265
265
 
266
+ #if (NGX_HAVE_UNIX_DOMAIN)
267
+ case AF_UNIX:
268
+ p = 0;
269
+ break;
270
+ #endif
271
+
266
272
  default: /* AF_INET */
267
273
  sin = (struct sockaddr_in *) sa;
268
274
  p = sin->sin_port;
@@ -539,6 +545,11 @@ ngx_mail_cmp_conf_addrs(const void *one, const void *two)
539
545
  return 1;
540
546
  }
541
547
 
548
+ if (second->wildcard) {
549
+ /* a wildcard must be the last resort, shift it to the end */
550
+ return -1;
551
+ }
552
+
542
553
  if (first->bind && !second->bind) {
543
554
  /* shift explicit bind()ed addresses to the start */
544
555
  return -1;
@@ -1332,7 +1332,7 @@ ngx_mail_auth_http_merge_conf(ngx_conf_t *cf, void *parent, void *child)
1332
1332
 
1333
1333
  if (conf->peer == NULL) {
1334
1334
  ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
1335
- "no \"http_auth\" is defined for server in %s:%ui",
1335
+ "no \"auth_http\" is defined for server in %s:%ui",
1336
1336
  conf->file, conf->line);
1337
1337
 
1338
1338
  return NGX_CONF_ERROR;
@@ -340,6 +340,14 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
340
340
  break;
341
341
  #endif
342
342
 
343
+ #if (NGX_HAVE_UNIX_DOMAIN)
344
+ case AF_UNIX:
345
+ off = offsetof(struct sockaddr_un, sun_path);
346
+ len = sizeof(((struct sockaddr_un *) sa)->sun_path);
347
+ port = 0;
348
+ break;
349
+ #endif
350
+
343
351
  default: /* AF_INET */
344
352
  off = offsetof(struct sockaddr_in, sin_addr);
345
353
  len = 4;
@@ -374,21 +382,23 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
374
382
  ls->wildcard = u.wildcard;
375
383
  ls->ctx = cf->ctx;
376
384
 
377
- for (m = 0; ngx_modules[m]; m++) {
378
- if (ngx_modules[m]->type != NGX_MAIL_MODULE) {
379
- continue;
380
- }
385
+ if (cscf->protocol == NULL) {
386
+ for (m = 0; ngx_modules[m]; m++) {
387
+ if (ngx_modules[m]->type != NGX_MAIL_MODULE) {
388
+ continue;
389
+ }
381
390
 
382
- module = ngx_modules[m]->ctx;
391
+ module = ngx_modules[m]->ctx;
383
392
 
384
- if (module->protocol == NULL) {
385
- continue;
386
- }
393
+ if (module->protocol == NULL) {
394
+ continue;
395
+ }
387
396
 
388
- for (i = 0; module->protocol->port[i]; i++) {
389
- if (module->protocol->port[i] == u.port) {
390
- cscf->protocol = module->protocol;
391
- break;
397
+ for (i = 0; module->protocol->port[i]; i++) {
398
+ if (module->protocol->port[i] == u.port) {
399
+ cscf->protocol = module->protocol;
400
+ break;
401
+ }
392
402
  }
393
403
  }
394
404
  }
@@ -38,8 +38,6 @@ ngx_mail_init_connection(ngx_connection_t *c)
38
38
 
39
39
  /* find the server configuration for the address:port */
40
40
 
41
- /* AF_INET only */
42
-
43
41
  port = c->listening->servers;
44
42
 
45
43
  if (port->naddrs > 1) {
@@ -139,7 +139,7 @@ ngx_open_tempfile(u_char *name, ngx_uint_t persistent, ngx_uint_t access)
139
139
  access ? access : 0600);
140
140
 
141
141
  if (fd != -1 && !persistent) {
142
- unlink((const char *) name);
142
+ (void) unlink((const char *) name);
143
143
  }
144
144
 
145
145
  return fd;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nginxtra
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3.7
4
+ version: 1.2.4.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-09-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &8618220 !ruby/object:Gem::Requirement
16
+ requirement: &22194120 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 0.16.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *8618220
24
+ version_requirements: *22194120
25
25
  description: This gem is intended to provide an easy to use configuration file that
26
26
  will automatically be used to compile nginx and configure the configuration.
27
27
  email: reasonnumber@gmail.com