nginxtra 1.2.3.7 → 1.2.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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