[-]
[+]
|
Changed |
nginx.changes
|
|
[-]
[+]
|
Changed |
nginx.spec
^
|
|
[-]
[+]
|
Added |
2bc1dac6fb3ed263529decb211ec784824132bf4.patch
^
|
@@ -0,0 +1,38 @@
+From 2bc1dac6fb3ed263529decb211ec784824132bf4 Mon Sep 17 00:00:00 2001
+From: Chris Lea <chris.lea@gmail.com>
+Date: Tue, 15 Nov 2016 22:26:35 -0800
+Subject: [PATCH] default_port was removed in 1.11.6.
+
+---
+ ngx_http_upstream_fair_module.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/ngx_http_upstream_fair_module.c b/ngx_http_upstream_fair_module.c
+index a4419ca..66144e9 100644
+--- a/ngx_http_upstream_fair_module.c
++++ b/ngx_http_upstream_fair_module.c
+@@ -540,7 +540,11 @@ ngx_http_upstream_init_fair_rr(ngx_conf_t *cf, ngx_http_upstream_srv_conf_t *us)
+
+ /* an upstream implicitly defined by proxy_pass, etc. */
+
++#if nginx_version < 1011006
+ if (us->port == 0 && us->default_port == 0) {
++#else
++ if (us->port == 0) {
++#endif
+ ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+ "no port in upstream \"%V\" in %s:%ui",
+ &us->host, us->file_name, us->line);
+@@ -550,8 +554,11 @@ ngx_http_upstream_init_fair_rr(ngx_conf_t *cf, ngx_http_upstream_srv_conf_t *us)
+ ngx_memzero(&u, sizeof(ngx_url_t));
+
+ u.host = us->host;
++#if nginx_version < 1011006
+ u.port = (in_port_t) (us->port ? us->port : us->default_port);
+-
++#else
++ u.port = (in_port_t) us->port;
++#endif
+ if (ngx_inet_resolve_host(cf->pool, &u) != NGX_OK) {
+ if (u.err) {
+ ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,6 +2,6 @@
<service name="download_url">
<param name="host">nginx.org</param>
<param name="protocol">http</param>
- <param name="path">/download/nginx-1.11.5.tar.gz</param>
+ <param name="path">/download/nginx-1.11.6.tar.gz</param>
</service>
</services>
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/CHANGES
^
|
@@ -1,4 +1,43 @@
+Changes with nginx 1.11.6 15 Nov 2016
+
+ *) Change: format of the $ssl_client_s_dn and $ssl_client_i_dn variables
+ has been changed to follow RFC 2253 (RFC 4514); values in the old
+ format are available in the $ssl_client_s_dn_legacy and
+ $ssl_client_i_dn_legacy variables.
+
+ *) Change: when storing temporary files in a cache directory they will
+ be stored in the same subdirectories as corresponding cache files
+ instead of a separate subdirectory for temporary files.
+
+ *) Feature: EXTERNAL authentication mechanism support in mail proxy.
+ Thanks to Robert Norris.
+
+ *) Feature: WebP support in the ngx_http_image_filter_module.
+
+ *) Feature: variables support in the "proxy_method" directive.
+ Thanks to Dmitry Lazurkin.
+
+ *) Feature: the "http2_max_requests" directive in the
+ ngx_http_v2_module.
+
+ *) Feature: the "proxy_cache_max_range_offset",
+ "fastcgi_cache_max_range_offset", "scgi_cache_max_range_offset", and
+ "uwsgi_cache_max_range_offset" directives.
+
+ *) Bugfix: graceful shutdown of old worker processes might require
+ infinite time when using HTTP/2.
+
+ *) Bugfix: in the ngx_http_mp4_module.
+
+ *) Bugfix: "ignore long locked inactive cache entry" alerts might appear
+ in logs when proxying WebSocket connections with caching enabled.
+
+ *) Bugfix: nginx did not write anything to log and returned a response
+ with code 502 instead of 504 when a timeout occurred during an SSL
+ handshake to a backend.
+
+
Changes with nginx 1.11.5 11 Oct 2016
*) Change: the --with-ipv6 configure option was removed, now IPv6
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/CHANGES.ru
^
|
@@ -1,4 +1,44 @@
+Изменения в nginx 1.11.6 15.11.2016
+
+ *) Изменение: формат переменных $ssl_client_s_dn и $ssl_client_i_dn
+ изменён на соответствующий RFC 2253 (RFC 4514); значения в старом
+ формате доступны через переменные $ssl_client_s_dn_legacy и
+ $ssl_client_i_dn_legacy.
+
+ *) Изменение: при сохранении временных файлов в каталоге кэша они теперь
+ располагаются не в отдельном подкаталоге для временных файлов, а в
+ том же подкаталоге, что и соответствующие файлы в кэше.
+
+ *) Добавление: поддержка метода аутентификации EXTERNAL в почтовом
+ прокси-сервере.
+ Спасибо Robert Norris.
+
+ *) Добавление: поддержка WebP в модуле ngx_http_image_filter_module.
+
+ *) Добавление: директива proxy_method поддерживает переменные.
+ Спасибо Дмитрию Лазуркину.
+
+ *) Добавление: директива http2_max_requests в модуле ngx_http_v2_module.
+
+ *) Добавление: директивы proxy_cache_max_range_offset,
+ fastcgi_cache_max_range_offset, scgi_cache_max_range_offset и
+ uwsgi_cache_max_range_offset.
+
+ *) Исправление: плавное завершение старых рабочих процессов могло
+ занимать бесконечное время при использовании HTTP/2.
+
+ *) Исправление: в модуле ngx_http_mp4_module.
+
+ *) Исправление: при проксировании WebSocket-соединений и включённом
+ кэшировании в логах могли появляться сообщения "ignore long locked
+ inactive cache entry".
+
+ *) Исправление: если во время SSL handshake с бэкендом происходил
+ таймаут, nginx ничего не писал в лог и возвращал ответ с кодом 502
+ вместо 504.
+
+
Изменения в nginx 1.11.5 11.10.2016
*) Изменение: параметр configure --with-ipv6 упразднён, поддержка IPv6
@@ -5589,7 +5629,7 @@
Изменения в nginx 0.4.11 25.10.2006
- *) Добавление: POP3 прокси поддерживает AUTH LOIGN PLAIN и CRAM-MD5.
+ *) Добавление: POP3 прокси поддерживает AUTH LOGIN PLAIN и CRAM-MD5.
*) Добавление: модуль ngx_http_perl_module поддерживает метод
$r->allow_ranges.
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/auto/lib/libgd/conf
^
|
@@ -74,6 +74,11 @@
NGX_LIB_LIBGD=$ngx_feature_libs
+ ngx_feature="GD WebP support"
+ ngx_feature_name="NGX_HAVE_GD_WEBP"
+ ngx_feature_test="gdImagePtr img = gdImageCreateFromWebpPtr(1, NULL);"
+ . auto/feature
+
else
cat << END
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/core/nginx.h
^
|
@@ -9,8 +9,8 @@
#define _NGINX_H_INCLUDED_
-#define nginx_version 1011005
-#define NGINX_VERSION "1.11.5"
+#define nginx_version 1011006
+#define NGINX_VERSION "1.11.6"
#define NGINX_VER "nginx/" NGINX_VERSION
#ifdef NGX_BUILD
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/core/ngx_buf.c
^
|
@@ -186,16 +186,18 @@
{
ngx_chain_t *cl;
- if (*busy == NULL) {
- *busy = *out;
+ if (*out) {
+ if (*busy == NULL) {
+ *busy = *out;
- } else {
- for (cl = *busy; cl->next; cl = cl->next) { /* void */ }
+ } else {
+ for (cl = *busy; cl->next; cl = cl->next) { /* void */ }
- cl->next = *out;
- }
+ cl->next = *out;
+ }
- *out = NULL;
+ *out = NULL;
+ }
while (*busy) {
cl = *busy;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/core/ngx_conf_file.c
^
|
@@ -10,6 +10,7 @@
#define NGX_CONF_BUFFER 4096
+static ngx_int_t ngx_conf_add_dump(ngx_conf_t *cf, ngx_str_t *filename);
static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last);
static ngx_int_t ngx_conf_read_token(ngx_conf_t *cf);
static void ngx_conf_flush_files(ngx_cycle_t *cycle);
@@ -97,17 +98,70 @@
}
+static ngx_int_t
+ngx_conf_add_dump(ngx_conf_t *cf, ngx_str_t *filename)
+{
+ off_t size;
+ u_char *p;
+ uint32_t hash;
+ ngx_buf_t *buf;
+ ngx_str_node_t *sn;
+ ngx_conf_dump_t *cd;
+
+ hash = ngx_crc32_long(filename->data, filename->len);
+
+ sn = ngx_str_rbtree_lookup(&cf->cycle->config_dump_rbtree, filename, hash);
+
+ if (sn) {
+ cf->conf_file->dump = NULL;
+ return NGX_OK;
+ }
+
+ p = ngx_pstrdup(cf->cycle->pool, filename);
+ if (p == NULL) {
+ return NGX_ERROR;
+ }
+
+ cd = ngx_array_push(&cf->cycle->config_dump);
+ if (cd == NULL) {
+ return NGX_ERROR;
+ }
+
+ size = ngx_file_size(&cf->conf_file->file.info);
+
+ buf = ngx_create_temp_buf(cf->cycle->pool, (size_t) size);
+ if (buf == NULL) {
+ return NGX_ERROR;
+ }
+
+ cd->name.data = p;
+ cd->name.len = filename->len;
+ cd->buffer = buf;
+
+ cf->conf_file->dump = buf;
+
+ sn = ngx_palloc(cf->temp_pool, sizeof(ngx_str_node_t));
+ if (sn == NULL) {
+ return NGX_ERROR;
+ }
+
+ sn->node.key = hash;
+ sn->str = cd->name;
+
+ ngx_rbtree_insert(&cf->cycle->config_dump_rbtree, &sn->node);
+
+ return NGX_OK;
+}
+
+
char *
ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename)
{
char *rv;
- u_char *p;
- off_t size;
ngx_fd_t fd;
ngx_int_t rc;
- ngx_buf_t buf, *tbuf;
+ ngx_buf_t buf;
ngx_conf_file_t *prev, conf_file;
- ngx_conf_dump_t *cd;
enum {
parse_file = 0,
parse_block,
@@ -167,29 +221,10 @@
#endif
)
{
- p = ngx_pstrdup(cf->cycle->pool, filename);
- if (p == NULL) {
+ if (ngx_conf_add_dump(cf, filename) != NGX_OK) {
goto failed;
}
- size = ngx_file_size(&cf->conf_file->file.info);
-
- tbuf = ngx_create_temp_buf(cf->cycle->pool, (size_t) size);
- if (tbuf == NULL) {
- goto failed;
- }
-
- cd = ngx_array_push(&cf->cycle->config_dump);
- if (cd == NULL) {
- goto failed;
- }
-
- cd->name.len = filename->len;
- cd->name.data = p;
- cd->buffer = tbuf;
-
- cf->conf_file->dump = tbuf;
-
} else {
cf->conf_file->dump = NULL;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/core/ngx_cycle.c
^
|
@@ -132,6 +132,9 @@
return NULL;
}
+ ngx_rbtree_init(&cycle->config_dump_rbtree, &cycle->config_dump_sentinel,
+ ngx_str_rbtree_insert_value);
+
if (old_cycle->open_files.part.nelts) {
n = old_cycle->open_files.part.nelts;
for (part = old_cycle->open_files.part.next; part; part = part->next) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/core/ngx_cycle.h
^
|
@@ -56,7 +56,11 @@
ngx_array_t listening;
ngx_array_t paths;
+
ngx_array_t config_dump;
+ ngx_rbtree_t config_dump_rbtree;
+ ngx_rbtree_node_t config_dump_sentinel;
+
ngx_list_t open_files;
ngx_list_t shared_memory;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/core/ngx_file.c
^
|
@@ -141,12 +141,27 @@
ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool,
ngx_uint_t persistent, ngx_uint_t clean, ngx_uint_t access)
{
+ size_t levels;
+ u_char *p;
uint32_t n;
ngx_err_t err;
+ ngx_str_t name;
+ ngx_uint_t prefix;
ngx_pool_cleanup_t *cln;
ngx_pool_cleanup_file_t *clnf;
- file->name.len = path->name.len + 1 + path->len + 10;
+ if (file->name.len) {
+ name = file->name;
+ levels = 0;
+ prefix = 1;
+
+ } else {
+ name = path->name;
+ levels = path->len;
+ prefix = 0;
+ }
+
+ file->name.len = name.len + 1 + levels + 10;
file->name.data = ngx_pnalloc(pool, file->name.len + 1);
if (file->name.data == NULL) {
@@ -159,7 +174,13 @@
}
#endif
- ngx_memcpy(file->name.data, path->name.data, path->name.len);
+ p = ngx_cpymem(file->name.data, name.data, name.len);
+
+ if (prefix) {
+ *p = '.';
+ }
+
+ p += 1 + levels;
n = (uint32_t) ngx_next_temp_number(0);
@@ -169,10 +190,11 @@
}
for ( ;; ) {
- (void) ngx_sprintf(file->name.data + path->name.len + 1 + path->len,
- "%010uD%Z", n);
+ (void) ngx_sprintf(p, "%010uD%Z", n);
- ngx_create_hashed_filename(path, file->name.data, file->name.len);
+ if (!prefix) {
+ ngx_create_hashed_filename(path, file->name.data, file->name.len);
+ }
ngx_log_debug1(NGX_LOG_DEBUG_CORE, file->log, 0,
"hashed path: %s", file->name.data);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/core/ngx_hash.c
^
|
@@ -390,7 +390,6 @@
buckets[i] = (ngx_hash_elt_t *) elts;
elts += test[i];
-
}
for (i = 0; i < size; i++) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/event/ngx_event_openssl.c
^
|
@@ -2137,7 +2137,9 @@
break;
}
- if (p >= last) {
+ /* ERR_error_string_n() requires at least one byte */
+
+ if (p >= last - 1) {
goto next;
}
@@ -3436,6 +3438,109 @@
ngx_int_t
ngx_ssl_get_subject_dn(ngx_connection_t *c, ngx_pool_t *pool, ngx_str_t *s)
{
+ BIO *bio;
+ X509 *cert;
+ X509_NAME *name;
+
+ s->len = 0;
+
+ cert = SSL_get_peer_certificate(c->ssl->connection);
+ if (cert == NULL) {
+ return NGX_OK;
+ }
+
+ name = X509_get_subject_name(cert);
+ if (name == NULL) {
+ return NGX_ERROR;
+ }
+
+ bio = BIO_new(BIO_s_mem());
+ if (bio == NULL) {
+ X509_free(cert);
+ return NGX_ERROR;
+ }
+
+ if (X509_NAME_print_ex(bio, name, 0, XN_FLAG_RFC2253) < 0) {
+ goto failed;
+ }
+
+ s->len = BIO_pending(bio);
+ s->data = ngx_pnalloc(pool, s->len);
+ if (s->data == NULL) {
+ goto failed;
+ }
+
+ BIO_read(bio, s->data, s->len);
+
+ BIO_free(bio);
+ X509_free(cert);
+
+ return NGX_OK;
+
+failed:
+
+ BIO_free(bio);
+ X509_free(cert);
+
+ return NGX_ERROR;
+}
+
+
+ngx_int_t
+ngx_ssl_get_issuer_dn(ngx_connection_t *c, ngx_pool_t *pool, ngx_str_t *s)
+{
+ BIO *bio;
+ X509 *cert;
+ X509_NAME *name;
+
+ s->len = 0;
+
+ cert = SSL_get_peer_certificate(c->ssl->connection);
+ if (cert == NULL) {
+ return NGX_OK;
+ }
+
+ name = X509_get_issuer_name(cert);
+ if (name == NULL) {
+ return NGX_ERROR;
+ }
+
+ bio = BIO_new(BIO_s_mem());
+ if (bio == NULL) {
+ X509_free(cert);
+ return NGX_ERROR;
+ }
+
+ if (X509_NAME_print_ex(bio, name, 0, XN_FLAG_RFC2253) < 0) {
+ goto failed;
+ }
+
+ s->len = BIO_pending(bio);
+ s->data = ngx_pnalloc(pool, s->len);
+ if (s->data == NULL) {
+ goto failed;
+ }
+
+ BIO_read(bio, s->data, s->len);
+
+ BIO_free(bio);
+ X509_free(cert);
+
+ return NGX_OK;
+
+failed:
+
+ BIO_free(bio);
+ X509_free(cert);
+
+ return NGX_ERROR;
+}
+
+
+ngx_int_t
+ngx_ssl_get_subject_dn_legacy(ngx_connection_t *c, ngx_pool_t *pool,
+ ngx_str_t *s)
+{
char *p;
size_t len;
X509 *cert;
@@ -3476,7 +3581,8 @@
ngx_int_t
-ngx_ssl_get_issuer_dn(ngx_connection_t *c, ngx_pool_t *pool, ngx_str_t *s)
+ngx_ssl_get_issuer_dn_legacy(ngx_connection_t *c, ngx_pool_t *pool,
+ ngx_str_t *s)
{
char *p;
size_t len;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/event/ngx_event_openssl.h
^
|
@@ -205,6 +205,10 @@
ngx_str_t *s);
ngx_int_t ngx_ssl_get_issuer_dn(ngx_connection_t *c, ngx_pool_t *pool,
ngx_str_t *s);
+ngx_int_t ngx_ssl_get_subject_dn_legacy(ngx_connection_t *c, ngx_pool_t *pool,
+ ngx_str_t *s);
+ngx_int_t ngx_ssl_get_issuer_dn_legacy(ngx_connection_t *c, ngx_pool_t *pool,
+ ngx_str_t *s);
ngx_int_t ngx_ssl_get_serial_number(ngx_connection_t *c, ngx_pool_t *pool,
ngx_str_t *s);
ngx_int_t ngx_ssl_get_fingerprint(ngx_connection_t *c, ngx_pool_t *pool,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/modules/ngx_http_fastcgi_module.c
^
|
@@ -420,6 +420,13 @@
offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_min_uses),
NULL },
+ { ngx_string("fastcgi_cache_max_range_offset"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_off_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_max_range_offset),
+ NULL },
+
{ ngx_string("fastcgi_cache_use_stale"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
ngx_conf_set_bitmask_slot,
@@ -766,16 +773,14 @@
return NGX_ERROR;
}
- if (url.addrs && url.addrs[0].sockaddr) {
+ if (url.addrs) {
u->resolved->sockaddr = url.addrs[0].sockaddr;
u->resolved->socklen = url.addrs[0].socklen;
+ u->resolved->name = url.addrs[0].name;
u->resolved->naddrs = 1;
- u->resolved->host = url.addrs[0].name;
-
- } else {
- u->resolved->host = url.host;
}
+ u->resolved->host = url.host;
u->resolved->port = url.port;
u->resolved->no_port = url.no_port;
@@ -2756,6 +2761,7 @@
#if (NGX_HTTP_CACHE)
conf->upstream.cache = NGX_CONF_UNSET;
conf->upstream.cache_min_uses = NGX_CONF_UNSET_UINT;
+ conf->upstream.cache_max_range_offset = NGX_CONF_UNSET;
conf->upstream.cache_bypass = NGX_CONF_UNSET_PTR;
conf->upstream.no_cache = NGX_CONF_UNSET_PTR;
conf->upstream.cache_valid = NGX_CONF_UNSET_PTR;
@@ -3001,6 +3007,10 @@
ngx_conf_merge_uint_value(conf->upstream.cache_min_uses,
prev->upstream.cache_min_uses, 1);
+ ngx_conf_merge_off_value(conf->upstream.cache_max_range_offset,
+ prev->upstream.cache_max_range_offset,
+ NGX_MAX_OFF_T_VALUE);
+
ngx_conf_merge_bitmask_value(conf->upstream.cache_use_stale,
prev->upstream.cache_use_stale,
(NGX_CONF_BITMASK_SET
@@ -3127,6 +3137,20 @@
#endif
+ /*
+ * special handling to preserve conf->params in the "http" section
+ * to inherit it to all servers
+ */
+
+ if (prev->params.hash.buckets == NULL
+ && conf->params_source == prev->params_source)
+ {
+ prev->params = conf->params;
+#if (NGX_HTTP_CACHE)
+ prev->params_cache = conf->params_cache;
+#endif
+ }
+
return NGX_CONF_OK;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/modules/ngx_http_image_filter_module.c
^
|
@@ -31,6 +31,7 @@
#define NGX_HTTP_IMAGE_JPEG 1
#define NGX_HTTP_IMAGE_GIF 2
#define NGX_HTTP_IMAGE_PNG 3
+#define NGX_HTTP_IMAGE_WEBP 4
#define NGX_HTTP_IMAGE_BUFFERED 0x08
@@ -42,6 +43,7 @@
ngx_uint_t height;
ngx_uint_t angle;
ngx_uint_t jpeg_quality;
+ ngx_uint_t webp_quality;
ngx_uint_t sharpen;
ngx_flag_t transparency;
@@ -51,6 +53,7 @@
ngx_http_complex_value_t *hcv;
ngx_http_complex_value_t *acv;
ngx_http_complex_value_t *jqcv;
+ ngx_http_complex_value_t *wqcv;
ngx_http_complex_value_t *shcv;
size_t buffer_size;
@@ -109,6 +112,8 @@
void *conf);
static char *ngx_http_image_filter_jpeg_quality(ngx_conf_t *cf,
ngx_command_t *cmd, void *conf);
+static char *ngx_http_image_filter_webp_quality(ngx_conf_t *cf,
+ ngx_command_t *cmd, void *conf);
static char *ngx_http_image_filter_sharpen(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
static ngx_int_t ngx_http_image_filter_init(ngx_conf_t *cf);
@@ -130,6 +135,13 @@
0,
NULL },
+ { ngx_string("image_filter_webp_quality"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_http_image_filter_webp_quality,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ 0,
+ NULL },
+
{ ngx_string("image_filter_sharpen"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
ngx_http_image_filter_sharpen,
@@ -200,7 +212,8 @@
static ngx_str_t ngx_http_image_types[] = {
ngx_string("image/jpeg"),
ngx_string("image/gif"),
- ngx_string("image/png")
+ ngx_string("image/png"),
+ ngx_string("image/webp")
};
@@ -441,6 +454,13 @@
/* PNG */
return NGX_HTTP_IMAGE_PNG;
+
+ } else if (p[0] == 'R' && p[1] == 'I' && p[2] == 'F' && p[3] == 'F'
+ && p[8] == 'W' && p[9] == 'E' && p[10] == 'B' && p[11] == 'P')
+ {
+ /* WebP */
+
+ return NGX_HTTP_IMAGE_WEBP;
}
return NGX_HTTP_IMAGE_NONE;
@@ -731,6 +751,56 @@
break;
+ case NGX_HTTP_IMAGE_WEBP:
+
+ if (ctx->length < 30) {
+ return NGX_DECLINED;
+ }
+
+ if (p[12] != 'V' || p[13] != 'P' || p[14] != '8') {
+ return NGX_DECLINED;
+ }
+
+ switch (p[15]) {
+
+ case ' ':
+ if (p[20] & 1) {
+ /* not a key frame */
+ return NGX_DECLINED;
+ }
+
+ if (p[23] != 0x9d || p[24] != 0x01 || p[25] != 0x2a) {
+ /* invalid start code */
+ return NGX_DECLINED;
+ }
+
+ width = (p[26] | p[27] << 8) & 0x3fff;
+ height = (p[28] | p[29] << 8) & 0x3fff;
+
+ break;
+
+ case 'L':
+ if (p[20] != 0x2f) {
+ /* invalid signature */
+ return NGX_DECLINED;
+ }
+
+ width = ((p[21] | p[22] << 8) & 0x3fff) + 1;
+ height = ((p[22] >> 6 | p[23] << 2 | p[24] << 10) & 0x3fff) + 1;
+
+ break;
+
+ case 'X':
+ width = (p[24] | p[25] << 8 | p[26] << 16) + 1;
+ height = (p[27] | p[28] << 8 | p[29] << 16) + 1;
+ break;
+
+ default:
+ return NGX_DECLINED;
+ }
+
+ break;
+
default:
return NGX_DECLINED;
@@ -1043,6 +1113,15 @@
failed = "gdImageCreateFromPngPtr() failed";
break;
+ case NGX_HTTP_IMAGE_WEBP:
+#if (NGX_HAVE_GD_WEBP)
+ img = gdImageCreateFromWebpPtr(ctx->length, ctx->image);
+ failed = "gdImageCreateFromWebpPtr() failed";
+#else
+ failed = "nginx was built without GD WebP support";
+#endif
+ break;
+
default:
failed = "unknown image type";
break;
@@ -1090,7 +1169,7 @@
{
char *failed;
u_char *out;
- ngx_int_t jq;
+ ngx_int_t q;
ngx_http_image_filter_conf_t *conf;
out = NULL;
@@ -1100,12 +1179,12 @@
case NGX_HTTP_IMAGE_JPEG:
conf = ngx_http_get_module_loc_conf(r, ngx_http_image_filter_module);
- jq = ngx_http_image_filter_get_value(r, conf->jqcv, conf->jpeg_quality);
- if (jq <= 0) {
+ q = ngx_http_image_filter_get_value(r, conf->jqcv, conf->jpeg_quality);
+ if (q <= 0) {
return NULL;
}
- out = gdImageJpegPtr(img, size, jq);
+ out = gdImageJpegPtr(img, size, q);
failed = "gdImageJpegPtr() failed";
break;
@@ -1119,6 +1198,22 @@
failed = "gdImagePngPtr() failed";
break;
+ case NGX_HTTP_IMAGE_WEBP:
+#if (NGX_HAVE_GD_WEBP)
+ conf = ngx_http_get_module_loc_conf(r, ngx_http_image_filter_module);
+
+ q = ngx_http_image_filter_get_value(r, conf->wqcv, conf->webp_quality);
+ if (q <= 0) {
+ return NULL;
+ }
+
+ out = gdImageWebpPtrEx(img, size, q);
+ failed = "gdImageWebpPtrEx() failed";
+#else
+ failed = "nginx was built without GD WebP support";
+#endif
+ break;
+
default:
failed = "unknown image type";
break;
@@ -1196,11 +1291,13 @@
* conf->hcv = NULL;
* conf->acv = NULL;
* conf->jqcv = NULL;
+ * conf->wqcv = NULL;
* conf->shcv = NULL;
*/
conf->filter = NGX_CONF_UNSET_UINT;
conf->jpeg_quality = NGX_CONF_UNSET_UINT;
+ conf->webp_quality = NGX_CONF_UNSET_UINT;
conf->sharpen = NGX_CONF_UNSET_UINT;
conf->transparency = NGX_CONF_UNSET;
conf->interlace = NGX_CONF_UNSET;
@@ -1242,6 +1339,16 @@
}
}
+ if (conf->webp_quality == NGX_CONF_UNSET_UINT) {
+
+ /* 80 is libwebp default quality */
+ ngx_conf_merge_uint_value(conf->webp_quality, prev->webp_quality, 80);
+
+ if (conf->wqcv == NULL) {
+ conf->wqcv = prev->wqcv;
+ }
+ }
+
if (conf->sharpen == NGX_CONF_UNSET_UINT) {
ngx_conf_merge_uint_value(conf->sharpen, prev->sharpen, 0);
@@ -1458,6 +1565,53 @@
}
return NGX_CONF_OK;
+}
+
+
+static char *
+ngx_http_image_filter_webp_quality(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf)
+{
+ ngx_http_image_filter_conf_t *imcf = conf;
+
+ ngx_str_t *value;
+ ngx_int_t n;
+ ngx_http_complex_value_t cv;
+ ngx_http_compile_complex_value_t ccv;
+
+ value = cf->args->elts;
+
+ ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
+
+ ccv.cf = cf;
+ ccv.value = &value[1];
+ ccv.complex_value = &cv;
+
+ if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
+ return NGX_CONF_ERROR;
+ }
+
+ if (cv.lengths == NULL) {
+ n = ngx_http_image_filter_value(&value[1]);
+
+ if (n <= 0) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "invalid value \"%V\"", &value[1]);
+ return NGX_CONF_ERROR;
+ }
+
+ imcf->webp_quality = (ngx_uint_t) n;
+
+ } else {
+ imcf->wqcv = ngx_palloc(cf->pool, sizeof(ngx_http_complex_value_t));
+ if (imcf->wqcv == NULL) {
+ return NGX_CONF_ERROR;
+ }
+
+ *imcf->wqcv = cv;
+ }
+
+ return NGX_CONF_OK;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/modules/ngx_http_mp4_module.c
^
|
@@ -216,6 +216,7 @@
static ngx_int_t ngx_http_mp4_handler(ngx_http_request_t *r);
+static ngx_int_t ngx_http_mp4_atofp(u_char *line, size_t n, size_t point);
static ngx_int_t ngx_http_mp4_process(ngx_http_mp4_file_t *mp4);
static ngx_int_t ngx_http_mp4_read_atom(ngx_http_mp4_file_t *mp4,
@@ -537,26 +538,15 @@
/*
* A Flash player may send start value with a lot of digits
- * after dot so strtod() is used instead of atofp(). NaNs and
- * infinities become negative numbers after (int) conversion.
+ * after dot so a custom function is used instead of ngx_atofp().
*/
- ngx_set_errno(0);
- start = (int) (strtod((char *) value.data, NULL) * 1000);
-
- if (ngx_errno != 0) {
- start = -1;
- }
+ start = ngx_http_mp4_atofp(value.data, value.len, 3);
}
if (ngx_http_arg(r, (u_char *) "end", 3, &value) == NGX_OK) {
- ngx_set_errno(0);
- end = (int) (strtod((char *) value.data, NULL) * 1000);
-
- if (ngx_errno != 0) {
- end = -1;
- }
+ end = ngx_http_mp4_atofp(value.data, value.len, 3);
if (end > 0) {
if (start < 0) {
@@ -686,6 +676,62 @@
}
+static ngx_int_t
+ngx_http_mp4_atofp(u_char *line, size_t n, size_t point)
+{
+ ngx_int_t value, cutoff, cutlim;
+ ngx_uint_t dot;
+
+ /* same as ngx_atofp(), but allows additional digits */
+
+ if (n == 0) {
+ return NGX_ERROR;
+ }
+
+ cutoff = NGX_MAX_INT_T_VALUE / 10;
+ cutlim = NGX_MAX_INT_T_VALUE % 10;
+
+ dot = 0;
+
+ for (value = 0; n--; line++) {
+
+ if (*line == '.') {
+ if (dot) {
+ return NGX_ERROR;
+ }
+
+ dot = 1;
+ continue;
+ }
+
+ if (*line < '0' || *line > '9') {
+ return NGX_ERROR;
+ }
+
+ if (point == 0) {
+ continue;
+ }
+
+ if (value >= cutoff && (value > cutoff || *line - '0' > cutlim)) {
+ return NGX_ERROR;
+ }
+
+ value = value * 10 + (*line - '0');
+ point -= dot;
+ }
+
+ while (point--) {
+ if (value > cutoff) {
+ return NGX_ERROR;
+ }
+
+ value = value * 10;
+ }
+
+ return value;
+}
+
+
static ngx_int_t
ngx_http_mp4_process(ngx_http_mp4_file_t *mp4)
{
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/modules/ngx_http_proxy_module.c
^
|
@@ -73,7 +73,7 @@
ngx_array_t *cookie_domains;
ngx_array_t *cookie_paths;
- ngx_str_t method;
+ ngx_http_complex_value_t *method;
ngx_str_t location;
ngx_str_t url;
@@ -380,7 +380,7 @@
{ ngx_string("proxy_method"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
- ngx_conf_set_str_slot,
+ ngx_http_set_complex_value_slot,
NGX_HTTP_LOC_CONF_OFFSET,
offsetof(ngx_http_proxy_loc_conf_t, method),
NULL },
@@ -492,6 +492,13 @@
offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_min_uses),
NULL },
+ { ngx_string("proxy_cache_max_range_offset"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_off_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_max_range_offset),
+ NULL },
+
{ ngx_string("proxy_cache_use_stale"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
ngx_conf_set_bitmask_slot,
@@ -1008,16 +1015,14 @@
return NGX_ERROR;
}
- if (url.addrs && url.addrs[0].sockaddr) {
+ if (url.addrs) {
u->resolved->sockaddr = url.addrs[0].sockaddr;
u->resolved->socklen = url.addrs[0].socklen;
+ u->resolved->name = url.addrs[0].name;
u->resolved->naddrs = 1;
- u->resolved->host = url.addrs[0].name;
-
- } else {
- u->resolved->host = url.host;
}
+ u->resolved->host = url.host;
u->resolved->port = (in_port_t) (url.no_port ? port : url.port);
u->resolved->no_port = url.no_port;
@@ -1159,8 +1164,10 @@
/* HEAD was changed to GET to cache response */
method = u->method;
- } else if (plcf->method.len) {
- method = plcf->method;
+ } else if (plcf->method) {
+ if (ngx_http_complex_value(r, plcf->method, &method) != NGX_OK) {
+ return NGX_ERROR;
+ }
} else {
method = r->method_name;
@@ -2797,7 +2804,7 @@
* conf->upstream.store_values = NULL;
* conf->upstream.ssl_name = NULL;
*
- * conf->method = { 0, NULL };
+ * conf->method = NULL;
* conf->headers_source = NULL;
* conf->headers.lengths = NULL;
* conf->headers.values = NULL;
@@ -2847,6 +2854,7 @@
#if (NGX_HTTP_CACHE)
conf->upstream.cache = NGX_CONF_UNSET;
conf->upstream.cache_min_uses = NGX_CONF_UNSET_UINT;
+ conf->upstream.cache_max_range_offset = NGX_CONF_UNSET;
conf->upstream.cache_bypass = NGX_CONF_UNSET_PTR;
conf->upstream.no_cache = NGX_CONF_UNSET_PTR;
conf->upstream.cache_valid = NGX_CONF_UNSET_PTR;
@@ -3108,6 +3116,10 @@
ngx_conf_merge_uint_value(conf->upstream.cache_min_uses,
prev->upstream.cache_min_uses, 1);
+ ngx_conf_merge_off_value(conf->upstream.cache_max_range_offset,
+ prev->upstream.cache_max_range_offset,
+ NGX_MAX_OFF_T_VALUE);
+
ngx_conf_merge_bitmask_value(conf->upstream.cache_use_stale,
prev->upstream.cache_use_stale,
(NGX_CONF_BITMASK_SET
@@ -3158,7 +3170,9 @@
#endif
- ngx_conf_merge_str_value(conf->method, prev->method, "");
+ if (conf->method == NULL) {
+ conf->method = prev->method;
+ }
ngx_conf_merge_value(conf->upstream.pass_request_headers,
prev->upstream.pass_request_headers, 1);
@@ -3357,6 +3371,20 @@
#endif
+ /*
+ * special handling to preserve conf->headers in the "http" section
+ * to inherit it to all servers
+ */
+
+ if (prev->headers.hash.buckets == NULL
+ && conf->headers_source == prev->headers_source)
+ {
+ prev->headers = conf->headers;
+#if (NGX_HTTP_CACHE)
+ prev->headers_cache = conf->headers_cache;
+#endif
+ }
+
return NGX_CONF_OK;
}
@@ -3392,14 +3420,6 @@
return NGX_ERROR;
}
- if (conf->headers_source == NULL) {
- conf->headers_source = ngx_array_create(cf->pool, 4,
- sizeof(ngx_keyval_t));
- if (conf->headers_source == NULL) {
- return NGX_ERROR;
- }
- }
-
headers->lengths = ngx_array_create(cf->pool, 64, 1);
if (headers->lengths == NULL) {
return NGX_ERROR;
@@ -3410,15 +3430,18 @@
return NGX_ERROR;
}
- src = conf->headers_source->elts;
- for (i = 0; i < conf->headers_source->nelts; i++) {
+ if (conf->headers_source) {
- s = ngx_array_push(&headers_merged);
- if (s == NULL) {
- return NGX_ERROR;
- }
+ src = conf->headers_source->elts;
+ for (i = 0; i < conf->headers_source->nelts; i++) {
- *s = src[i];
+ s = ngx_array_push(&headers_merged);
+ if (s == NULL) {
+ return NGX_ERROR;
+ }
+
+ *s = src[i];
+ }
}
h = default_headers;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/modules/ngx_http_range_filter_module.c
^
|
@@ -224,12 +224,6 @@
ctx->offset = r->headers_out.content_offset;
- if (ngx_array_init(&ctx->ranges, r->pool, 1, sizeof(ngx_http_range_t))
- != NGX_OK)
- {
- return NGX_ERROR;
- }
-
ranges = r->single_range ? 1 : clcf->max_ranges;
switch (ngx_http_range_parse(r, ctx, ranges)) {
@@ -291,6 +285,12 @@
}
}
+ if (ngx_array_init(&ctx->ranges, r->pool, 1, sizeof(ngx_http_range_t))
+ != NGX_OK)
+ {
+ return NGX_ERROR;
+ }
+
p = r->headers_in.range->value.data + 6;
size = 0;
content_length = r->headers_out.content_length_n;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/modules/ngx_http_scgi_module.c
^
|
@@ -270,6 +270,13 @@
offsetof(ngx_http_scgi_loc_conf_t, upstream.cache_min_uses),
NULL },
+ { ngx_string("scgi_cache_max_range_offset"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_off_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_scgi_loc_conf_t, upstream.cache_max_range_offset),
+ NULL },
+
{ ngx_string("scgi_cache_use_stale"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
ngx_conf_set_bitmask_slot,
@@ -562,16 +569,14 @@
return NGX_ERROR;
}
- if (url.addrs && url.addrs[0].sockaddr) {
+ if (url.addrs) {
u->resolved->sockaddr = url.addrs[0].sockaddr;
u->resolved->socklen = url.addrs[0].socklen;
+ u->resolved->name = url.addrs[0].name;
u->resolved->naddrs = 1;
- u->resolved->host = url.addrs[0].name;
-
- } else {
- u->resolved->host = url.host;
}
+ u->resolved->host = url.host;
u->resolved->port = url.port;
u->resolved->no_port = url.no_port;
@@ -1206,6 +1211,7 @@
#if (NGX_HTTP_CACHE)
conf->upstream.cache = NGX_CONF_UNSET;
conf->upstream.cache_min_uses = NGX_CONF_UNSET_UINT;
+ conf->upstream.cache_max_range_offset = NGX_CONF_UNSET;
conf->upstream.cache_bypass = NGX_CONF_UNSET_PTR;
conf->upstream.no_cache = NGX_CONF_UNSET_PTR;
conf->upstream.cache_valid = NGX_CONF_UNSET_PTR;
@@ -1446,6 +1452,10 @@
ngx_conf_merge_uint_value(conf->upstream.cache_min_uses,
prev->upstream.cache_min_uses, 1);
+ ngx_conf_merge_off_value(conf->upstream.cache_max_range_offset,
+ prev->upstream.cache_max_range_offset,
+ NGX_MAX_OFF_T_VALUE);
+
ngx_conf_merge_bitmask_value(conf->upstream.cache_use_stale,
prev->upstream.cache_use_stale,
(NGX_CONF_BITMASK_SET
@@ -1558,6 +1568,20 @@
#endif
+ /*
+ * special handling to preserve conf->params in the "http" section
+ * to inherit it to all servers
+ */
+
+ if (prev->params.hash.buckets == NULL
+ && conf->params_source == prev->params_source)
+ {
+ prev->params = conf->params;
+#if (NGX_HTTP_CACHE)
+ prev->params_cache = conf->params_cache;
+#endif
+ }
+
return NGX_CONF_OK;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/modules/ngx_http_ssl_module.c
^
|
@@ -298,6 +298,12 @@
{ ngx_string("ssl_client_i_dn"), NULL, ngx_http_ssl_variable,
(uintptr_t) ngx_ssl_get_issuer_dn, NGX_HTTP_VAR_CHANGEABLE, 0 },
+ { ngx_string("ssl_client_s_dn_legacy"), NULL, ngx_http_ssl_variable,
+ (uintptr_t) ngx_ssl_get_subject_dn_legacy, NGX_HTTP_VAR_CHANGEABLE, 0 },
+
+ { ngx_string("ssl_client_i_dn_legacy"), NULL, ngx_http_ssl_variable,
+ (uintptr_t) ngx_ssl_get_issuer_dn_legacy, NGX_HTTP_VAR_CHANGEABLE, 0 },
+
{ ngx_string("ssl_client_serial"), NULL, ngx_http_ssl_variable,
(uintptr_t) ngx_ssl_get_serial_number, NGX_HTTP_VAR_CHANGEABLE, 0 },
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/modules/ngx_http_uwsgi_module.c
^
|
@@ -330,6 +330,13 @@
offsetof(ngx_http_uwsgi_loc_conf_t, upstream.cache_min_uses),
NULL },
+ { ngx_string("uwsgi_cache_max_range_offset"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_off_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_uwsgi_loc_conf_t, upstream.cache_max_range_offset),
+ NULL },
+
{ ngx_string("uwsgi_cache_use_stale"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
ngx_conf_set_bitmask_slot,
@@ -764,16 +771,14 @@
return NGX_ERROR;
}
- if (url.addrs && url.addrs[0].sockaddr) {
+ if (url.addrs) {
u->resolved->sockaddr = url.addrs[0].sockaddr;
u->resolved->socklen = url.addrs[0].socklen;
+ u->resolved->name = url.addrs[0].name;
u->resolved->naddrs = 1;
- u->resolved->host = url.addrs[0].name;
-
- } else {
- u->resolved->host = url.host;
}
+ u->resolved->host = url.host;
u->resolved->port = url.port;
u->resolved->no_port = url.no_port;
@@ -1412,6 +1417,7 @@
#if (NGX_HTTP_CACHE)
conf->upstream.cache = NGX_CONF_UNSET;
conf->upstream.cache_min_uses = NGX_CONF_UNSET_UINT;
+ conf->upstream.cache_max_range_offset = NGX_CONF_UNSET;
conf->upstream.cache_bypass = NGX_CONF_UNSET_PTR;
conf->upstream.no_cache = NGX_CONF_UNSET_PTR;
conf->upstream.cache_valid = NGX_CONF_UNSET_PTR;
@@ -1660,6 +1666,10 @@
ngx_conf_merge_uint_value(conf->upstream.cache_min_uses,
prev->upstream.cache_min_uses, 1);
+ ngx_conf_merge_off_value(conf->upstream.cache_max_range_offset,
+ prev->upstream.cache_max_range_offset,
+ NGX_MAX_OFF_T_VALUE);
+
ngx_conf_merge_bitmask_value(conf->upstream.cache_use_stale,
prev->upstream.cache_use_stale,
(NGX_CONF_BITMASK_SET
@@ -1820,6 +1830,20 @@
#endif
+ /*
+ * special handling to preserve conf->params in the "http" section
+ * to inherit it to all servers
+ */
+
+ if (prev->params.hash.buckets == NULL
+ && conf->params_source == prev->params_source)
+ {
+ prev->params = conf->params;
+#if (NGX_HTTP_CACHE)
+ prev->params_cache = conf->params_cache;
+#endif
+ }
+
return NGX_CONF_OK;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/modules/perl/ngx_http_perl_module.c
^
|
@@ -410,7 +410,7 @@
args = ¶ms[NGX_HTTP_PERL_SSI_ARG];
- if (args) {
+ if (args[0]) {
for (i = 0; args[i]; i++) { /* void */ }
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/ngx_http_cache.h
^
|
@@ -151,7 +151,6 @@
ngx_slab_pool_t *shpool;
ngx_path_t *path;
- ngx_path_t *temp_path;
off_t max_size;
size_t bsize;
@@ -171,6 +170,9 @@
ngx_msec_t manager_threshold;
ngx_shm_zone_t *shm_zone;
+
+ ngx_uint_t use_temp_path;
+ /* unsigned use_temp_path:1 */
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/ngx_http_core_module.c
^
|
@@ -4827,8 +4827,6 @@
case NGX_HTTPS_CERT_ERROR:
case NGX_HTTPS_NO_CERT:
err->overwrite = NGX_HTTP_BAD_REQUEST;
- default:
- break;
}
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/ngx_http_file_cache.c
^
|
@@ -1920,17 +1920,18 @@
ngx_http_file_cache_t *cache = data;
off_t size;
- time_t next, wait;
- ngx_msec_t elapsed;
+ time_t wait;
+ ngx_msec_t elapsed, next;
ngx_uint_t count, watermark;
cache->last = ngx_current_msec;
cache->files = 0;
- next = ngx_http_file_cache_expire(cache);
+ next = (ngx_msec_t) ngx_http_file_cache_expire(cache) * 1000;
if (next == 0) {
- return cache->manager_sleep;
+ next = cache->manager_sleep;
+ goto done;
}
for ( ;; ) {
@@ -1947,21 +1948,23 @@
size, count, (ngx_int_t) watermark);
if (size < cache->max_size && count < watermark) {
- return (ngx_msec_t) next * 1000;
+ break;
}
wait = ngx_http_file_cache_forced_expire(cache);
if (wait > 0) {
- return (ngx_msec_t) wait * 1000;
+ next = (ngx_msec_t) wait * 1000;
+ break;
}
if (ngx_quit || ngx_terminate) {
- return (ngx_msec_t) next * 1000;
+ break;
}
if (++cache->files >= cache->manager_files) {
- return cache->manager_sleep;
+ next = cache->manager_sleep;
+ break;
}
ngx_time_update();
@@ -1969,9 +1972,20 @@
elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last));
if (elapsed >= cache->manager_threshold) {
- return cache->manager_sleep;
+ next = cache->manager_sleep;
+ break;
}
}
+
+done:
+
+ elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last));
+
+ ngx_log_debug3(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0,
+ "http file cache manager: %ui e:%M n:%M",
+ cache->files, elapsed, next);
+
+ return next;
}
@@ -2098,6 +2112,17 @@
return NGX_ERROR;
}
+ /*
+ * Temporary files in cache have a suffix consisting of a dot
+ * followed by 10 digits.
+ */
+
+ if (name->len >= 2 * NGX_HTTP_CACHE_KEY_LEN + 1 + 10
+ && name->data[name->len - 10 - 1] == '.')
+ {
+ return NGX_OK;
+ }
+
if (ctx->size < (off_t) sizeof(ngx_http_file_cache_header_t)) {
ngx_log_error(NGX_LOG_CRIT, ctx->log, 0,
"cache file \"%s\" is too small", name->data);
@@ -2242,7 +2267,6 @@
off_t max_size;
u_char *last, *p;
time_t inactive;
- size_t len;
ssize_t size;
ngx_str_t s, name, *value;
ngx_int_t loader_files, manager_files;
@@ -2515,37 +2539,6 @@
return NGX_CONF_ERROR;
}
- if (!use_temp_path) {
- cache->temp_path = ngx_pcalloc(cf->pool, sizeof(ngx_path_t));
- if (cache->temp_path == NULL) {
- return NGX_CONF_ERROR;
- }
-
- len = cache->path->name.len + sizeof("/temp") - 1;
-
- p = ngx_pnalloc(cf->pool, len + 1);
- if (p == NULL) {
- return NGX_CONF_ERROR;
- }
-
- cache->temp_path->name.len = len;
- cache->temp_path->name.data = p;
-
- p = ngx_cpymem(p, cache->path->name.data, cache->path->name.len);
- ngx_memcpy(p, "/temp", sizeof("/temp"));
-
- ngx_memcpy(&cache->temp_path->level, &cache->path->level,
- NGX_MAX_PATH_LEVEL * sizeof(size_t));
-
- cache->temp_path->len = cache->path->len;
- cache->temp_path->conf_file = cf->conf_file->file.name.data;
- cache->temp_path->line = cf->conf_file->line;
-
- if (ngx_add_path(cf, &cache->temp_path) != NGX_OK) {
- return NGX_CONF_ERROR;
- }
- }
-
cache->shm_zone = ngx_shared_memory_add(cf, &name, size, cmd->post);
if (cache->shm_zone == NULL) {
return NGX_CONF_ERROR;
@@ -2561,6 +2554,8 @@
cache->shm_zone->init = ngx_http_file_cache_init;
cache->shm_zone->data = cache;
+ cache->use_temp_path = use_temp_path;
+
cache->inactive = inactive;
cache->max_size = max_size;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/ngx_http_special_response.c
^
|
@@ -473,7 +473,6 @@
case NGX_HTTPS_NO_CERT:
case NGX_HTTP_REQUEST_HEADER_TOO_LARGE:
r->err_status = NGX_HTTP_BAD_REQUEST;
- break;
}
} else {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/ngx_http_upstream.c
^
|
@@ -17,6 +17,8 @@
ngx_http_upstream_t *u, ngx_http_file_cache_t **cache);
static ngx_int_t ngx_http_upstream_cache_send(ngx_http_request_t *r,
ngx_http_upstream_t *u);
+static ngx_int_t ngx_http_upstream_cache_check_range(ngx_http_request_t *r,
+ ngx_http_upstream_t *u);
static ngx_int_t ngx_http_upstream_cache_status(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_upstream_cache_last_modified(ngx_http_request_t *r,
@@ -654,6 +656,23 @@
host = &u->resolved->host;
+ umcf = ngx_http_get_module_main_conf(r, ngx_http_upstream_module);
+
+ uscfp = umcf->upstreams.elts;
+
+ for (i = 0; i < umcf->upstreams.nelts; i++) {
+
+ uscf = uscfp[i];
+
+ if (uscf->host.len == host->len
+ && ((uscf->port == 0 && u->resolved->no_port)
+ || uscf->port == u->resolved->port)
+ && ngx_strncasecmp(uscf->host.data, host->data, host->len) == 0)
+ {
+ goto found;
+ }
+ }
+
if (u->resolved->sockaddr) {
if (u->resolved->port == 0
@@ -679,23 +698,6 @@
return;
}
- umcf = ngx_http_get_module_main_conf(r, ngx_http_upstream_module);
-
- uscfp = umcf->upstreams.elts;
-
- for (i = 0; i < umcf->upstreams.nelts; i++) {
-
- uscf = uscfp[i];
-
- if (uscf->host.len == host->len
- && ((uscf->port == 0 && u->resolved->no_port)
- || uscf->port == u->resolved->port)
- && ngx_strncasecmp(uscf->host.data, host->data, host->len) == 0)
- {
- goto found;
- }
- }
-
if (u->resolved->port == 0) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"no port in upstream \"%V\"", host);
@@ -922,6 +924,10 @@
return rc;
}
+ if (ngx_http_upstream_cache_check_range(r, u) == NGX_DECLINED) {
+ u->cacheable = 0;
+ }
+
r->cached = 0;
return NGX_DECLINED;
@@ -1023,6 +1029,55 @@
return rc;
}
+
+static ngx_int_t
+ngx_http_upstream_cache_check_range(ngx_http_request_t *r,
+ ngx_http_upstream_t *u)
+{
+ off_t offset;
+ u_char *p, *start;
+ ngx_table_elt_t *h;
+
+ h = r->headers_in.range;
+
+ if (h == NULL
+ || !u->cacheable
+ || u->conf->cache_max_range_offset == NGX_MAX_OFF_T_VALUE)
+ {
+ return NGX_OK;
+ }
+
+ if (u->conf->cache_max_range_offset == 0) {
+ return NGX_DECLINED;
+ }
+
+ if (h->value.len < 7
+ || ngx_strncasecmp(h->value.data, (u_char *) "bytes=", 6) != 0)
+ {
+ return NGX_OK;
+ }
+
+ p = h->value.data + 6;
+
+ while (*p == ' ') { p++; }
+
+ if (*p == '-') {
+ return NGX_DECLINED;
+ }
+
+ start = p;
+
+ while (*p >= '0' && *p <= '9') { p++; }
+
+ offset = ngx_atoof(start, p - start);
+
+ if (offset >= u->conf->cache_max_range_offset) {
+ return NGX_DECLINED;
+ }
+
+ return NGX_OK;
+}
+
#endif
@@ -1611,6 +1666,13 @@
return;
}
+ if (c->write->timedout) {
+ c = r->connection;
+ ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_TIMEOUT);
+ ngx_http_run_posted_requests(c);
+ return;
+ }
+
failed:
c = r->connection;
@@ -1696,7 +1758,10 @@
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"upstream SSL server name: \"%s\"", name.data);
- if (SSL_set_tlsext_host_name(c->ssl->connection, name.data) == 0) {
+ if (SSL_set_tlsext_host_name(c->ssl->connection,
+ (char *) name.data)
+ == 0)
+ {
ngx_ssl_error(NGX_LOG_ERR, r->connection->log, 0,
"SSL_set_tlsext_host_name(\"%s\") failed", name.data);
return NGX_ERROR;
@@ -2702,6 +2767,15 @@
u->header_sent = 1;
if (u->upgrade) {
+
+#if (NGX_HTTP_CACHE)
+
+ if (r->cache) {
+ ngx_http_file_cache_free(r->cache, u->pipe->temp_file);
+ }
+
+#endif
+
ngx_http_upstream_upgrade(r, u);
return;
}
@@ -2732,6 +2806,14 @@
if (!u->buffering) {
+#if (NGX_HTTP_CACHE)
+
+ if (r->cache) {
+ ngx_http_file_cache_free(r->cache, u->pipe->temp_file);
+ }
+
+#endif
+
if (u->input_filter == NULL) {
u->input_filter_init = ngx_http_upstream_non_buffered_filter_init;
u->input_filter = ngx_http_upstream_non_buffered_filter;
@@ -2922,8 +3004,9 @@
p->temp_file->persistent = 1;
#if (NGX_HTTP_CACHE)
- if (r->cache && r->cache->file_cache->temp_path) {
- p->temp_file->path = r->cache->file_cache->temp_path;
+ if (r->cache && !r->cache->file_cache->use_temp_path) {
+ p->temp_file->path = r->cache->file_cache->path;
+ p->temp_file->file.name = r->cache->file.name;
}
#endif
@@ -5757,14 +5840,9 @@
continue;
}
- if (uscfp[i]->default_port && u->default_port
- && uscfp[i]->default_port != u->default_port)
- {
- continue;
- }
-
if (flags & NGX_HTTP_UPSTREAM_CREATE) {
uscfp[i]->flags = flags;
+ uscfp[i]->port = 0;
}
return uscfp[i];
@@ -5780,7 +5858,6 @@
uscf->file_name = cf->conf_file->file.name.data;
uscf->line = cf->conf_file->line;
uscf->port = u->port;
- uscf->default_port = u->default_port;
uscf->no_port = u->no_port;
if (u->naddrs == 1 && (u->port || u->family == AF_UNIX)) {
@@ -6021,12 +6098,7 @@
conf->hide_headers_hash = prev->hide_headers_hash;
- if (conf->hide_headers_hash.buckets
-#if (NGX_HTTP_CACHE)
- && ((conf->cache == 0) == (prev->cache == 0))
-#endif
- )
- {
+ if (conf->hide_headers_hash.buckets) {
return NGX_OK;
}
@@ -6111,7 +6183,23 @@
hash->pool = cf->pool;
hash->temp_pool = NULL;
- return ngx_hash_init(hash, hide_headers.elts, hide_headers.nelts);
+ if (ngx_hash_init(hash, hide_headers.elts, hide_headers.nelts) != NGX_OK) {
+ return NGX_ERROR;
+ }
+
+ /*
+ * special handling to preserve conf->hide_headers_hash
+ * in the "http" section to inherit it to all servers
+ */
+
+ if (prev->hide_headers_hash.buckets == NULL
+ && conf->hide_headers == prev->hide_headers
+ && conf->pass_headers == prev->pass_headers)
+ {
+ prev->hide_headers_hash = conf->hide_headers_hash;
+ }
+
+ return NGX_OK;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/ngx_http_upstream.h
^
|
@@ -128,7 +128,6 @@
u_char *file_name;
ngx_uint_t line;
in_port_t port;
- in_port_t default_port;
ngx_uint_t no_port; /* unsigned no_port:1 */
#if (NGX_HTTP_UPSTREAM_ZONE)
@@ -199,6 +198,8 @@
ngx_uint_t cache_use_stale;
ngx_uint_t cache_methods;
+ off_t cache_max_range_offset;
+
ngx_flag_t cache_lock;
ngx_msec_t cache_lock_timeout;
ngx_msec_t cache_lock_age;
@@ -300,6 +301,7 @@
struct sockaddr *sockaddr;
socklen_t socklen;
+ ngx_str_t name;
ngx_resolver_ctx_t *ctx;
} ngx_http_upstream_resolved_t;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/ngx_http_upstream_round_robin.c
^
|
@@ -337,7 +337,7 @@
if (ur->sockaddr) {
peer[0].sockaddr = ur->sockaddr;
peer[0].socklen = ur->socklen;
- peer[0].name = ur->host;
+ peer[0].name = ur->name.data ? ur->name : ur->host;
peer[0].weight = 1;
peer[0].effective_weight = 1;
peer[0].current_weight = 0;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/v2/ngx_http_v2.c
^
|
@@ -136,6 +136,8 @@
ngx_uint_t sid, size_t window);
static ngx_int_t ngx_http_v2_send_rst_stream(ngx_http_v2_connection_t *h2c,
ngx_uint_t sid, ngx_uint_t status);
+static ngx_int_t ngx_http_v2_send_goaway(ngx_http_v2_connection_t *h2c,
+ ngx_uint_t status);
static ngx_http_v2_out_frame_t *ngx_http_v2_get_frame(
ngx_http_v2_connection_t *h2c, size_t length, ngx_uint_t type,
@@ -293,6 +295,8 @@
rev->handler = ngx_http_v2_read_handler;
c->write->handler = ngx_http_v2_write_handler;
+ c->idle = 1;
+
ngx_http_v2_read_handler(rev);
}
@@ -320,6 +324,30 @@
h2c->blocked = 1;
+ if (c->close) {
+ c->close = 0;
+
+ if (!h2c->goaway) {
+ h2c->goaway = 1;
+
+ if (ngx_http_v2_send_goaway(h2c, NGX_HTTP_V2_NO_ERROR)
+ == NGX_ERROR)
+ {
+ ngx_http_v2_finalize_connection(h2c, 0);
+ return;
+ }
+
+ if (ngx_http_v2_send_output_queue(h2c) == NGX_ERROR) {
+ ngx_http_v2_finalize_connection(h2c, 0);
+ return;
+ }
+ }
+
+ h2c->blocked = 0;
+
+ return;
+ }
+
h2mcf = ngx_http_get_module_main_conf(h2c->http_connection->conf_ctx,
ngx_http_v2_module);
@@ -633,6 +661,11 @@
/* rc == NGX_OK */
}
+ if (h2c->goaway) {
+ ngx_http_close_connection(c);
+ return;
+ }
+
h2scf = ngx_http_get_module_srv_conf(h2c->http_connection->conf_ctx,
ngx_http_v2_module);
if (h2c->state.incomplete) {
@@ -640,11 +673,6 @@
return;
}
- if (ngx_terminate || ngx_exiting) {
- ngx_http_v2_finalize_connection(h2c, NGX_HTTP_V2_NO_ERROR);
- return;
- }
-
ngx_destroy_pool(h2c->pool);
h2c->pool = NULL;
@@ -658,7 +686,6 @@
#endif
c->destroyed = 1;
- c->idle = 1;
ngx_reusable_connection(c, 1);
c->write->handler = ngx_http_empty_handler;
@@ -1027,6 +1054,12 @@
return ngx_http_v2_connection_error(h2c, NGX_HTTP_V2_SIZE_ERROR);
}
+ if (h2c->goaway) {
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
+ "skipping http2 HEADERS frame");
+ return ngx_http_v2_state_skip(h2c, pos, end);
+ }
+
if ((size_t) (end - pos) < size) {
return ngx_http_v2_state_save(h2c, pos, end,
ngx_http_v2_state_headers);
@@ -1149,6 +1182,15 @@
ngx_http_v2_set_dependency(h2c, node, depend, excl);
}
+ if (h2c->connection->requests >= h2scf->max_requests) {
+ h2c->goaway = 1;
+
+ if (ngx_http_v2_send_goaway(h2c, NGX_HTTP_V2_NO_ERROR) == NGX_ERROR) {
+ return ngx_http_v2_connection_error(h2c,
+ NGX_HTTP_V2_INTERNAL_ERROR);
+ }
+ }
+
return ngx_http_v2_state_header_block(h2c, pos, end);
rst_stream:
@@ -2550,7 +2592,7 @@
ngx_http_v2_out_frame_t *frame;
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
- "http2 send RST_STREAM frame sid:%ui, status:%uz",
+ "http2 send RST_STREAM frame sid:%ui, status:%ui",
sid, status);
frame = ngx_http_v2_get_frame(h2c, NGX_HTTP_V2_RST_STREAM_SIZE,
@@ -2576,8 +2618,9 @@
ngx_buf_t *buf;
ngx_http_v2_out_frame_t *frame;
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
- "http2 send GOAWAY frame, status:%uz", status);
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
+ "http2 send GOAWAY frame: last sid %ui, error %ui",
+ h2c->last_sid, status);
frame = ngx_http_v2_get_frame(h2c, NGX_HTTP_V2_GOAWAY_SIZE,
NGX_HTTP_V2_GOAWAY_FRAME,
@@ -4162,7 +4205,6 @@
#endif
c->destroyed = 0;
- c->idle = 0;
ngx_reusable_connection(c, 0);
h2scf = ngx_http_get_module_srv_conf(h2c->http_connection->conf_ctx,
@@ -4197,8 +4239,10 @@
h2c->blocked = 1;
- if (!c->error && ngx_http_v2_send_goaway(h2c, status) != NGX_ERROR) {
- (void) ngx_http_v2_send_output_queue(h2c);
+ if (!c->error && !h2c->goaway) {
+ if (ngx_http_v2_send_goaway(h2c, status) != NGX_ERROR) {
+ (void) ngx_http_v2_send_output_queue(h2c);
+ }
}
c->error = 1;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/v2/ngx_http_v2.h
^
|
@@ -146,6 +146,7 @@
unsigned closed_nodes:8;
unsigned settings_ack:1;
unsigned blocked:1;
+ unsigned goaway:1;
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/v2/ngx_http_v2_filter_module.c
^
|
@@ -1079,6 +1079,10 @@
ngx_http_v2_flow_control(ngx_http_v2_connection_t *h2c,
ngx_http_v2_stream_t *stream)
{
+ ngx_log_debug3(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
+ "http2:%ui available windows: conn:%uz stream:%z",
+ stream->node->id, h2c->send_window, stream->send_window);
+
if (stream->send_window <= 0) {
stream->exhausted = 1;
return NGX_DECLINED;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/v2/ngx_http_v2_module.c
^
|
@@ -73,6 +73,13 @@
offsetof(ngx_http_v2_srv_conf_t, concurrent_streams),
NULL },
+ { ngx_string("http2_max_requests"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_num_slot,
+ NGX_HTTP_SRV_CONF_OFFSET,
+ offsetof(ngx_http_v2_srv_conf_t, max_requests),
+ NULL },
+
{ ngx_string("http2_max_field_size"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
ngx_conf_set_size_slot,
@@ -322,6 +329,7 @@
h2scf->pool_size = NGX_CONF_UNSET_SIZE;
h2scf->concurrent_streams = NGX_CONF_UNSET_UINT;
+ h2scf->max_requests = NGX_CONF_UNSET_UINT;
h2scf->max_field_size = NGX_CONF_UNSET_SIZE;
h2scf->max_header_size = NGX_CONF_UNSET_SIZE;
@@ -347,6 +355,7 @@
ngx_conf_merge_uint_value(conf->concurrent_streams,
prev->concurrent_streams, 128);
+ ngx_conf_merge_uint_value(conf->max_requests, prev->max_requests, 1000);
ngx_conf_merge_size_value(conf->max_field_size, prev->max_field_size,
4096);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/http/v2/ngx_http_v2_module.h
^
|
@@ -23,6 +23,7 @@
typedef struct {
size_t pool_size;
ngx_uint_t concurrent_streams;
+ ngx_uint_t max_requests;
size_t max_field_size;
size_t max_header_size;
size_t preread_size;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/mail/ngx_mail.h
^
|
@@ -132,7 +132,8 @@
ngx_pop3_auth_login_username,
ngx_pop3_auth_login_password,
ngx_pop3_auth_plain,
- ngx_pop3_auth_cram_md5
+ ngx_pop3_auth_cram_md5,
+ ngx_pop3_auth_external
} ngx_pop3_state_e;
@@ -142,6 +143,7 @@
ngx_imap_auth_login_password,
ngx_imap_auth_plain,
ngx_imap_auth_cram_md5,
+ ngx_imap_auth_external,
ngx_imap_login,
ngx_imap_user,
ngx_imap_passwd
@@ -154,6 +156,7 @@
ngx_smtp_auth_login_password,
ngx_smtp_auth_plain,
ngx_smtp_auth_cram_md5,
+ ngx_smtp_auth_external,
ngx_smtp_helo,
ngx_smtp_helo_xclient,
ngx_smtp_helo_from,
@@ -285,14 +288,16 @@
#define NGX_MAIL_AUTH_LOGIN_USERNAME 2
#define NGX_MAIL_AUTH_APOP 3
#define NGX_MAIL_AUTH_CRAM_MD5 4
-#define NGX_MAIL_AUTH_NONE 5
+#define NGX_MAIL_AUTH_EXTERNAL 5
+#define NGX_MAIL_AUTH_NONE 6
#define NGX_MAIL_AUTH_PLAIN_ENABLED 0x0002
#define NGX_MAIL_AUTH_LOGIN_ENABLED 0x0004
#define NGX_MAIL_AUTH_APOP_ENABLED 0x0008
#define NGX_MAIL_AUTH_CRAM_MD5_ENABLED 0x0010
-#define NGX_MAIL_AUTH_NONE_ENABLED 0x0020
+#define NGX_MAIL_AUTH_EXTERNAL_ENABLED 0x0020
+#define NGX_MAIL_AUTH_NONE_ENABLED 0x0040
#define NGX_MAIL_PARSE_INVALID_COMMAND 20
@@ -377,6 +382,8 @@
ngx_int_t ngx_mail_auth_cram_md5_salt(ngx_mail_session_t *s,
ngx_connection_t *c, char *prefix, size_t len);
ngx_int_t ngx_mail_auth_cram_md5(ngx_mail_session_t *s, ngx_connection_t *c);
+ngx_int_t ngx_mail_auth_external(ngx_mail_session_t *s, ngx_connection_t *c,
+ ngx_uint_t n);
ngx_int_t ngx_mail_auth_parse(ngx_mail_session_t *s, ngx_connection_t *c);
void ngx_mail_send(ngx_event_t *wev);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/mail/ngx_mail_auth_http_module.c
^
|
@@ -151,6 +151,7 @@
ngx_string("plain"),
ngx_string("apop"),
ngx_string("cram-md5"),
+ ngx_string("external"),
ngx_string("none")
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/mail/ngx_mail_handler.c
^
|
@@ -612,6 +612,40 @@
}
+ngx_int_t
+ngx_mail_auth_external(ngx_mail_session_t *s, ngx_connection_t *c,
+ ngx_uint_t n)
+{
+ ngx_str_t *arg, external;
+
+ arg = s->args.elts;
+
+ ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0,
+ "mail auth external: \"%V\"", &arg[n]);
+
+ external.data = ngx_pnalloc(c->pool, ngx_base64_decoded_length(arg[n].len));
+ if (external.data == NULL) {
+ return NGX_ERROR;
+ }
+
+ if (ngx_decode_base64(&external, &arg[n]) != NGX_OK) {
+ ngx_log_error(NGX_LOG_INFO, c->log, 0,
+ "client sent invalid base64 encoding in AUTH EXTERNAL command");
+ return NGX_MAIL_PARSE_INVALID_COMMAND;
+ }
+
+ s->login.len = external.len;
+ s->login.data = external.data;
+
+ ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0,
+ "mail auth external: \"%V\"", &s->login);
+
+ s->auth_method = NGX_MAIL_AUTH_EXTERNAL;
+
+ return NGX_DONE;
+}
+
+
void
ngx_mail_send(ngx_event_t *wev)
{
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/mail/ngx_mail_imap_handler.c
^
|
@@ -222,6 +222,10 @@
case ngx_imap_auth_cram_md5:
rc = ngx_mail_auth_cram_md5(s, c);
break;
+
+ case ngx_imap_auth_external:
+ rc = ngx_mail_auth_external(s, c, 0);
+ break;
}
} else if (rc == NGX_IMAP_NEXT) {
@@ -399,6 +403,13 @@
}
return NGX_ERROR;
+
+ case NGX_MAIL_AUTH_EXTERNAL:
+
+ ngx_str_set(&s->out, imap_username);
+ s->mail_state = ngx_imap_auth_external;
+
+ return NGX_OK;
}
return rc;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/mail/ngx_mail_imap_module.c
^
|
@@ -29,6 +29,7 @@
{ ngx_string("plain"), NGX_MAIL_AUTH_PLAIN_ENABLED },
{ ngx_string("login"), NGX_MAIL_AUTH_LOGIN_ENABLED },
{ ngx_string("cram-md5"), NGX_MAIL_AUTH_CRAM_MD5_ENABLED },
+ { ngx_string("external"), NGX_MAIL_AUTH_EXTERNAL_ENABLED },
{ ngx_null_string, 0 }
};
@@ -38,6 +39,7 @@
ngx_string("AUTH=LOGIN"),
ngx_null_string, /* APOP */
ngx_string("AUTH=CRAM-MD5"),
+ ngx_string("AUTH=EXTERNAL"),
ngx_null_string /* NONE */
};
@@ -179,7 +181,7 @@
}
for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0;
- m <= NGX_MAIL_AUTH_CRAM_MD5_ENABLED;
+ m <= NGX_MAIL_AUTH_EXTERNAL_ENABLED;
m <<= 1, i++)
{
if (m & conf->auth_methods) {
@@ -205,7 +207,7 @@
auth = p;
for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0;
- m <= NGX_MAIL_AUTH_CRAM_MD5_ENABLED;
+ m <= NGX_MAIL_AUTH_EXTERNAL_ENABLED;
m <<= 1, i++)
{
if (m & conf->auth_methods) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/mail/ngx_mail_parse.c
^
|
@@ -905,13 +905,27 @@
if (arg[0].len == 8) {
- if (s->args.nelts != 1) {
- return NGX_MAIL_PARSE_INVALID_COMMAND;
- }
-
if (ngx_strncasecmp(arg[0].data, (u_char *) "CRAM-MD5", 8) == 0) {
+
+ if (s->args.nelts != 1) {
+ return NGX_MAIL_PARSE_INVALID_COMMAND;
+ }
+
return NGX_MAIL_AUTH_CRAM_MD5;
}
+
+ if (ngx_strncasecmp(arg[0].data, (u_char *) "EXTERNAL", 8) == 0) {
+
+ if (s->args.nelts == 1) {
+ return NGX_MAIL_AUTH_EXTERNAL;
+ }
+
+ if (s->args.nelts == 2) {
+ return ngx_mail_auth_external(s, c, 1);
+ }
+ }
+
+ return NGX_MAIL_PARSE_INVALID_COMMAND;
}
return NGX_MAIL_PARSE_INVALID_COMMAND;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/mail/ngx_mail_pop3_handler.c
^
|
@@ -240,6 +240,10 @@
case ngx_pop3_auth_cram_md5:
rc = ngx_mail_auth_cram_md5(s, c);
break;
+
+ case ngx_pop3_auth_external:
+ rc = ngx_mail_auth_external(s, c, 0);
+ break;
}
}
@@ -494,6 +498,13 @@
}
return NGX_ERROR;
+
+ case NGX_MAIL_AUTH_EXTERNAL:
+
+ ngx_str_set(&s->out, pop3_username);
+ s->mail_state = ngx_pop3_auth_external;
+
+ return NGX_OK;
}
return rc;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/mail/ngx_mail_pop3_module.c
^
|
@@ -29,23 +29,19 @@
{ ngx_string("plain"), NGX_MAIL_AUTH_PLAIN_ENABLED },
{ ngx_string("apop"), NGX_MAIL_AUTH_APOP_ENABLED },
{ ngx_string("cram-md5"), NGX_MAIL_AUTH_CRAM_MD5_ENABLED },
+ { ngx_string("external"), NGX_MAIL_AUTH_EXTERNAL_ENABLED },
{ ngx_null_string, 0 }
};
-static ngx_str_t ngx_mail_pop3_auth_plain_capability =
- ngx_string("+OK methods supported:" CRLF
- "LOGIN" CRLF
- "PLAIN" CRLF
- "." CRLF);
-
-
-static ngx_str_t ngx_mail_pop3_auth_cram_md5_capability =
- ngx_string("+OK methods supported:" CRLF
- "LOGIN" CRLF
- "PLAIN" CRLF
- "CRAM-MD5" CRLF
- "." CRLF);
+static ngx_str_t ngx_mail_pop3_auth_methods_names[] = {
+ ngx_string("PLAIN"),
+ ngx_string("LOGIN"),
+ ngx_null_string, /* APOP */
+ ngx_string("CRAM-MD5"),
+ ngx_string("EXTERNAL"),
+ ngx_null_string /* NONE */
+};
static ngx_mail_protocol_t ngx_mail_pop3_protocol = {
@@ -140,13 +136,17 @@
u_char *p;
size_t size, stls_only_size;
ngx_str_t *c, *d;
- ngx_uint_t i;
+ ngx_uint_t i, m;
ngx_conf_merge_bitmask_value(conf->auth_methods,
prev->auth_methods,
(NGX_CONF_BITMASK_SET
|NGX_MAIL_AUTH_PLAIN_ENABLED));
+ if (conf->auth_methods & NGX_MAIL_AUTH_PLAIN_ENABLED) {
+ conf->auth_methods |= NGX_MAIL_AUTH_LOGIN_ENABLED;
+ }
+
if (conf->capabilities.nelts == 0) {
conf->capabilities = prev->capabilities;
}
@@ -179,11 +179,15 @@
stls_only_size += c[i].len + sizeof(CRLF) - 1;
}
- if (conf->auth_methods & NGX_MAIL_AUTH_CRAM_MD5_ENABLED) {
- size += sizeof("SASL LOGIN PLAIN CRAM-MD5" CRLF) - 1;
+ size += sizeof("SASL") - 1 + sizeof(CRLF) - 1;
- } else {
- size += sizeof("SASL LOGIN PLAIN" CRLF) - 1;
+ for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0;
+ m <= NGX_MAIL_AUTH_EXTERNAL_ENABLED;
+ m <<= 1, i++)
+ {
+ if (m & conf->auth_methods) {
+ size += 1 + ngx_mail_pop3_auth_methods_names[i].len;
+ }
}
p = ngx_pnalloc(cf->pool, size);
@@ -202,15 +206,21 @@
*p++ = CR; *p++ = LF;
}
- if (conf->auth_methods & NGX_MAIL_AUTH_CRAM_MD5_ENABLED) {
- p = ngx_cpymem(p, "SASL LOGIN PLAIN CRAM-MD5" CRLF,
- sizeof("SASL LOGIN PLAIN CRAM-MD5" CRLF) - 1);
-
- } else {
- p = ngx_cpymem(p, "SASL LOGIN PLAIN" CRLF,
- sizeof("SASL LOGIN PLAIN" CRLF) - 1);
+ p = ngx_cpymem(p, "SASL", sizeof("SASL") - 1);
+
+ for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0;
+ m <= NGX_MAIL_AUTH_EXTERNAL_ENABLED;
+ m <<= 1, i++)
+ {
+ if (m & conf->auth_methods) {
+ *p++ = ' ';
+ p = ngx_cpymem(p, ngx_mail_pop3_auth_methods_names[i].data,
+ ngx_mail_pop3_auth_methods_names[i].len);
+ }
}
+ *p++ = CR; *p++ = LF;
+
*p++ = '.'; *p++ = CR; *p = LF;
@@ -231,13 +241,43 @@
*p++ = '.'; *p++ = CR; *p = LF;
- if (conf->auth_methods & NGX_MAIL_AUTH_CRAM_MD5_ENABLED) {
- conf->auth_capability = ngx_mail_pop3_auth_cram_md5_capability;
+ size = sizeof("+OK methods supported:" CRLF) - 1
+ + sizeof("." CRLF) - 1;
- } else {
- conf->auth_capability = ngx_mail_pop3_auth_plain_capability;
+ for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0;
+ m <= NGX_MAIL_AUTH_EXTERNAL_ENABLED;
+ m <<= 1, i++)
+ {
+ if (m & conf->auth_methods) {
+ size += ngx_mail_pop3_auth_methods_names[i].len
+ + sizeof(CRLF) - 1;
+ }
}
+ p = ngx_pnalloc(cf->pool, size);
+ if (p == NULL) {
+ return NGX_CONF_ERROR;
+ }
+
+ conf->auth_capability.data = p;
+ conf->auth_capability.len = size;
+
+ p = ngx_cpymem(p, "+OK methods supported:" CRLF,
+ sizeof("+OK methods supported:" CRLF) - 1);
+
+ for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0;
+ m <= NGX_MAIL_AUTH_EXTERNAL_ENABLED;
+ m <<= 1, i++)
+ {
+ if (m & conf->auth_methods) {
+ p = ngx_cpymem(p, ngx_mail_pop3_auth_methods_names[i].data,
+ ngx_mail_pop3_auth_methods_names[i].len);
+ *p++ = CR; *p++ = LF;
+ }
+ }
+
+ *p++ = '.'; *p++ = CR; *p = LF;
+
p = ngx_pnalloc(cf->pool, stls_only_size);
if (p == NULL) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/mail/ngx_mail_smtp_handler.c
^
|
@@ -485,6 +485,10 @@
case ngx_smtp_auth_cram_md5:
rc = ngx_mail_auth_cram_md5(s, c);
break;
+
+ case ngx_smtp_auth_external:
+ rc = ngx_mail_auth_external(s, c, 0);
+ break;
}
}
@@ -652,6 +656,13 @@
}
return NGX_ERROR;
+
+ case NGX_MAIL_AUTH_EXTERNAL:
+
+ ngx_str_set(&s->out, smtp_username);
+ s->mail_state = ngx_smtp_auth_external;
+
+ return NGX_OK;
}
return rc;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/mail/ngx_mail_smtp_module.c
^
|
@@ -21,6 +21,7 @@
{ ngx_string("plain"), NGX_MAIL_AUTH_PLAIN_ENABLED },
{ ngx_string("login"), NGX_MAIL_AUTH_LOGIN_ENABLED },
{ ngx_string("cram-md5"), NGX_MAIL_AUTH_CRAM_MD5_ENABLED },
+ { ngx_string("external"), NGX_MAIL_AUTH_EXTERNAL_ENABLED },
{ ngx_string("none"), NGX_MAIL_AUTH_NONE_ENABLED },
{ ngx_null_string, 0 }
};
@@ -31,6 +32,7 @@
ngx_string("LOGIN"),
ngx_null_string, /* APOP */
ngx_string("CRAM-MD5"),
+ ngx_string("EXTERNAL"),
ngx_null_string /* NONE */
};
@@ -207,7 +209,7 @@
auth_enabled = 0;
for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0;
- m <= NGX_MAIL_AUTH_CRAM_MD5_ENABLED;
+ m <= NGX_MAIL_AUTH_EXTERNAL_ENABLED;
m <<= 1, i++)
{
if (m & conf->auth_methods) {
@@ -250,7 +252,7 @@
*p++ = 'A'; *p++ = 'U'; *p++ = 'T'; *p++ = 'H';
for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0;
- m <= NGX_MAIL_AUTH_CRAM_MD5_ENABLED;
+ m <= NGX_MAIL_AUTH_EXTERNAL_ENABLED;
m <<= 1, i++)
{
if (m & conf->auth_methods) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/stream/ngx_stream_proxy_module.c
^
|
@@ -433,6 +433,23 @@
host = &u->resolved->host;
+ umcf = ngx_stream_get_module_main_conf(s, ngx_stream_upstream_module);
+
+ uscfp = umcf->upstreams.elts;
+
+ for (i = 0; i < umcf->upstreams.nelts; i++) {
+
+ uscf = uscfp[i];
+
+ if (uscf->host.len == host->len
+ && ((uscf->port == 0 && u->resolved->no_port)
+ || uscf->port == u->resolved->port)
+ && ngx_strncasecmp(uscf->host.data, host->data, host->len) == 0)
+ {
+ goto found;
+ }
+ }
+
if (u->resolved->sockaddr) {
if (u->resolved->port == 0
@@ -456,23 +473,6 @@
return;
}
- umcf = ngx_stream_get_module_main_conf(s, ngx_stream_upstream_module);
-
- uscfp = umcf->upstreams.elts;
-
- for (i = 0; i < umcf->upstreams.nelts; i++) {
-
- uscf = uscfp[i];
-
- if (uscf->host.len == host->len
- && ((uscf->port == 0 && u->resolved->no_port)
- || uscf->port == u->resolved->port)
- && ngx_strncasecmp(uscf->host.data, host->data, host->len) == 0)
- {
- goto found;
- }
- }
-
if (u->resolved->port == 0) {
ngx_log_error(NGX_LOG_ERR, c->log, 0,
"no port in upstream \"%V\"", host);
@@ -578,16 +578,14 @@
return NGX_ERROR;
}
- if (url.addrs && url.addrs[0].sockaddr) {
+ if (url.addrs) {
u->resolved->sockaddr = url.addrs[0].sockaddr;
u->resolved->socklen = url.addrs[0].socklen;
+ u->resolved->name = url.addrs[0].name;
u->resolved->naddrs = 1;
- u->resolved->host = url.addrs[0].name;
-
- } else {
- u->resolved->host = url.host;
}
+ u->resolved->host = url.host;
u->resolved->port = url.port;
u->resolved->no_port = url.no_port;
@@ -1183,7 +1181,8 @@
ngx_log_debug1(NGX_LOG_DEBUG_STREAM, s->connection->log, 0,
"upstream SSL server name: \"%s\"", name.data);
- if (SSL_set_tlsext_host_name(u->peer.connection->ssl->connection, name.data)
+ if (SSL_set_tlsext_host_name(u->peer.connection->ssl->connection,
+ (char *) name.data)
== 0)
{
ngx_ssl_error(NGX_LOG_ERR, s->connection->log, 0,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/stream/ngx_stream_upstream.h
^
|
@@ -105,6 +105,7 @@
struct sockaddr *sockaddr;
socklen_t socklen;
+ ngx_str_t name;
ngx_resolver_ctx_t *ctx;
} ngx_stream_upstream_resolved_t;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.6.tar.gz/src/stream/ngx_stream_upstream_round_robin.c
^
|
@@ -344,7 +344,7 @@
if (ur->sockaddr) {
peer[0].sockaddr = ur->sockaddr;
peer[0].socklen = ur->socklen;
- peer[0].name = ur->host;
+ peer[0].name = ur->name;
peer[0].weight = 1;
peer[0].effective_weight = 1;
peer[0].current_weight = 0;
|
[-]
[+]
|
Changed |
nginx-rtmp-module-1.1.10.tar.gz/config
^
|
@@ -1,6 +1,6 @@
ngx_addon_name="ngx_rtmp_module"
-CORE_MODULES="$CORE_MODULES
+RTMP_CORE_MODULES=" \
ngx_rtmp_module \
ngx_rtmp_core_module \
ngx_rtmp_cmd_module \
@@ -15,6 +15,7 @@
ngx_rtmp_relay_module \
ngx_rtmp_exec_module \
ngx_rtmp_auto_push_module \
+ ngx_rtmp_auto_push_index_module \
ngx_rtmp_notify_module \
ngx_rtmp_log_module \
ngx_rtmp_limit_module \
@@ -23,13 +24,13 @@
"
-HTTP_MODULES="$HTTP_MODULES \
+RTMP_HTTP_MODULES=" \
ngx_rtmp_stat_module \
ngx_rtmp_control_module \
"
-NGX_ADDON_DEPS="$NGX_ADDON_DEPS \
+RTMP_DEPS=" \
$ngx_addon_dir/ngx_rtmp_amf.h \
$ngx_addon_dir/ngx_rtmp_bandwidth.h \
$ngx_addon_dir/ngx_rtmp_cmd_module.h \
@@ -50,7 +51,7 @@
"
-NGX_ADDON_SRCS="$NGX_ADDON_SRCS \
+RTMP_CORE_SRCS=" \
$ngx_addon_dir/ngx_rtmp.c \
$ngx_addon_dir/ngx_rtmp_init.c \
$ngx_addon_dir/ngx_rtmp_handshake.c \
@@ -70,8 +71,6 @@
$ngx_addon_dir/ngx_rtmp_flv_module.c \
$ngx_addon_dir/ngx_rtmp_mp4_module.c \
$ngx_addon_dir/ngx_rtmp_netcall_module.c \
- $ngx_addon_dir/ngx_rtmp_stat_module.c \
- $ngx_addon_dir/ngx_rtmp_control_module.c \
$ngx_addon_dir/ngx_rtmp_relay_module.c \
$ngx_addon_dir/ngx_rtmp_bandwidth.c \
$ngx_addon_dir/ngx_rtmp_exec_module.c \
@@ -86,7 +85,49 @@
$ngx_addon_dir/hls/ngx_rtmp_mpegts.c \
$ngx_addon_dir/dash/ngx_rtmp_mp4.c \
"
-CFLAGS="$CFLAGS -I$ngx_addon_dir"
+
+
+RTMP_HTTP_SRCS=" \
+ $ngx_addon_dir/ngx_rtmp_stat_module.c \
+ $ngx_addon_dir/ngx_rtmp_control_module.c \
+ "
+
+if [ -f auto/module ] ; then
+ ngx_module_incs=$ngx_addon_dir
+ ngx_module_deps=$RTMP_DEPS
+
+ if [ $ngx_module_link = DYNAMIC ] ; then
+ ngx_module_name="$RTMP_CORE_MODULES $RTMP_HTTP_MODULES"
+ ngx_module_srcs="$RTMP_CORE_SRCS $RTMP_HTTP_SRCS"
+
+ . auto/module
+
+ else
+ ngx_module_type=CORE
+ ngx_module_name=$RTMP_CORE_MODULES
+ ngx_module_srcs=$RTMP_CORE_SRCS
+
+ . auto/module
+
+
+ ngx_module_type=HTTP
+ ngx_module_name=$RTMP_HTTP_MODULES
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=$RTMP_HTTP_SRCS
+
+ . auto/module
+ fi
+
+else
+ CORE_MODULES="$CORE_MODULES $RTMP_CORE_MODULES"
+ HTTP_MODULES="$HTTP_MODULES $RTMP_HTTP_MODULES"
+
+ NGX_ADDON_DEPS="$NGX_ADDON_DEPS $RTMP_DEPS"
+ NGX_ADDON_SRCS="$NGX_ADDON_SRCS $RTMP_CORE_SRCS $RTMP_HTTP_SRCS"
+
+ CFLAGS="$CFLAGS -I$ngx_addon_dir"
+fi
USE_OPENSSL=YES
|
[-]
[+]
|
Changed |
nginx-rtmp-module-1.1.10.tar.gz/dash/ngx_rtmp_dash_module.c
^
|
@@ -1413,14 +1413,22 @@
}
+#if (nginx_version >= 1011005)
+static ngx_msec_t
+#else
static time_t
+#endif
ngx_rtmp_dash_cleanup(void *data)
{
ngx_rtmp_dash_cleanup_t *cleanup = data;
ngx_rtmp_dash_cleanup_dir(&cleanup->path, cleanup->playlen);
+#if (nginx_version >= 1011005)
+ return cleanup->playlen * 2;
+#else
return cleanup->playlen / 500;
+#endif
}
|
[-]
[+]
|
Changed |
nginx-rtmp-module-1.1.10.tar.gz/hls/ngx_rtmp_hls_module.c
^
|
@@ -2210,14 +2210,22 @@
}
+#if (nginx_version >= 1011005)
+static ngx_msec_t
+#else
static time_t
+#endif
ngx_rtmp_hls_cleanup(void *data)
{
ngx_rtmp_hls_cleanup_t *cleanup = data;
ngx_rtmp_hls_cleanup_dir(&cleanup->path, cleanup->playlen);
+#if (nginx_version >= 1011005)
+ return cleanup->playlen * 2;
+#else
return cleanup->playlen / 500;
+#endif
}
|
[-]
[+]
|
Changed |
nginx-rtmp-module-1.1.10.tar.gz/ngx_rtmp.c
^
|
@@ -87,6 +87,7 @@
ngx_uint_t i, m, mi, s;
ngx_conf_t pcf;
ngx_array_t ports;
+ ngx_module_t **modules;
ngx_rtmp_listen_t *listen;
ngx_rtmp_module_t *module;
ngx_rtmp_conf_ctx_t *ctx;
@@ -102,6 +103,12 @@
/* count the number of the rtmp modules and set up their indices */
+#if (nginx_version >= 1009011)
+
+ ngx_rtmp_max_module = ngx_count_modules(cf->cycle, NGX_RTMP_MODULE);
+
+#else
+
ngx_rtmp_max_module = 0;
for (m = 0; ngx_modules[m]; m++) {
if (ngx_modules[m]->type != NGX_RTMP_MODULE) {
@@ -111,6 +118,8 @@
ngx_modules[m]->ctx_index = ngx_rtmp_max_module++;
}
+#endif
+
/* the rtmp main_conf context, it is the same in the all rtmp contexts */
@@ -148,13 +157,19 @@
* of the all rtmp modules
*/
- for (m = 0; ngx_modules[m]; m++) {
- if (ngx_modules[m]->type != NGX_RTMP_MODULE) {
+#if (nginx_version >= 1009011)
+ modules = cf->cycle->modules;
+#else
+ modules = ngx_modules;
+#endif
+
+ for (m = 0; modules[m]; m++) {
+ if (modules[m]->type != NGX_RTMP_MODULE) {
continue;
}
- module = ngx_modules[m]->ctx;
- mi = ngx_modules[m]->ctx_index;
+ module = modules[m]->ctx;
+ mi = modules[m]->ctx_index;
if (module->create_main_conf) {
ctx->main_conf[mi] = module->create_main_conf(cf);
@@ -181,12 +196,12 @@
pcf = *cf;
cf->ctx = ctx;
- for (m = 0; ngx_modules[m]; m++) {
- if (ngx_modules[m]->type != NGX_RTMP_MODULE) {
+ for (m = 0; modules[m]; m++) {
+ if (modules[m]->type != NGX_RTMP_MODULE) {
continue;
}
- module = ngx_modules[m]->ctx;
+ module = modules[m]->ctx;
if (module->preconfiguration) {
if (module->preconfiguration(cf) != NGX_OK) {
@@ -212,13 +227,13 @@
cmcf = ctx->main_conf[ngx_rtmp_core_module.ctx_index];
cscfp = cmcf->servers.elts;
- for (m = 0; ngx_modules[m]; m++) {
- if (ngx_modules[m]->type != NGX_RTMP_MODULE) {
+ for (m = 0; modules[m]; m++) {
+ if (modules[m]->type != NGX_RTMP_MODULE) {
continue;
}
- module = ngx_modules[m]->ctx;
- mi = ngx_modules[m]->ctx_index;
+ module = modules[m]->ctx;
+ mi = modules[m]->ctx_index;
/* init rtmp{} main_conf's */
@@ -283,12 +298,12 @@
return NGX_CONF_ERROR;
}
- for (m = 0; ngx_modules[m]; m++) {
- if (ngx_modules[m]->type != NGX_RTMP_MODULE) {
+ for (m = 0; modules[m]; m++) {
+ if (modules[m]->type != NGX_RTMP_MODULE) {
continue;
}
- module = ngx_modules[m]->ctx;
+ module = modules[m]->ctx;
if (module->postconfiguration) {
if (module->postconfiguration(cf) != NGX_OK) {
|
[-]
[+]
|
Changed |
nginx-rtmp-module-1.1.10.tar.gz/ngx_rtmp_auto_push_module.c
^
|
@@ -93,6 +93,34 @@
};
+static ngx_rtmp_module_t ngx_rtmp_auto_push_index_module_ctx = {
+ NULL, /* preconfiguration */
+ NULL, /* postconfiguration */
+ NULL, /* create main configuration */
+ NULL, /* init main configuration */
+ NULL, /* create server configuration */
+ NULL, /* merge server configuration */
+ NULL, /* create app configuration */
+ NULL /* merge app configuration */
+};
+
+
+ngx_module_t ngx_rtmp_auto_push_index_module = {
+ NGX_MODULE_V1,
+ &ngx_rtmp_auto_push_index_module_ctx, /* module context */
+ NULL, /* module directives */
+ NGX_RTMP_MODULE, /* module type */
+ NULL, /* init master */
+ NULL, /* init module */
+ NULL, /* init process */
+ NULL, /* init thread */
+ NULL, /* exit thread */
+ NULL, /* exit process */
+ NULL, /* exit master */
+ NGX_MODULE_V1_PADDING
+};
+
+
#define NGX_RTMP_AUTO_PUSH_SOCKNAME "nginx-rtmp"
@@ -324,7 +352,7 @@
apcf = (ngx_rtmp_auto_push_conf_t *) ngx_get_conf(ngx_cycle->conf_ctx,
ngx_rtmp_auto_push_module);
- ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_auto_push_module);
+ ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_auto_push_index_module);
if (ctx == NULL) {
return;
}
@@ -461,14 +489,14 @@
goto next;
}
- ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_auto_push_module);
+ ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_auto_push_index_module);
if (ctx == NULL) {
ctx = ngx_palloc(s->connection->pool,
sizeof(ngx_rtmp_auto_push_ctx_t));
if (ctx == NULL) {
goto next;
}
- ngx_rtmp_set_ctx(s, ctx, ngx_rtmp_auto_push_module);
+ ngx_rtmp_set_ctx(s, ctx, ngx_rtmp_auto_push_index_module);
}
ngx_memzero(ctx, sizeof(*ctx));
@@ -508,7 +536,7 @@
goto next;
}
- ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_auto_push_module);
+ ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_auto_push_index_module);
if (ctx) {
if (ctx->push_evt.timer_set) {
ngx_del_timer(&ctx->push_evt);
@@ -532,7 +560,7 @@
slot, &rctx->app, &rctx->name);
pctx = ngx_rtmp_get_module_ctx(rctx->publish->session,
- ngx_rtmp_auto_push_module);
+ ngx_rtmp_auto_push_index_module);
if (pctx == NULL) {
goto next;
}
|
[-]
[+]
|
Changed |
nginx-rtmp-module-1.1.10.tar.gz/ngx_rtmp_core_module.c
^
|
@@ -332,6 +332,7 @@
void *mconf;
ngx_uint_t m;
ngx_conf_t pcf;
+ ngx_module_t **modules;
ngx_rtmp_module_t *module;
ngx_rtmp_conf_ctx_t *ctx, *rtmp_ctx;
ngx_rtmp_core_srv_conf_t *cscf, **cscfp;
@@ -357,12 +358,18 @@
return NGX_CONF_ERROR;
}
- for (m = 0; ngx_modules[m]; m++) {
- if (ngx_modules[m]->type != NGX_RTMP_MODULE) {
+#if (nginx_version >= 1009011)
+ modules = cf->cycle->modules;
+#else
+ modules = ngx_modules;
+#endif
+
+ for (m = 0; modules[m]; m++) {
+ if (modules[m]->type != NGX_RTMP_MODULE) {
continue;
}
- module = ngx_modules[m]->ctx;
+ module = modules[m]->ctx;
if (module->create_srv_conf) {
mconf = module->create_srv_conf(cf);
@@ -370,7 +377,7 @@
return NGX_CONF_ERROR;
}
- ctx->srv_conf[ngx_modules[m]->ctx_index] = mconf;
+ ctx->srv_conf[modules[m]->ctx_index] = mconf;
}
if (module->create_app_conf) {
@@ -379,7 +386,7 @@
return NGX_CONF_ERROR;
}
- ctx->app_conf[ngx_modules[m]->ctx_index] = mconf;
+ ctx->app_conf[modules[m]->ctx_index] = mconf;
}
}
@@ -419,6 +426,7 @@
ngx_int_t i;
ngx_str_t *value;
ngx_conf_t save;
+ ngx_module_t **modules;
ngx_rtmp_module_t *module;
ngx_rtmp_conf_ctx_t *ctx, *pctx;
ngx_rtmp_core_srv_conf_t *cscf;
@@ -438,17 +446,22 @@
return NGX_CONF_ERROR;
}
- for (i = 0; ngx_modules[i]; i++) {
- if (ngx_modules[i]->type != NGX_RTMP_MODULE) {
+#if (nginx_version >= 1009011)
+ modules = cf->cycle->modules;
+#else
+ modules = ngx_modules;
+#endif
+
+ for (i = 0; modules[i]; i++) {
+ if (modules[i]->type != NGX_RTMP_MODULE) {
continue;
}
- module = ngx_modules[i]->ctx;
+ module = modules[i]->ctx;
if (module->create_app_conf) {
- ctx->app_conf[ngx_modules[i]->ctx_index] =
- module->create_app_conf(cf);
- if (ctx->app_conf[ngx_modules[i]->ctx_index] == NULL) {
+ ctx->app_conf[modules[i]->ctx_index] = module->create_app_conf(cf);
+ if (ctx->app_conf[modules[i]->ctx_index] == NULL) {
return NGX_CONF_ERROR;
}
}
@@ -489,6 +502,7 @@
ngx_str_t *value;
ngx_url_t u;
ngx_uint_t i, m;
+ ngx_module_t **modules;
struct sockaddr *sa;
ngx_rtmp_listen_t *ls;
struct sockaddr_in *sin;
@@ -545,7 +559,9 @@
break;
}
- if (ngx_memcmp(ls[i].sockaddr + off, u.sockaddr + off, len) != 0) {
+ if (ngx_memcmp(ls[i].sockaddr + off, (u_char *) &u.sockaddr + off, len)
+ != 0)
+ {
continue;
}
@@ -565,14 +581,20 @@
ngx_memzero(ls, sizeof(ngx_rtmp_listen_t));
- ngx_memcpy(ls->sockaddr, u.sockaddr, u.socklen);
+ ngx_memcpy(ls->sockaddr, (u_char *) &u.sockaddr, u.socklen);
ls->socklen = u.socklen;
ls->wildcard = u.wildcard;
ls->ctx = cf->ctx;
- for (m = 0; ngx_modules[m]; m++) {
- if (ngx_modules[m]->type != NGX_RTMP_MODULE) {
+#if (nginx_version >= 1009011)
+ modules = cf->cycle->modules;
+#else
+ modules = ngx_modules;
+#endif
+
+ for (m = 0; modules[m]; m++) {
+ if (modules[m]->type != NGX_RTMP_MODULE) {
continue;
}
}
|
[-]
[+]
|
Changed |
nginx-rtmp-module-1.1.10.tar.gz/ngx_rtmp_record_module.c
^
|
@@ -1195,6 +1195,7 @@
ngx_int_t i;
ngx_str_t *value;
ngx_conf_t save;
+ ngx_module_t **modules;
ngx_rtmp_module_t *module;
ngx_rtmp_core_app_conf_t *cacf, **pcacf, *rcacf;
ngx_rtmp_record_app_conf_t *racf, **pracf, *rracf;
@@ -1221,17 +1222,22 @@
return NGX_CONF_ERROR;
}
- for (i = 0; ngx_modules[i]; i++) {
- if (ngx_modules[i]->type != NGX_RTMP_MODULE) {
+#if (nginx_version >= 1009011)
+ modules = cf->cycle->modules;
+#else
+ modules = ngx_modules;
+#endif
+
+ for (i = 0; modules[i]; i++) {
+ if (modules[i]->type != NGX_RTMP_MODULE) {
continue;
}
- module = ngx_modules[i]->ctx;
+ module = modules[i]->ctx;
if (module->create_app_conf) {
- ctx->app_conf[ngx_modules[i]->ctx_index] =
- module->create_app_conf(cf);
- if (ctx->app_conf[ngx_modules[i]->ctx_index] == NULL) {
+ ctx->app_conf[modules[i]->ctx_index] = module->create_app_conf(cf);
+ if (ctx->app_conf[modules[i]->ctx_index] == NULL) {
return NGX_CONF_ERROR;
}
}
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git
^
|
-(directory)
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/HEAD
^
|
@@ -1 +0,0 @@
-ref: refs/heads/master
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/config
^
|
@@ -1,12 +0,0 @@
-[core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
- ignorecase = true
-[remote "origin"]
- fetch = +refs/heads/*:refs/remotes/origin/*
- url = https://github.com/arut/nginx-rtmp-module.git
-[branch "master"]
- remote = origin
- merge = refs/heads/master
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/description
^
|
@@ -1 +0,0 @@
-Unnamed repository; edit this file 'description' to name the repository.
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/hooks
^
|
-(directory)
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/hooks/applypatch-msg.sample
^
|
@@ -1,15 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to check the commit log message taken by
-# applypatch from an e-mail message.
-#
-# The hook should exit with non-zero status after issuing an
-# appropriate message if it wants to stop the commit. The hook is
-# allowed to edit the commit message file.
-#
-# To enable this hook, rename this file to "applypatch-msg".
-
-. git-sh-setup
-test -x "$GIT_DIR/hooks/commit-msg" &&
- exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
-:
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/hooks/commit-msg.sample
^
|
@@ -1,24 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to check the commit log message.
-# Called by "git commit" with one argument, the name of the file
-# that has the commit message. The hook should exit with non-zero
-# status after issuing an appropriate message if it wants to stop the
-# commit. The hook is allowed to edit the commit message file.
-#
-# To enable this hook, rename this file to "commit-msg".
-
-# Uncomment the below to add a Signed-off-by line to the message.
-# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
-# hook is more suited to it.
-#
-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
-
-# This example catches duplicate Signed-off-by lines.
-
-test "" = "$(grep '^Signed-off-by: ' "$1" |
- sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
- echo >&2 Duplicate Signed-off-by lines.
- exit 1
-}
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/hooks/post-update.sample
^
|
@@ -1,8 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to prepare a packed repository for use over
-# dumb transports.
-#
-# To enable this hook, rename this file to "post-update".
-
-exec git update-server-info
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/hooks/pre-applypatch.sample
^
|
@@ -1,14 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to verify what is about to be committed
-# by applypatch from an e-mail message.
-#
-# The hook should exit with non-zero status after issuing an
-# appropriate message if it wants to stop the commit.
-#
-# To enable this hook, rename this file to "pre-applypatch".
-
-. git-sh-setup
-test -x "$GIT_DIR/hooks/pre-commit" &&
- exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
-:
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/hooks/pre-commit.sample
^
|
@@ -1,50 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to verify what is about to be committed.
-# Called by "git commit" with no arguments. The hook should
-# exit with non-zero status after issuing an appropriate message if
-# it wants to stop the commit.
-#
-# To enable this hook, rename this file to "pre-commit".
-
-if git rev-parse --verify HEAD >/dev/null 2>&1
-then
- against=HEAD
-else
- # Initial commit: diff against an empty tree object
- against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
-fi
-
-# If you want to allow non-ascii filenames set this variable to true.
-allownonascii=$(git config hooks.allownonascii)
-
-# Redirect output to stderr.
-exec 1>&2
-
-# Cross platform projects tend to avoid non-ascii filenames; prevent
-# them from being added to the repository. We exploit the fact that the
-# printable range starts at the space character and ends with tilde.
-if [ "$allownonascii" != "true" ] &&
- # Note that the use of brackets around a tr range is ok here, (it's
- # even required, for portability to Solaris 10's /usr/bin/tr), since
- # the square bracket bytes happen to fall in the designated range.
- test $(git diff --cached --name-only --diff-filter=A -z $against |
- LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
-then
- echo "Error: Attempt to add a non-ascii file name."
- echo
- echo "This can cause problems if you want to work"
- echo "with people on other platforms."
- echo
- echo "To be portable it is advisable to rename the file ..."
- echo
- echo "If you know what you are doing you can disable this"
- echo "check using:"
- echo
- echo " git config hooks.allownonascii true"
- echo
- exit 1
-fi
-
-# If there are whitespace errors, print the offending file names and fail.
-exec git diff-index --check --cached $against --
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/hooks/pre-rebase.sample
^
|
@@ -1,169 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2006, 2008 Junio C Hamano
-#
-# The "pre-rebase" hook is run just before "git rebase" starts doing
-# its job, and can prevent the command from running by exiting with
-# non-zero status.
-#
-# The hook is called with the following parameters:
-#
-# $1 -- the upstream the series was forked from.
-# $2 -- the branch being rebased (or empty when rebasing the current branch).
-#
-# This sample shows how to prevent topic branches that are already
-# merged to 'next' branch from getting rebased, because allowing it
-# would result in rebasing already published history.
-
-publish=next
-basebranch="$1"
-if test "$#" = 2
-then
- topic="refs/heads/$2"
-else
- topic=`git symbolic-ref HEAD` ||
- exit 0 ;# we do not interrupt rebasing detached HEAD
-fi
-
-case "$topic" in
-refs/heads/??/*)
- ;;
-*)
- exit 0 ;# we do not interrupt others.
- ;;
-esac
-
-# Now we are dealing with a topic branch being rebased
-# on top of master. Is it OK to rebase it?
-
-# Does the topic really exist?
-git show-ref -q "$topic" || {
- echo >&2 "No such branch $topic"
- exit 1
-}
-
-# Is topic fully merged to master?
-not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
-if test -z "$not_in_master"
-then
- echo >&2 "$topic is fully merged to master; better remove it."
- exit 1 ;# we could allow it, but there is no point.
-fi
-
-# Is topic ever merged to next? If so you should not be rebasing it.
-only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
-only_next_2=`git rev-list ^master ${publish} | sort`
-if test "$only_next_1" = "$only_next_2"
-then
- not_in_topic=`git rev-list "^$topic" master`
- if test -z "$not_in_topic"
- then
- echo >&2 "$topic is already up-to-date with master"
- exit 1 ;# we could allow it, but there is no point.
- else
- exit 0
- fi
-else
- not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
- /usr/bin/perl -e '
- my $topic = $ARGV[0];
- my $msg = "* $topic has commits already merged to public branch:\n";
- my (%not_in_next) = map {
- /^([0-9a-f]+) /;
- ($1 => 1);
- } split(/\n/, $ARGV[1]);
- for my $elem (map {
- /^([0-9a-f]+) (.*)$/;
- [$1 => $2];
- } split(/\n/, $ARGV[2])) {
- if (!exists $not_in_next{$elem->[0]}) {
- if ($msg) {
- print STDERR $msg;
- undef $msg;
- }
- print STDERR " $elem->[1]\n";
- }
- }
- ' "$topic" "$not_in_next" "$not_in_master"
- exit 1
-fi
-
-exit 0
-
-################################################################
-
-This sample hook safeguards topic branches that have been
-published from being rewound.
-
-The workflow assumed here is:
-
- * Once a topic branch forks from "master", "master" is never
- merged into it again (either directly or indirectly).
-
- * Once a topic branch is fully cooked and merged into "master",
- it is deleted. If you need to build on top of it to correct
- earlier mistakes, a new topic branch is created by forking at
- the tip of the "master". This is not strictly necessary, but
- it makes it easier to keep your history simple.
-
- * Whenever you need to test or publish your changes to topic
- branches, merge them into "next" branch.
-
-The script, being an example, hardcodes the publish branch name
-to be "next", but it is trivial to make it configurable via
-$GIT_DIR/config mechanism.
-
-With this workflow, you would want to know:
-
-(1) ... if a topic branch has ever been merged to "next". Young
- topic branches can have stupid mistakes you would rather
- clean up before publishing, and things that have not been
- merged into other branches can be easily rebased without
- affecting other people. But once it is published, you would
- not want to rewind it.
-
-(2) ... if a topic branch has been fully merged to "master".
- Then you can delete it. More importantly, you should not
- build on top of it -- other people may already want to
- change things related to the topic as patches against your
- "master", so if you need further changes, it is better to
- fork the topic (perhaps with the same name) afresh from the
- tip of "master".
-
-Let's look at this example:
-
- o---o---o---o---o---o---o---o---o---o "next"
- / / / /
- / a---a---b A / /
- / / / /
- / / c---c---c---c B /
- / / / \ /
- / / / b---b C \ /
- / / / / \ /
- ---o---o---o---o---o---o---o---o---o---o---o "master"
-
-
-A, B and C are topic branches.
-
- * A has one fix since it was merged up to "next".
-
- * B has finished. It has been fully merged up to "master" and "next",
- and is ready to be deleted.
-
- * C has not merged to "next" at all.
-
-We would want to allow C to be rebased, refuse A, and encourage
-B to be deleted.
-
-To compute (1):
-
- git rev-list ^master ^topic next
- git rev-list ^master next
-
- if these match, topic has not merged in next at all.
-
-To compute (2):
-
- git rev-list master..topic
-
- if this is empty, it is fully merged to "master".
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/hooks/prepare-commit-msg.sample
^
|
@@ -1,36 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to prepare the commit log message.
-# Called by "git commit" with the name of the file that has the
-# commit message, followed by the description of the commit
-# message's source. The hook's purpose is to edit the commit
-# message file. If the hook fails with a non-zero status,
-# the commit is aborted.
-#
-# To enable this hook, rename this file to "prepare-commit-msg".
-
-# This hook includes three examples. The first comments out the
-# "Conflicts:" part of a merge commit.
-#
-# The second includes the output of "git diff --name-status -r"
-# into the message, just before the "git status" output. It is
-# commented because it doesn't cope with --amend or with squashed
-# commits.
-#
-# The third example adds a Signed-off-by line to the message, that can
-# still be edited. This is rarely a good idea.
-
-case "$2,$3" in
- merge,)
- /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
-
-# ,|template,)
-# /usr/bin/perl -i.bak -pe '
-# print "\n" . `git diff --cached --name-status -r`
-# if /^#/ && $first++ == 0' "$1" ;;
-
- *) ;;
-esac
-
-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/hooks/update.sample
^
|
@@ -1,128 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to blocks unannotated tags from entering.
-# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
-#
-# To enable this hook, rename this file to "update".
-#
-# Config
-# ------
-# hooks.allowunannotated
-# This boolean sets whether unannotated tags will be allowed into the
-# repository. By default they won't be.
-# hooks.allowdeletetag
-# This boolean sets whether deleting tags will be allowed in the
-# repository. By default they won't be.
-# hooks.allowmodifytag
-# This boolean sets whether a tag may be modified after creation. By default
-# it won't be.
-# hooks.allowdeletebranch
-# This boolean sets whether deleting branches will be allowed in the
-# repository. By default they won't be.
-# hooks.denycreatebranch
-# This boolean sets whether remotely creating branches will be denied
-# in the repository. By default this is allowed.
-#
-
-# --- Command line
-refname="$1"
-oldrev="$2"
-newrev="$3"
-
-# --- Safety check
-if [ -z "$GIT_DIR" ]; then
- echo "Don't run this script from the command line." >&2
- echo " (if you want, you could supply GIT_DIR then run" >&2
- echo " $0 <ref> <oldrev> <newrev>)" >&2
- exit 1
-fi
-
-if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
- echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
- exit 1
-fi
-
-# --- Config
-allowunannotated=$(git config --bool hooks.allowunannotated)
-allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
-denycreatebranch=$(git config --bool hooks.denycreatebranch)
-allowdeletetag=$(git config --bool hooks.allowdeletetag)
-allowmodifytag=$(git config --bool hooks.allowmodifytag)
-
-# check for no description
-projectdesc=$(sed -e '1q' "$GIT_DIR/description")
-case "$projectdesc" in
-"Unnamed repository"* | "")
- echo "*** Project description file hasn't been set" >&2
- exit 1
- ;;
-esac
-
-# --- Check types
-# if $newrev is 0000...0000, it's a commit to delete a ref.
-zero="0000000000000000000000000000000000000000"
-if [ "$newrev" = "$zero" ]; then
- newrev_type=delete
-else
- newrev_type=$(git cat-file -t $newrev)
-fi
-
-case "$refname","$newrev_type" in
- refs/tags/*,commit)
- # un-annotated tag
- short_refname=${refname##refs/tags/}
- if [ "$allowunannotated" != "true" ]; then
- echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
- echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
- exit 1
- fi
- ;;
- refs/tags/*,delete)
- # delete tag
- if [ "$allowdeletetag" != "true" ]; then
- echo "*** Deleting a tag is not allowed in this repository" >&2
- exit 1
- fi
- ;;
- refs/tags/*,tag)
- # annotated tag
- if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
- then
- echo "*** Tag '$refname' already exists." >&2
- echo "*** Modifying a tag is not allowed in this repository." >&2
- exit 1
- fi
- ;;
- refs/heads/*,commit)
- # branch
- if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
- echo "*** Creating a branch is not allowed in this repository" >&2
- exit 1
- fi
- ;;
- refs/heads/*,delete)
- # delete branch
- if [ "$allowdeletebranch" != "true" ]; then
- echo "*** Deleting a branch is not allowed in this repository" >&2
- exit 1
- fi
- ;;
- refs/remotes/*,commit)
- # tracking branch
- ;;
- refs/remotes/*,delete)
- # delete tracking branch
- if [ "$allowdeletebranch" != "true" ]; then
- echo "*** Deleting a tracking branch is not allowed in this repository" >&2
- exit 1
- fi
- ;;
- *)
- # Anything else (is there anything else?)
- echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
- exit 1
- ;;
-esac
-
-# --- Finished
-exit 0
|
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/index
^
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/info
^
|
-(directory)
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/info/exclude
^
|
@@ -1,6 +0,0 @@
-# git ls-files --others --exclude-from=.git/info/exclude
-# Lines that start with '#' are comments.
-# For a project mostly in C, the following would be a good set of
-# exclude patterns (uncomment them if you want to use them):
-# *.[oa]
-# *~
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/logs
^
|
-(directory)
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/logs/HEAD
^
|
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 f62a0838064baf089ad9fe3c8f6f2ffe0775afb2 U-arrakis\jg <jg@arrakis.(none)> 1427318672 +0100 clone: from https://github.com/arut/nginx-rtmp-module.git
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/logs/refs
^
|
-(directory)
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/logs/refs/heads
^
|
-(directory)
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/logs/refs/heads/master
^
|
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 f62a0838064baf089ad9fe3c8f6f2ffe0775afb2 U-arrakis\jg <jg@arrakis.(none)> 1427318672 +0100 clone: from https://github.com/arut/nginx-rtmp-module.git
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/objects
^
|
-(directory)
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/objects/info
^
|
-(directory)
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/objects/pack
^
|
-(directory)
|
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/objects/pack/pack-686bc6bc8fcdb3e761bdb3796272cf46a06043ac.idx
^
|
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/objects/pack/pack-686bc6bc8fcdb3e761bdb3796272cf46a06043ac.pack
^
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/packed-refs
^
|
@@ -1,363 +0,0 @@
-# pack-refs with: peeled
-406d3a9527e08ea148e7c10ffa4009e0e5070b11 refs/remotes/origin/access-log
-e19ff641b06d3abd30b3bad5cfb491d158835713 refs/remotes/origin/aggregate
-eee52d83c4bdafe712685be06822acb051d407a7 refs/remotes/origin/async-client-handshake
-87686029aa2cfddfea765c626be7161981583482 refs/remotes/origin/atc
-3d5f6df7311594b051fdd26d3ae120d4ae708bb4 refs/remotes/origin/atc-only
-3c2e29f215fb09e5b4cb29040d1e5e092ce73849 refs/remotes/origin/auto-push
-f39d3f66a3ea6bb15b50737b90004b12056a3ad1 refs/remotes/origin/avc-parser
-205664d8c5e040a61b36ae0b74ddf17bc16d2150 refs/remotes/origin/big-endian
-10bcbf0e8daf38e3f3569ba84050f85fd46dd2d0 refs/remotes/origin/big-hls-buffer
-fad4f4717b47ab368d80ff480f2889631edc6521 refs/remotes/origin/big-nal-buffer
-f6ccfb6fa1d05d3babc1bb20ca7003802f85f2f0 refs/remotes/origin/chunksizefix
-d9579d627d727d8ad5edd2a0054f66324bebd459 refs/remotes/origin/close-stream
-aeae84bf8babcd7130f71b5941834eeb4fafa61a refs/remotes/origin/cmd-handler-init
-ebc47f03a43758c4f44ae90c193f4111f9ab1e16 refs/remotes/origin/codec
-cb4623aa4f7e6c2d1cb4c9c9f55ea6107f3a3985 refs/remotes/origin/const-fix
-0b757e8a49480a88f5e051f6590f25e6c4de3288 refs/remotes/origin/control
-ef424df677eb545ba5277649ee99fbea7e38bb55 refs/remotes/origin/control-director
-5e5dd797c2307b40a11409df806f07a427b3cd57 refs/remotes/origin/control-redirect
-b07e0e2dee3a2019dc2be34591b1c4e27730b2a0 refs/remotes/origin/dash
-e8081fd94f1d7ae4483f0a5ca002af8a79d447eb refs/remotes/origin/dash-discont
-fe4877f2168e7e62d6a45cb26708d662f0416961 refs/remotes/origin/dash-timeline
-39717828d67359329797d0ab5f297162b5d5e248 refs/remotes/origin/default-buflen
-90f985fa2f015e8bdfe92a9b57a5d04b779d7be1 refs/remotes/origin/defclose
-63d19ada51b6a1932e1cd73d9895a08cb1ae7827 refs/remotes/origin/drop-old-publisher
-6c79085d5c4203d11d9aa53d456ef7195de8cdc4 refs/remotes/origin/drop-restart
-fe8bf2d6974834ab346b82533151bc953fdfaa7b refs/remotes/origin/drop-restart-mstat
-52c2ef3f91569c3b1c10a40fd1bf56bb4dc1d9de refs/remotes/origin/enotify
-57a96ac2bc1812188aa81237ad582ca115f4391f refs/remotes/origin/envivo-fix
-87686029aa2cfddfea765c626be7161981583482 refs/remotes/origin/exec-fix
-67aa7d5d0da67a43683e8b05467afbdff5622532 refs/remotes/origin/exec-init
-f79aa206ec572c225c8bd32b5c2b1d7cc5ede692 refs/remotes/origin/exec-logging
-b62651efbdcaa77f7836ef5c52ddccfdf9ca473f refs/remotes/origin/exec-pull
-a6913ea68ad017eff14d098f4086c5dafae12af6 refs/remotes/origin/exec-pull-ext
-8c39b37131d150f152aa21a03f076501f39bf4a1 refs/remotes/origin/exec-static
-5e55f62b88f439dc1fbe311060bef53dfcfbc42e refs/remotes/origin/fast-start
-0210f7ca83f8fd65261c4b9040743edf30a258fc refs/remotes/origin/flv-append-fix
-fac68de376a2e20aed5627681ffc90d6374bf295 refs/remotes/origin/flv-header-mask
-b31539ce95d2f84ce8be22b9d11cb4abcd3cb90a refs/remotes/origin/fmle-reset-byte-counter
-990222d643b30a3c9e0db31209416ae9b47e16d3 refs/remotes/origin/fmle-time-fix
-cbccd06babfc66ab920e7e2331d125516715f709 refs/remotes/origin/freebsd-auto-push
-6f2808c7d11564e2269e9f64b9671f8c080c893d refs/remotes/origin/get-notify
-12a0d39bed54bfb3c30272d8d1328d74378853ce refs/remotes/origin/gh-pages
-76211a4bd254e5145d38c0275ad790dc9fac8fd4 refs/remotes/origin/good-logger
-ec282438514e88f7267653728b42c77e3df23bc3 refs/remotes/origin/handshakefix
-d34c6393f6ff22ef6cff6cb2c4ef7c1fe6cd35fa refs/remotes/origin/hls-async-delete
-49a3ee0dc6d5b85fe1164995c8d94424a0971838 refs/remotes/origin/hls-base-url
-4906e816bec876e3e81b129622de3f5e430dcc32 refs/remotes/origin/hls-continuous
-764a039c5856bb8bfb251ff15f4c95cf1c82e54b refs/remotes/origin/hls-debug
-a43bafe3de4641268d04f9105f6ef409abb8ede2 refs/remotes/origin/hls-discont-fix
-8acacd0d7906820039bc5e1e22a4ba332caada3e refs/remotes/origin/hls-encrypt
-7500b4bd90fc942468f94dd3a12dbcdf9c3199a6 refs/remotes/origin/hls-encrypt-auto
-78dcfbcc359f8275a55b7a14d6228e9928c75816 refs/remotes/origin/hls-ensure-directory
-737ea5ce34c8270479811acfacba02112e202625 refs/remotes/origin/hls-event
-546c42efeb910fb6b7b592293f5737324ddd606a refs/remotes/origin/hls-granularity
-2ed36a2611c1674d495f754ef3066c4a8bf98aa3 refs/remotes/origin/hls-nocache
-21174b2ee743c9ea1a0bccb46436c56c871febd3 refs/remotes/origin/hls-nocrackle
-6298aa7e1d95df8b806a262196a6589159284c74 refs/remotes/origin/hls-offset-fix
-059dba448ddeed901d06f825ed84e5e85c0f64cc refs/remotes/origin/hls-read-playlist
-0aaf2a625903ba6d4d9e1e761a0e866215149994 refs/remotes/origin/hls-restart
-2bb16425da9b593f5f9568f7c91bf06a5a1012f1 refs/remotes/origin/hls-restart-on-audio
-3d54d69e252bb537dc8fb03cc96ada084bd5da8d refs/remotes/origin/hls-trailer
-4ff1bd09fcbd8a77618bd528fd8d32fb72bd2661 refs/remotes/origin/hls-ts-discont
-2f1091679b60b8741e59f257ac2c59905cec8206 refs/remotes/origin/hls-variant
-dc698edf242a1ba6d806571e2b32e50fb4d6fcae refs/remotes/origin/hlslight
-7b88858b44371ae03d29052fe6d398750fba851e refs/remotes/origin/http
-050a4e7586552003baff9dd920d28d51eaf8ab22 refs/remotes/origin/idle-streams
-3fc1598db94b234b2ec5f368c34c5d3e877040a0 refs/remotes/origin/init_queue
-d9d749af5b156ea2b4623f7e8d0efa5139885924 refs/remotes/origin/interleave
-f62a0838064baf089ad9fe3c8f6f2ffe0775afb2 refs/remotes/origin/master
-67443c28b4aff60023ce143475c2d287c264f2f7 refs/remotes/origin/meta-copy
-266e206afcda93cf2880e660fb796eb99fb6df6c refs/remotes/origin/mixed-codecs
-58491f8feddbe801557704dd1d1ac9d0950cdf3f refs/remotes/origin/mp4
-af5703b35756667eb008bdffb22626616bbae020 refs/remotes/origin/mp4-choose-track
-3f9451fdfd2707e91536bb3b942cd0a8202ebc31 refs/remotes/origin/mpeg-dash
-05a23dbc8b8a23bcb49ea71978239ab1e2e79d5d refs/remotes/origin/mstat
-cbe760aa8ad43d3908b7c9408d7f3946747981b1 refs/remotes/origin/msvc-fix1
-4ec43349ad5e16a9216844430695a3479ff6d558 refs/remotes/origin/multi-pull
-004accda9aef265eb1b4df39846156e6892d6a30 refs/remotes/origin/multi-record
-41515325899813d996e092ce4219204cec56ae3a refs/remotes/origin/multiplay
-4ec43349ad5e16a9216844430695a3479ff6d558 refs/remotes/origin/multipull
-1894d333aa9fd76e857532efe6c64d343df137e7 refs/remotes/origin/native-hls
-e22ca286044d343745a4a28b15c6298f80a9fb61 refs/remotes/origin/native-hls-rr
-b5461f61c6833aee803b5134f2285aa652978e09 refs/remotes/origin/new-live
-903abb6646153c9eca2697727231d46804a0c1b7 refs/remotes/origin/new-live2
-02dd440a25097e8528d9cdfa85132b6920649547 refs/remotes/origin/new-live3
-22de95e634b92e23eae85134c05e54c98404e34f refs/remotes/origin/new-relay
-7b5c5e99327c19600ab2bab89960ba217be52949 refs/remotes/origin/new-stat
-591d7f5f3f0a2381f466f578a768ff19344cfbb0 refs/remotes/origin/newhandshake
-cbaff8f1df7c7eabc9474909104f8f4f05324930 refs/remotes/origin/notify-addr
-7f7fcc8d5c0e8468db2b37de9a4ef3ec392c52a7 refs/remotes/origin/notify-redirect
-8d28f7f1de08a81ce356f55c6e29141369bf7aec refs/remotes/origin/notify-redirect-md5
-58bd6029463c79347d45be4488a3786abe5cebb8 refs/remotes/origin/notify-relay
-f89bbae2354ea09cb5d8b04d24ba4df8415e7f09 refs/remotes/origin/on-connect
-62e03d710cd02043156ac86da3b07e5186c78e11 refs/remotes/origin/on-update
-15405e8edde4db9e3c6b56c3a17edbf7dcd974f0 refs/remotes/origin/optsend
-9788b1a5309d40809df6832e81593392f3b381a2 refs/remotes/origin/out-metadata
-2fdec454604b76b40d322b83106ec1a35b98dfce refs/remotes/origin/out-queue-settings
-0478c4445f26f55d33e360a91a7ab4cd57f44f3b refs/remotes/origin/pause
-940ff260099958edf27eb11fe0b959e881fd5dfa refs/remotes/origin/peer-timestamp
-067c73710d15f046945ada24d5ca25d50b2751c7 refs/remotes/origin/play-publish-done
-5d3189ad97c87bbdac9fb455f7505d0d4d5eb058 refs/remotes/origin/play-seek
-8a8f28f3b67d0177f79e754c478e845bac70eb58 refs/remotes/origin/play2
-521f8998b0cf1e197152655b214285ebde974fd3 refs/remotes/origin/play2-continue
-3e25f91004b83c1a1fa25a8993cdd691f65bf658 refs/remotes/origin/postconf-handler-init
-4ec43349ad5e16a9216844430695a3479ff6d558 refs/remotes/origin/preemption
-a72e33ea411ed5f55df04ea9ab9dfceb09137642 refs/remotes/origin/proxy-protocol
-6ab14605ba4a410b39916543302a9a9eb4d19698 refs/remotes/origin/publish-optional-type
-1c2470975e4f23742d3e468649c2ad2bbfb77e7f refs/remotes/origin/publish-time-fix2
-dbc3ac2438757b23a65e1612c36b5691e7173585 refs/remotes/origin/push-reconnect
-0b6a84b0b829c6794c0635dd30a2aa6712417c8f refs/remotes/origin/record-append
-abc2704db1193bd993b886463063059d1ff5050e refs/remotes/origin/record-done
-8658d99529384a487113bb9b80aaffd7714f16a7 refs/remotes/origin/record-keyframes
-9b3471d79f43382db134b407cfce4f5b4ee24ae0 refs/remotes/origin/record-lock
-f79aa206ec572c225c8bd32b5c2b1d7cc5ede692 refs/remotes/origin/record-name-format
-bff1c355ec7db875972da6682e2553d65ac847ad refs/remotes/origin/record-notify
-b69efd3e94113f627f25d0ab67fcd1036eab5fb1 refs/remotes/origin/reentrant-relay
-1f9072bbe69e015021a31784b3ac66f0b296c911 refs/remotes/origin/relay
-c9973fc68a91284c632f3afb736303d6402f6c4e refs/remotes/origin/relay-vars
-7aa513cfcd5fd345ea477ea582faa8858628974d refs/remotes/origin/reltime
-de2a4258d77aecdc2fab34b5857ca4529b1fe0ba refs/remotes/origin/remote-redirect
-60038b6ea15ae34dc1f177625adc73ddb39eb984 refs/remotes/origin/rooms
-35753c5f6221c31edad65a2f70802b856e642fe3 refs/remotes/origin/rooms2
-4a1358723a7ce288aeec9583da97166c260b38dd refs/remotes/origin/rtmp-ads
-71f92aca8d631cbc800c8eed235535e0b0a52991 refs/remotes/origin/safe-amf-parser
-87d1cebfe2822d75f9c97fe2487723029abc272a refs/remotes/origin/sample-access
-57dd1406bd59224eea4e0aabf9dbfe4c82e6be9a refs/remotes/origin/session-relay
-22de95e634b92e23eae85134c05e54c98404e34f refs/remotes/origin/shared-live-streams
-5d7a5ea535ed40e7a9459967dc607bb52b10db12 refs/remotes/origin/shared_record
-18e4762db29139ada9c8be4b36070005e8d01efc refs/remotes/origin/smart-drop
-a8d148473db0fe5fb17e5e7527a3cafcfafb1fff refs/remotes/origin/smartos-compilation-fix
-2cff2a58210c2f964f4d2ee76a8461fb81e28610 refs/remotes/origin/stat-no-underline
-e3be78bc6b6f91fea27ba235a6393dee50817bcf refs/remotes/origin/stat-redesign
-3bd60857bd5ea2f3024e7de248bdc3d64b58859d refs/remotes/origin/static-relay
-7a35372e30dca2a10c843219597bc4bc481fdda0 refs/remotes/origin/static-relay-cleanup
-882b4f15b287b3e313088a67b2a4a543fbb6511d refs/remotes/origin/static-relay2
-ac13bbf1af345532a009a88d93ac4b7869ffe456 refs/remotes/origin/sync
-9b4725a01a9615dfa7133d659ff936bd69e91345 refs/remotes/origin/sync-atc
-7fbfb36440d99786f3c4ecc723ae61fcdedc3ce5 refs/remotes/origin/sync-atc-fmle
-466c1fdf168646d57f0f43c463ad524143917e01 refs/remotes/origin/sync-atc-fmle2
-93b669273561ebd80fbf106b8b482d28a4377b81 refs/remotes/origin/sync-enotify
-c8ad56e2d232933453d54767db55e96e00dd3d6c refs/remotes/origin/video-key
-6ad152ee4c43238bd6a9f71f36b8e5a1757909a0 refs/remotes/origin/video-on-demand
-b6194ed6e6a01ce14026c1778148db61a9a6765e refs/remotes/origin/virtual
-4adc5f7487b0bb27cf027c3e792b00821ad30ada refs/remotes/origin/vod-http
-0f337fe9a482e3da10ca7e8055ae1d8a2ccb9037 refs/remotes/origin/vod-sample-access
-98d959ac5374bd14123f53318e6c8a8d481ffd92 refs/remotes/origin/vod-seek
-770e67b1f33134c7db41e99f27ef167b16be8032 refs/remotes/origin/vod-stat
-5db5d5af24af798f698fcc0f6eeecbac52932139 refs/remotes/origin/vod-stat2
-658f5ec639e290476f19eb91f371e2bf453616c0 refs/remotes/origin/win
-289ee42c53f49728eb134f2226a2ef9ca7a32414 refs/remotes/origin/win1
-92d4c071d91b9de67e7293efcb72ad97c28285a7 refs/tags/freebsd-native-hls
-^1894d333aa9fd76e857532efe6c64d343df137e7
-316b05d54e7e290546872cb26ad5b431b2a935af refs/tags/v0.0.1
-^eda826a386f10109816c57db9ed0908bdca92330
-2ba5b409dfac19e28befd698e0e03ea8f3799517 refs/tags/v0.0.10
-^d943d519754d1c08073298114807a8afb154d07f
-f00415d4264d303b1a2771a3c6a36c026217e000 refs/tags/v0.0.11
-^bcd601832a0a2dc968621e065f1dbeaa14b77bb6
-3080d5f1e2f6e7b4da23585fb538152cbe91bf77 refs/tags/v0.0.12
-^caec91b85772dc5e078a3152cb6ed436c26bfbc3
-740f8034ec343eeab3c19c5e777fc1af05af12e5 refs/tags/v0.0.13
-^d3c5ad11969c6bfba083a33c5c7540d79692ab0a
-18719a9ae0332480c80acac56b54e87b6131f46c refs/tags/v0.0.14
-^cf1976cd05a6e73cdf5fb1506f84508a297688b6
-903e750ce238efa3cde37a40a00c83d0efa7190b refs/tags/v0.0.15
-^6295147db1d44c9e8430b09cf2bf3d0a43c16b56
-93cd6b10d401382dfc8f740dd8e995fc5241eacc refs/tags/v0.0.16
-^359c346d3516403f5545dac0e9d8fe57ff09238e
-88536319dc71fa9e8202eb000dcce7f1aa864321 refs/tags/v0.0.17
-^15405e8edde4db9e3c6b56c3a17edbf7dcd974f0
-6eba477d8578b5c488e034ab25d45e34e30636f5 refs/tags/v0.0.2
-^8204245eb223290cfed21f6748860a4bec510ed1
-4793210ff635d428fc37692d88a1107e32f3839e refs/tags/v0.0.3
-^96ebed857347b368cb78749de3515797eb0d9364
-110118d72aa68bced1a7da6d427c4a1473153f8b refs/tags/v0.0.4
-^b9ee8dbe097b2ab9cd60786c1cfa9a48237c51dd
-49d4548bbc229885290915256d3b75f5d0b2863e refs/tags/v0.0.5
-^1e9a7e6efcd6990662f41e54587f27ab3f28ba87
-1c620f4121a3c4c64ccc71ca9a3aee100b702221 refs/tags/v0.0.6
-^3980a5923715131c8ac011410e63250ef5d13c93
-dbad1b31d510f290c5ebac4f073f5b7c3ef97e04 refs/tags/v0.0.7
-^7b70e9241327b93d04554cd7b8d2eeadb2acc4e6
-41ca3077bdbd20c2ddefdcc5f03a26b9ab6c358b refs/tags/v0.0.8
-^e563c3146e31eb8ce48634262435978bab26f7f0
-dc702ef73579582157563de257bf906d5ac77e18 refs/tags/v0.0.9
-^31d18ed4478684571476aed6125e942bfc738d77
-e2dcb0bea3859e6a66a7601356a7d90434d5ef4f refs/tags/v0.1.0
-^c61d7ac56f4895dc3f0513344b45d74943d4da19
-a0e0796bff7e6a33181d4cb6a1981a9889cf791c refs/tags/v0.1.1
-^f6ccfb6fa1d05d3babc1bb20ca7003802f85f2f0
-80db4c48b3cc30ad12112b5bde3831520c81a92a refs/tags/v0.1.10
-^88346934e51595118518957553316afda5a8b771
-b103795c7f1f41a51451dace848f8de085d59840 refs/tags/v0.1.11
-^45cd9825a2bb882c3b65a9c1139342bc59e40750
-8c8410a1def03c6f535110352398a0fc463d08f8 refs/tags/v0.1.12
-^63c4269a9146370db970894512523b9f3893ffad
-951872e641cbebbd925c17cb8e8cc8a0289fe9cd refs/tags/v0.1.13
-^1719ef4433de03e8d95be7838a933326d717f1ee
-6432ba9937589a7bbd58975d2e253a65e433e17b refs/tags/v0.1.14
-^fa3630d63d77ec4e6dcfa14a88afb5804b1b3596
-4b89a9819cc22c6ca1852613c518e0f400c6c048 refs/tags/v0.1.15
-^8def5f394543b822b6b450e79bdbf9a73f1d0a99
-40d6554b7196933e96aff91bba15f6b31c99dedb refs/tags/v0.1.2
-^4e713b75e8e3cd8f5456303e2f7f4803776f33de
-a33ca7451cbd32dc2f43e01b3b87552f055a56ae refs/tags/v0.1.3
-^d82c16499de14965ff1259c457b33b5a81614c40
-dd9683b203e09b13d08e717e20304060c1d320cb refs/tags/v0.1.4
-^a4f48c5baa427c9d9093c0ceee339820c2167624
-d216f3dd61f67da413503b492af4b1f5c3e58451 refs/tags/v0.1.5
-^32279ddf26a9d9e0f34ff62d460bf4c1b14e2088
-2dab9cce52024dbf7ae3273770e159e73db21618 refs/tags/v0.1.6
-^49382c826b041589badb32b5f5f512592405a736
-c83a64c91d926c1bc5ac35036d49c31f87165466 refs/tags/v0.1.7
-^63e19f8d67d4f442f2700103c4d8ee9d137c0116
-0ab4039b703078ddacd4e70adc67b99efd946de3 refs/tags/v0.1.8
-^4bb48483be9d91a74a2efd5cb80fa136918ae466
-c9d359554132dc807d599b8d28b3193c8e37d841 refs/tags/v0.1.9
-^6143abc41803be6da47bfc4e15bbfe1d315de832
-4d20bb15480652145358c20f444f77ddbe2eeac6 refs/tags/v0.2.0
-^eb4e9e8d9033cb7c1775eec114cd7b90af26b047
-9df13315600aa2752fc99e80fb8b73a78e0f0fbf refs/tags/v0.2.1
-^1a2a8e2867f4d1cd64853bc49af9e725ee7f8343
-7e8b090de600016d965d3080b0cd6bc81eb60f67 refs/tags/v0.2.2
-^4e475cccb507951e5091f0ff5f1d4ef1903fd439
-f7f24bade80cca3a09e7286f250bb464cfab2df1 refs/tags/v0.2.3
-^295551947a187a265e5c60e6cccdf4c894a21e24
-2bf2e04da1cd97187612ba73ce9010c96393b76a refs/tags/v0.3.0
-^58491f8feddbe801557704dd1d1ac9d0950cdf3f
-aded30326d7e233283346dab1258d4fdf69c31e7 refs/tags/v0.4.0
-^3c2e29f215fb09e5b4cb29040d1e5e092ce73849
-3381f10c50c161b0350ca8030535a97f43977940 refs/tags/v0.4.1
-^067c73710d15f046945ada24d5ca25d50b2751c7
-943ca88b8160225ef8decfab7aa3c6ba40c012a7 refs/tags/v0.4.2
-^ff247dafff1cab945c85ceefcf97d76fa1972c0e
-2864097d4bf7e81a95bc85d133121beaf8262fc9 refs/tags/v0.4.3
-^ed5f06db8a90746059730fe8b55cf9ddc64ca67e
-ed9bef4dc07d34078749b79d072cde59f385084a refs/tags/v0.5.0
-^abc2704db1193bd993b886463063059d1ff5050e
-eb94d37c69842eb563fa3e7c9cc286cc942fd2e8 refs/tags/v0.5.1
-^6485716fb4734d5fc25ba12d849e2dedab63707d
-0b020f1757f052a24a4d4c2061fcc4f8e1dbd440 refs/tags/v0.5.2
-^87686029aa2cfddfea765c626be7161981583482
-053bdc9277034a6db7edcc3d46c042ab8c62989b refs/tags/v0.5.3
-^cc632eb6b683eacdced09bfbe905e510779d5efc
-307f468efdffa4ad07e79c0e39eab9f9eb195307 refs/tags/v0.5.4
-^bff1c355ec7db875972da6682e2553d65ac847ad
-98438d54995ad4d11d7a020ff6b77919ca368448 refs/tags/v0.6.0
-^72d175ed7f5dfb4874ac6e002b737d866a0553d7
-f1eeb39f851366614b7dc1afa1fba21e1595475f refs/tags/v0.6.1
-^21174b2ee743c9ea1a0bccb46436c56c871febd3
-2b20008d1f3cb4b357d74ee288e2c00ac801d415 refs/tags/v0.6.2
-^795c1538a3602d5eedf7617c6d13c775721a66b9
-6b1f2547203b946cbac8c60bd86e5f04ad1a9a1d refs/tags/v0.6.3
-^c86e30fd270103b00c244f136c8780fb3a51b921
-d623935695e9ac6418a1baa24283bd35a42fef81 refs/tags/v0.6.4
-^f65f07deb32565b144e22faece57638f8961d62f
-d3a7be773484e670119dfa20ff56cb0a91a8554f refs/tags/v0.6.5
-^4adc5f7487b0bb27cf027c3e792b00821ad30ada
-293ebabd1220ec4615e2eb89d19ca3e7a381d1a3 refs/tags/v0.7.0
-^101b43a478bb44018733e75a3bf3b1f8adc5b2e5
-4b12afb07c889648864458c3a6096dc274c7420e refs/tags/v0.7.1
-^98d959ac5374bd14123f53318e6c8a8d481ffd92
-eb5ccb5fb1f735b82da3a43ee0d8d398bd932840 refs/tags/v0.7.2
-^6f2808c7d11564e2269e9f64b9671f8c080c893d
-23fe9e844ecafd18a5d713618a36fb68846db951 refs/tags/v0.7.3
-^62e03d710cd02043156ac86da3b07e5186c78e11
-09b1e2bab6467a8d50e37939b4d1fc0b9777adfd refs/tags/v0.7.4
-^696e488ecb089236a297939248d4616d4665d347
-fa8752466e94879be074386c2f0420640cec3b41 refs/tags/v0.8.0
-^02dd440a25097e8528d9cdfa85132b6920649547
-7c3df8e2c78a85ef7f5d2e8f100e5f54573c71c7 refs/tags/v0.8.1
-^9f4296c08382b1374018346cce3bb5d40036f47a
-f8899c67c2508ded911a93117b3186df6df631bd refs/tags/v0.8.2
-^ac924d7f940f05063d7ef0503aa7f3a1576bf380
-683a29d4d0a536b6a97c07d1deeacb8cc11a6af7 refs/tags/v0.8.3
-^3d54d69e252bb537dc8fb03cc96ada084bd5da8d
-2aeefa379b700de0c9c1b4ed94e186e0d1d1a580 refs/tags/v0.8.4
-^f2f28cbe487883caed333ffb4f5f7942bed64c09
-5ea2a003691a63630e6c1d492c96d6581338efb8 refs/tags/v0.8.5
-^bd562e4ff7c10cad71711828548cbb584bd4a80b
-11ee9f81e8b8a077113cdf96d655d7cf9961a03d refs/tags/v0.8.6
-^e5e5766ebb51e1c36b6804fe0ddc02ee8ca19cc6
-544c73b3b27c93df0d61172c62a7eee2e8252953 refs/tags/v0.8.7
-^3eaa43a7a327646acdebe87000422c6fd086adbe
-83055d17d104c267aeebda070246b0917dbfffb2 refs/tags/v0.9.0
-^406d3a9527e08ea148e7c10ffa4009e0e5070b11
-37a1511c0e7c6a1a522bab7355289a71a7876ad2 refs/tags/v0.9.1
-^ea65ac688cdd89dad65bcdc3b62d5e152b47f1ec
-ee0df070f78e83f3857301aa0e4340c15743403d refs/tags/v0.9.10
-^6923889e5386abad1aa07e2c29462fc469d3a5d4
-cb5e1df91a1b8d020de63d6cbbacd9f74097a375 refs/tags/v0.9.11
-^3aa528fccd2c3500b2eeafa6589c3f8f07564186
-6d328d3291833a9991cb27df45d1c82cfc3bc5fb refs/tags/v0.9.12
-^11e3f53fd259f0297a4d8f440afceb8395b45622
-b63100856c3a795440047324aaf863c6339e859f refs/tags/v0.9.13
-^0a8f0ee6c560edc032f66a25d527e9cd7ed6b62b
-e13bcdadf3b57f91e8eca678846480522eb214ba refs/tags/v0.9.14
-^612fc4dd7514b3da2ac774a6daeb7baa60314f36
-1c92b49d30e7215483d5c0c038da2d09d6ac1d16 refs/tags/v0.9.15
-^7b5c5e99327c19600ab2bab89960ba217be52949
-bc3fe7a8ebf166e5187f7bac00c70e40a9b192fe refs/tags/v0.9.16
-^c0fc4bbdccf1d328eaa098f3287e427e369517c0
-d5288d89f8c1e1c8c82218a23deedfabb845fa1c refs/tags/v0.9.17
-^f79aa206ec572c225c8bd32b5c2b1d7cc5ede692
-bce7ea3e62682b29d61d56cc6bcc0e794857d557 refs/tags/v0.9.18
-^c61e99a36878fc618e29633db0e9652be13f6284
-39cb7ca0a51e7e4bfc400b285141a71ac7b565c7 refs/tags/v0.9.19
-^a47b23204b43d5b823feeb52b0c868b2c96847ca
-43dd6489282d965072eb48479af5e8d90ac6ad38 refs/tags/v0.9.2
-^af5703b35756667eb008bdffb22626616bbae020
-73e60038c62b281fd0e4ff5565f35797fed46a1a refs/tags/v0.9.20
-^e29e64ed7d262904d22ce0a708e67cc02115f497
-828fcd80c23df5caf0b7fdbf897ba45a92f3dce7 refs/tags/v0.9.3
-^aeae84bf8babcd7130f71b5941834eeb4fafa61a
-31f684d189aec37550e82e4c7cf3ac751a781ade refs/tags/v0.9.4
-^f358a2e8f9269afef85d82549de4945942b39d6c
-63540cc06386523c08857cf435ad9c2f6daaef8a refs/tags/v0.9.5
-^c0ad999f37675dd1bbed11d901f34259827bb405
-e7fe15e6ca0cb0f81ec42b5b309ce6f720525193 refs/tags/v0.9.6
-^5325df0135c467d21cf93cd5c5df6af60a87a9e8
-0dda255fe75318707bb20e0078ace6da1f160cd2 refs/tags/v0.9.7
-^138c330da2ace7617af3c6b671fbee049f387fb7
-568ce8f0a850d3d7e00c33247edffe366cff0d51 refs/tags/v0.9.8
-^6903ac23e430b4170b108bb2f631562560c37fe0
-2d5bc52527e46171d2e2a7c4d9c87fa2a4e39fee refs/tags/v0.9.9
-^af8446a0985ba76873c25a6aae5125e47c7a3194
-d27f964d1f45d546419795b058fea60f3f1f21ab refs/tags/v1.0.0
-^613234b866fd08ea2221d183edfd9eb6d8a8bf4d
-421d9ff41f699cc344845df9869dccff0ce4ad86 refs/tags/v1.0.1
-^cbe760aa8ad43d3908b7c9408d7f3946747981b1
-e1ec6d2f08937878a985bfa7d4f49e93312dc7e0 refs/tags/v1.0.2
-^6b92cd6b29ddeea5a113b6e5d8d854b6986e3fd1
-7749d54fb000641dfa6c8eebfb8765175f187a13 refs/tags/v1.0.3
-^7b4df729c1c4d86589f8ccadc0bd20ee733416f9
-aaeca4ff01f858cd719ea5b86eef7dcc3ba259ca refs/tags/v1.0.4
-^67443c28b4aff60023ce143475c2d287c264f2f7
-d7e1af79c4d152d16bcacfcd2ca18d58e6b3201b refs/tags/v1.0.5
-^737ea5ce34c8270479811acfacba02112e202625
-0acf1123a044c8afd68112387712abd59e45a2eb refs/tags/v1.0.6
-^1cfb7aeb582789f3b15a03da5b662d1811e2a3f1
-bd4f1b4cf7c58e55298c326184e5ad1a15c3aff0 refs/tags/v1.0.7
-^995688b9cfea4fb01a5b8ad0e110fec0866e501c
-5beda43a6b388af5e7c1bcc55384163d97dcf836 refs/tags/v1.0.8
-^d01ffc0c88d9ce736be3dee99b4f9d3fcc07b685
-f792dab070dbdedc3b968483287fa59e6ae48a03 refs/tags/v1.0.9
-^471d299f5d5348dfbba6132779587553c3a709a7
-a08c7835b05e2bd816efb1f8036cb7c9bf59b906 refs/tags/v1.1.0
-^8542e21e17587ee2e928cdfedc1cb82996df7719
-e9d11158cb1b18a0631a94c4e8599c0f8c64adb7 refs/tags/v1.1.1
-^8608faad1e0b25c80b1f9b93439d6fd450db5c15
-2a721794867c76e9ac9e653e76da9503cbc9d60f refs/tags/v1.1.2
-^65cd61e43350c0de0a69103aed1ecf7f2b081ab8
-c130de320738a9ae084ba3d54f033c98e6e82d65 refs/tags/v1.1.3
-^6f768dc4eb2a2cb7798e31c7465af77b94ca2733
-3fdbbcc01249d7a3f0559192debfe09f844aef6e refs/tags/v1.1.4
-^8c2229cce5d4d4574e8fb7b130281497f746f0fa
-28618cde22c864eef6ecdba9da636a2f2f611b20 refs/tags/v1.1.5
-^7500b4bd90fc942468f94dd3a12dbcdf9c3199a6
-1706bc84f5b0882dec6f1854d9054be7e3d12ab2 refs/tags/v1.1.6
-^7a35372e30dca2a10c843219597bc4bc481fdda0
-c0a5fb42c214d585a84967b2e172889d9278d325 refs/tags/v1.1.7
-^f62a0838064baf089ad9fe3c8f6f2ffe0775afb2
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/refs
^
|
-(directory)
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/refs/heads
^
|
-(directory)
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/refs/heads/master
^
|
@@ -1 +0,0 @@
-f62a0838064baf089ad9fe3c8f6f2ffe0775afb2
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/refs/remotes
^
|
-(directory)
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/refs/remotes/origin
^
|
-(directory)
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/refs/remotes/origin/HEAD
^
|
@@ -1 +0,0 @@
-ref: refs/remotes/origin/master
|
[-]
[+]
|
Deleted |
nginx-rtmp-module-1.1.6.tar.gz/.git/refs/tags
^
|
-(directory)
|
|
Deleted |
nginx-rtmp-module-1.1.9.tar.gz
^
|
|
Deleted |
nginx-rtmp-module-dev.tar.gz
^
|