mirror of
https://github.com/nginx/nginx.git
synced 2024-12-27 01:11:13 -06:00
nginx-0.1.33-RELEASE import
*) Bugfix: nginx could not be built with the --without-pcre parameter; the bug had appeared in 0.1.29. *) Bugfix: 3, 4, 7, and 8 the "proxy_set_header" directives in one level cause the bus fault on start up. *) Bugfix: the HTTP protocol was specified in the HTTPS redirects. *) Bugfix: if the "rewrite" directive used the captures inside the "if" directive, then the 500 error code was returned.
This commit is contained in:
parent
debb8a42db
commit
4959ec482e
12
auto/cc/ccc
12
auto/cc/ccc
@ -10,27 +10,30 @@ ngx_include_opt="-I"
|
||||
|
||||
CFLAGS="$CFLAGS -msg_enable level6 -msg_fatal level6"
|
||||
|
||||
CFLAGS="$CFLAGS -msg_disable unknownmacro"
|
||||
CFLAGS="$CFLAGS -msg_disable unusedincl"
|
||||
CFLAGS="$CFLAGS -msg_disable unnecincl"
|
||||
CFLAGS="$CFLAGS -msg_disable nestincl"
|
||||
CFLAGS="$CFLAGS -msg_disable unusedincl"
|
||||
CFLAGS="$CFLAGS -msg_disable unknownmacro"
|
||||
CFLAGS="$CFLAGS -msg_disable strctpadding"
|
||||
CFLAGS="$CFLAGS -msg_disable ansialiascast"
|
||||
CFLAGS="$CFLAGS -msg_disable inlinestoclsmod"
|
||||
CFLAGS="$CFLAGS -msg_disable cxxkeyword"
|
||||
CFLAGS="$CFLAGS -msg_disable longlongsufx"
|
||||
CFLAGS="$CFLAGS -msg_disable valuepres"
|
||||
|
||||
# STUB
|
||||
CFLAGS="$CFLAGS -msg_disable truncintcast"
|
||||
CFLAGS="$CFLAGS -msg_disable trunclongcast"
|
||||
|
||||
CFLAGS="$CFLAGS -msg_disable truncintasn"
|
||||
CFLAGS="$CFLAGS -msg_disable trunclongint"
|
||||
CFLAGS="$CFLAGS -msg_disable intconcastsgn"
|
||||
CFLAGS="$CFLAGS -msg_disable intconstsign"
|
||||
CFLAGS="$CFLAGS -msg_disable hexoctunsign"
|
||||
CFLAGS="$CFLAGS -msg_disable switchlong"
|
||||
CFLAGS="$CFLAGS -msg_disable valuepres"
|
||||
CFLAGS="$CFLAGS -msg_disable subscrbounds2"
|
||||
|
||||
CFLAGS="$CFLAGS -msg_disable hexoctunsign"
|
||||
|
||||
CFLAGS="$CFLAGS -msg_disable ignorecallval"
|
||||
CFLAGS="$CFLAGS -msg_disable nonstandcast"
|
||||
CFLAGS="$CFLAGS -msg_disable embedcomment"
|
||||
@ -38,4 +41,5 @@ CFLAGS="$CFLAGS -msg_disable unreachcode"
|
||||
CFLAGS="$CFLAGS -msg_disable questcompare2"
|
||||
CFLAGS="$CFLAGS -msg_disable unusedtop"
|
||||
CFLAGS="$CFLAGS -msg_disable unrefdecl"
|
||||
|
||||
CFLAGS="$CFLAGS -msg_disable bitnotint"
|
||||
|
@ -124,7 +124,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then
|
||||
. auto/feature
|
||||
|
||||
|
||||
if [ $NGX_CC_NAME = 'ccc' ]; then
|
||||
if [ "$NGX_CC_NAME" = "ccc" ]; then
|
||||
echo "checking for C99 variadic macros ... disabled"
|
||||
else
|
||||
ngx_feature="C99 variadic macros"
|
||||
|
@ -34,7 +34,7 @@ if `$CC -v 2>&1 | grep 'gcc version' 2>&1 >/dev/null`; then
|
||||
echo " using GNU C compiler"
|
||||
|
||||
else
|
||||
if `$CC -V 2>&1 | grep '^Intel(R) C++ Compiler' 2>&1 >/dev/null`; then
|
||||
if `$CC -V 2>&1 | grep '^Intel(R) C' 2>&1 >/dev/null`; then
|
||||
NGX_CC_NAME=icc
|
||||
echo " using Intel C++ compiler"
|
||||
|
||||
@ -49,6 +49,7 @@ if `$CC -V 2>&1 | grep '^aCC: ' 2>&1 >/dev/null`; then
|
||||
echo " using HP aC++ compiler"
|
||||
|
||||
else
|
||||
NGX_CC_NAME=unknown
|
||||
echo " unknown"
|
||||
|
||||
fi # acc
|
||||
|
@ -53,8 +53,9 @@ case "$NGX_PLATFORM" in
|
||||
;;
|
||||
|
||||
OSF1:*)
|
||||
# HP Tru64
|
||||
# Tru64 UNIX
|
||||
have=NGX_TRU64 . auto/have_headers
|
||||
have=NGX_HAVE_STRERROR_R . auto/nohave
|
||||
CORE_INCS="$UNIX_INCS"
|
||||
CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
|
||||
CORE_SRCS="$UNIX_SRCS"
|
||||
|
@ -9,6 +9,53 @@
|
||||
<title lang="en">nginx changelog</title>
|
||||
|
||||
|
||||
<changes ver="0.1.33" date="23.05.2005">
|
||||
|
||||
<change type="bugfix">
|
||||
<para lang="ru">
|
||||
nginx ÎÅ ÓÏÂÉÒÁÌÓÑ Ó ÐÁÒÁÍÅÔÒÏÍ --without-pcre;
|
||||
ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.1.29.
|
||||
</para>
|
||||
<para lang="en">
|
||||
nginx could not be built with the --without-pcre parameter;
|
||||
bug appeared in 0.1.29.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="bugfix">
|
||||
<para lang="ru">
|
||||
3, 5, 7 É 8 ÄÉÒÅËÔÉ× proxy_set_header ÎÁ ÏÄÎÏÍ ÕÒÏ×ÎÅ ×ÙÚÙ×ÁÌÉ
|
||||
bus fault ÐÒÉ ÚÁÐÕÓËÅ.
|
||||
</para>
|
||||
<para lang="en">
|
||||
3, 4, 7, and 8 the "proxy_set_header" directives in one level cause
|
||||
the bus fault on start up.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="bugfix">
|
||||
<para lang="ru">
|
||||
× ÒÅÄÉÒÅËÔÁÈ ×ÎÕÔÒÉ HTTPS ÓÅÒ×ÅÒÁ ÂÙÌ ÕËÁÚÁÎ ÐÒÏÔÏËÏÌ HTTP.
|
||||
</para>
|
||||
<para lang="en">
|
||||
the HTTP protocol was specified in the HTTPS redirects.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="bugfix">
|
||||
<para lang="ru">
|
||||
ÅÓÌÉ ÄÉÒÅËÔÉ×Á rewrite ÉÓÐÏÌØÚÏ×ÁÌÁ ×ÙÄÅÌÅÎÉÑ ×ÎÕÔÒÉ ÄÉÒÅËÔÉ×Ù if, ÔÏ
|
||||
×ÏÚ×ÒÁÝÁÌÁÓØ ÏÛÉÂËÁ 500.
|
||||
</para>
|
||||
<para lang="en">
|
||||
if the "rewrite" directive used the captures inside the "if" directive, then
|
||||
the 500 error code was returned.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
</changes>
|
||||
|
||||
|
||||
<changes ver="0.1.32" date="19.05.2005">
|
||||
|
||||
<change type="bugfix">
|
||||
|
@ -440,7 +440,7 @@ ngx_save_argv(ngx_cycle_t *cycle, int argc, char *const *argv)
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
ngx_cpystrn((u_char *) ngx_argv[i], (u_char *) argv[i], len);
|
||||
(void) ngx_cpystrn((u_char *) ngx_argv[i], (u_char *) argv[i], len);
|
||||
}
|
||||
|
||||
ngx_argv[i] = NULL;
|
||||
@ -473,8 +473,8 @@ ngx_core_module_create_conf(ngx_cycle_t *cycle)
|
||||
ccf->master = NGX_CONF_UNSET;
|
||||
ccf->worker_processes = NGX_CONF_UNSET;
|
||||
ccf->debug_points = NGX_CONF_UNSET;
|
||||
ccf->user = (ngx_uid_t) NGX_CONF_UNSET;
|
||||
ccf->group = (ngx_gid_t) NGX_CONF_UNSET;
|
||||
ccf->user = (ngx_uid_t) NGX_CONF_UNSET_UINT;
|
||||
ccf->group = (ngx_gid_t) NGX_CONF_UNSET_UINT;
|
||||
#if (NGX_THREADS)
|
||||
ccf->worker_threads = NGX_CONF_UNSET;
|
||||
ccf->thread_stack_size = NGX_CONF_UNSET_SIZE;
|
||||
@ -507,7 +507,7 @@ ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf)
|
||||
|
||||
#if !(NGX_WIN32)
|
||||
|
||||
if (ccf->user == (uid_t) NGX_CONF_UNSET && geteuid() == 0) {
|
||||
if (ccf->user == (uid_t) NGX_CONF_UNSET_UINT && geteuid() == 0) {
|
||||
|
||||
pwd = getpwnam(NGX_USER);
|
||||
if (pwd == NULL) {
|
||||
@ -573,7 +573,7 @@ ngx_set_user(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
struct group *grp;
|
||||
ngx_str_t *value;
|
||||
|
||||
if (ccf->user != (uid_t) NGX_CONF_UNSET) {
|
||||
if (ccf->user != (uid_t) NGX_CONF_UNSET_UINT) {
|
||||
return "is duplicate";
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
#define _NGINX_H_INCLUDED_
|
||||
|
||||
|
||||
#define NGINX_VER "nginx/0.1.32"
|
||||
#define NGINX_VER "nginx/0.1.33"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
#define NGX_NEWPID_EXT ".newbin"
|
||||
|
@ -457,7 +457,7 @@ ngx_conf_read_token(ngx_conf_t *cf)
|
||||
return NGX_OK;
|
||||
|
||||
case '}':
|
||||
if (cf->args->nelts > 0) {
|
||||
if (cf->args->nelts != 0) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
|
||||
"unexpected \"}\" in %s:%ui",
|
||||
cf->conf_file->file.name.data,
|
||||
|
@ -126,9 +126,9 @@ typedef long ngx_flag_t;
|
||||
|
||||
|
||||
#if ((__GNU__ == 2) && (__GNUC_MINOR__ < 8))
|
||||
#define NGX_MAX_UINT32_VALUE 0xffffffffLL
|
||||
#define NGX_MAX_UINT32_VALUE (uint32_t) 0xffffffffLL
|
||||
#else
|
||||
#define NGX_MAX_UINT32_VALUE 0xffffffff
|
||||
#define NGX_MAX_UINT32_VALUE (uint32_t) 0xffffffff
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -17,8 +17,8 @@ typedef struct {
|
||||
|
||||
struct sockaddr *sockaddr;
|
||||
socklen_t socklen; /* size of sockaddr */
|
||||
int addr; /* offset to address in sockaddr */
|
||||
int addr_text_max_len;
|
||||
size_t addr; /* offset to address in sockaddr */
|
||||
size_t addr_text_max_len;
|
||||
ngx_str_t addr_text;
|
||||
|
||||
int family;
|
||||
|
@ -717,7 +717,7 @@ void ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
|
||||
continue;
|
||||
}
|
||||
#else
|
||||
if (user != (ngx_uid_t) -1) {
|
||||
if (user != (ngx_uid_t) NGX_CONF_UNSET_UINT) {
|
||||
|
||||
if (ngx_file_info((const char *) file[i].name.data, &fi) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
|
@ -61,8 +61,8 @@ ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool,
|
||||
n = ngx_next_temp_number(0);
|
||||
|
||||
for ( ;; ) {
|
||||
ngx_sprintf(file->name.data + path->name.len + 1 + path->len,
|
||||
"%0muA%Z", n);
|
||||
(void) ngx_sprintf(file->name.data + path->name.len + 1 + path->len,
|
||||
"%0muA%Z", n);
|
||||
|
||||
ngx_create_hashed_filename(file, path);
|
||||
|
||||
@ -123,7 +123,8 @@ ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool,
|
||||
void
|
||||
ngx_create_hashed_filename(ngx_file_t *file, ngx_path_t *path)
|
||||
{
|
||||
ngx_uint_t i, name, pos, level;
|
||||
size_t name, pos, level;
|
||||
ngx_uint_t i;
|
||||
|
||||
name = file->name.len;
|
||||
pos = path->name.len + 1;
|
||||
@ -151,8 +152,9 @@ ngx_create_hashed_filename(ngx_file_t *file, ngx_path_t *path)
|
||||
ngx_int_t
|
||||
ngx_create_path(ngx_file_t *file, ngx_path_t *path)
|
||||
{
|
||||
int i, pos;
|
||||
ngx_err_t err;
|
||||
size_t pos;
|
||||
ngx_err_t err;
|
||||
ngx_uint_t i;
|
||||
|
||||
pos = path->name.len;
|
||||
|
||||
@ -344,7 +346,7 @@ ngx_create_pathes(ngx_cycle_t *cycle, ngx_uid_t user)
|
||||
}
|
||||
}
|
||||
|
||||
if (user == (ngx_uid_t) -1) {
|
||||
if (user == (ngx_uid_t) NGX_CONF_UNSET_UINT) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -33,8 +33,8 @@ struct ngx_file_s {
|
||||
|
||||
struct ngx_path_s {
|
||||
ngx_str_t name;
|
||||
ngx_uint_t len;
|
||||
ngx_uint_t level[3];
|
||||
size_t len;
|
||||
size_t level[3];
|
||||
ngx_gc_handler_pt cleaner;
|
||||
|
||||
u_char *conf_file;
|
||||
|
@ -6,7 +6,6 @@
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
#include <ngx_garbage_collector.h>
|
||||
|
||||
|
||||
|
||||
|
@ -225,8 +225,9 @@ ngx_inet_upstream_parse(ngx_conf_t *cf, ngx_inet_upstream_t *u)
|
||||
{
|
||||
char *err;
|
||||
u_char *host;
|
||||
size_t len;
|
||||
in_addr_t in_addr;
|
||||
ngx_uint_t i, len;
|
||||
ngx_uint_t i;
|
||||
ngx_peers_t *peers;
|
||||
struct hostent *h;
|
||||
struct sockaddr_in *sin;
|
||||
@ -281,7 +282,7 @@ ngx_inet_upstream_parse(ngx_conf_t *cf, ngx_inet_upstream_t *u)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ngx_cpystrn(host, u->host.data, u->host.len + 1);
|
||||
(void) ngx_cpystrn(host, u->host.data, u->host.len + 1);
|
||||
|
||||
/* AF_INET only */
|
||||
|
||||
|
@ -179,7 +179,7 @@ ngx_log_write(ngx_log_t *log, u_char *errstr, size_t len)
|
||||
|
||||
errstr[len++] = LF;
|
||||
|
||||
write(log->file->fd, errstr, len);
|
||||
(void) write(log->file->fd, errstr, len);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
@ -381,12 +381,12 @@ ngx_output_chain_copy_buf(ngx_buf_t *dst, ngx_buf_t *src, ngx_uint_t sendfile)
|
||||
n = ngx_read_file(src->file, dst->pos, (size_t) size, src->file_pos);
|
||||
|
||||
if (n == NGX_ERROR) {
|
||||
return n;
|
||||
return (ngx_int_t) n;
|
||||
}
|
||||
|
||||
#if (NGX_FILE_AIO_READ)
|
||||
if (n == NGX_AGAIN) {
|
||||
return n;
|
||||
return (ngx_int_t) n;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -15,7 +15,7 @@ ngx_cpystrn(u_char *dst, u_char *src, size_t n)
|
||||
return dst;
|
||||
}
|
||||
|
||||
for (/* void */; --n; dst++, src++) {
|
||||
for ( /* void */ ; --n; dst++, src++) {
|
||||
*dst = *src;
|
||||
|
||||
if (*dst == '\0') {
|
||||
|
@ -155,14 +155,14 @@ ngx_time_update(time_t s)
|
||||
|
||||
p = cached_http_time[slot];
|
||||
|
||||
ngx_sprintf(p, "%s, %02d %s %4d %02d:%02d:%02d GMT",
|
||||
week[ngx_cached_gmtime.ngx_tm_wday],
|
||||
ngx_cached_gmtime.ngx_tm_mday,
|
||||
months[ngx_cached_gmtime.ngx_tm_mon - 1],
|
||||
ngx_cached_gmtime.ngx_tm_year,
|
||||
ngx_cached_gmtime.ngx_tm_hour,
|
||||
ngx_cached_gmtime.ngx_tm_min,
|
||||
ngx_cached_gmtime.ngx_tm_sec);
|
||||
(void) ngx_sprintf(p, "%s, %02d %s %4d %02d:%02d:%02d GMT",
|
||||
week[ngx_cached_gmtime.ngx_tm_wday],
|
||||
ngx_cached_gmtime.ngx_tm_mday,
|
||||
months[ngx_cached_gmtime.ngx_tm_mon - 1],
|
||||
ngx_cached_gmtime.ngx_tm_year,
|
||||
ngx_cached_gmtime.ngx_tm_hour,
|
||||
ngx_cached_gmtime.ngx_tm_min,
|
||||
ngx_cached_gmtime.ngx_tm_sec);
|
||||
|
||||
ngx_cached_http_time.data = p;
|
||||
|
||||
@ -175,7 +175,7 @@ ngx_time_update(time_t s)
|
||||
#elif (NGX_HAVE_GMTOFF)
|
||||
|
||||
ngx_localtime(&tm);
|
||||
ngx_gmtoff = tm.ngx_tm_gmtoff / 60;
|
||||
ngx_gmtoff = (ngx_int_t) (tm.ngx_tm_gmtoff / 60);
|
||||
|
||||
#else
|
||||
|
||||
@ -187,22 +187,22 @@ ngx_time_update(time_t s)
|
||||
|
||||
p = cached_err_log_time[slot];
|
||||
|
||||
ngx_sprintf(p, "%4d/%02d/%02d %02d:%02d:%02d",
|
||||
tm.ngx_tm_year, tm.ngx_tm_mon,
|
||||
tm.ngx_tm_mday, tm.ngx_tm_hour,
|
||||
tm.ngx_tm_min, tm.ngx_tm_sec);
|
||||
(void) ngx_sprintf(p, "%4d/%02d/%02d %02d:%02d:%02d",
|
||||
tm.ngx_tm_year, tm.ngx_tm_mon,
|
||||
tm.ngx_tm_mday, tm.ngx_tm_hour,
|
||||
tm.ngx_tm_min, tm.ngx_tm_sec);
|
||||
|
||||
ngx_cached_err_log_time.data = p;
|
||||
|
||||
|
||||
p = cached_http_log_time[slot];
|
||||
|
||||
ngx_sprintf(p, "%02d/%s/%d:%02d:%02d:%02d %c%02d%02d",
|
||||
tm.ngx_tm_mday, months[tm.ngx_tm_mon - 1],
|
||||
tm.ngx_tm_year, tm.ngx_tm_hour,
|
||||
tm.ngx_tm_min, tm.ngx_tm_sec,
|
||||
ngx_gmtoff < 0 ? '-' : '+',
|
||||
abs(ngx_gmtoff / 60), abs(ngx_gmtoff % 60));
|
||||
(void) ngx_sprintf(p, "%02d/%s/%d:%02d:%02d:%02d %c%02d%02d",
|
||||
tm.ngx_tm_mday, months[tm.ngx_tm_mon - 1],
|
||||
tm.ngx_tm_year, tm.ngx_tm_hour,
|
||||
tm.ngx_tm_min, tm.ngx_tm_sec,
|
||||
ngx_gmtoff < 0 ? '-' : '+',
|
||||
abs(ngx_gmtoff / 60), abs(ngx_gmtoff % 60));
|
||||
|
||||
ngx_cached_http_log_time.data = p;
|
||||
|
||||
|
@ -72,7 +72,7 @@ ngx_unix_upstream_parse(ngx_conf_t *cf, ngx_unix_domain_upstream_t *u)
|
||||
peers->number = 1;
|
||||
|
||||
sun->sun_family = AF_UNIX;
|
||||
ngx_cpystrn((u_char *) sun->sun_path, u->url.data + 5, len + 1);
|
||||
(void) ngx_cpystrn((u_char *) sun->sun_path, u->url.data + 5, len + 1);
|
||||
|
||||
peers->peer[0].sockaddr = (struct sockaddr *) sun;
|
||||
peers->peer[0].socklen = sizeof(struct sockaddr_un);
|
||||
|
@ -311,8 +311,8 @@ static char ngx_http_proxy_version[] = " HTTP/1.0" CRLF;
|
||||
|
||||
|
||||
static ngx_table_elt_t ngx_http_proxy_headers[] = {
|
||||
{ 0, ngx_string("Host"), ngx_string("$proxy_host"), },
|
||||
{ 0, ngx_string("Connection"), ngx_string("close"), },
|
||||
{ 0, ngx_string("Host"), ngx_string("$proxy_host") },
|
||||
{ 0, ngx_string("Connection"), ngx_string("close") },
|
||||
{ 0, ngx_null_string, ngx_null_string }
|
||||
};
|
||||
|
||||
@ -1560,6 +1560,8 @@ ngx_http_proxy_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
|
||||
|
||||
*s = *h;
|
||||
|
||||
src = conf->headers_source->elts;
|
||||
|
||||
next:
|
||||
|
||||
continue;
|
||||
|
@ -556,8 +556,7 @@ ngx_http_rewrite(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
regex_end->redirect = regex->redirect;
|
||||
|
||||
if (last) {
|
||||
code = ngx_http_script_add_code(lcf->codes, sizeof(uintptr_t),
|
||||
®ex);
|
||||
code = ngx_http_script_add_code(lcf->codes, sizeof(uintptr_t), ®ex);
|
||||
if (code == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
@ -713,6 +712,11 @@ ngx_http_rewrite_if(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
}
|
||||
|
||||
|
||||
if (lcf->captures < nlcf->captures) {
|
||||
lcf->captures = nlcf->captures;
|
||||
}
|
||||
|
||||
|
||||
if (elts != lcf->codes->elts) {
|
||||
if_code = (ngx_http_script_if_code_t *)
|
||||
((u_char *) if_code + ((u_char *) lcf->codes->elts - elts));
|
||||
|
@ -264,11 +264,26 @@ ngx_http_header_filter(ngx_http_request_t *r)
|
||||
{
|
||||
r->headers_out.location->hash = 0;
|
||||
|
||||
len += sizeof("Location: http://") - 1
|
||||
+ r->server_name.len + r->headers_out.location->value.len + 2;
|
||||
#if (NGX_HTTP_SSL)
|
||||
if (r->connection->ssl) {
|
||||
len += sizeof("Location: https://") - 1
|
||||
+ r->server_name.len
|
||||
+ r->headers_out.location->value.len + 2;
|
||||
|
||||
if (r->port != 80) {
|
||||
len += r->port_text->len;
|
||||
if (r->port != 443) {
|
||||
len += r->port_text->len;
|
||||
}
|
||||
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
len += sizeof("Location: http://") - 1
|
||||
+ r->server_name.len
|
||||
+ r->headers_out.location->value.len + 2;
|
||||
|
||||
if (r->port != 80) {
|
||||
len += r->port_text->len;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -396,13 +411,33 @@ ngx_http_header_filter(ngx_http_request_t *r)
|
||||
&& r->headers_out.location->value.data[0] == '/')
|
||||
{
|
||||
p = b->last + sizeof("Location: ") - 1;
|
||||
b->last = ngx_cpymem(b->last, "Location: http://",
|
||||
sizeof("Location: http://") - 1);
|
||||
|
||||
b->last = ngx_cpymem(b->last, "Location: http",
|
||||
sizeof("Location: http") - 1);
|
||||
|
||||
#if (NGX_HTTP_SSL)
|
||||
if (r->connection->ssl) {
|
||||
*b->last++ ='s';
|
||||
}
|
||||
#endif
|
||||
|
||||
*b->last++ = ':'; *b->last++ = '/'; *b->last++ = '/';
|
||||
b->last = ngx_cpymem(b->last, r->server_name.data,
|
||||
r->server_name.len);
|
||||
if (r->port != 80) {
|
||||
b->last = ngx_cpymem(b->last, r->port_text->data,
|
||||
r->port_text->len);
|
||||
|
||||
#if (NGX_HTTP_SSL)
|
||||
if (r->connection->ssl) {
|
||||
if (r->port != 443) {
|
||||
b->last = ngx_cpymem(b->last, r->port_text->data,
|
||||
r->port_text->len);
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
if (r->port != 80) {
|
||||
b->last = ngx_cpymem(b->last, r->port_text->data,
|
||||
r->port_text->len);
|
||||
}
|
||||
}
|
||||
|
||||
b->last = ngx_cpymem(b->last, r->headers_out.location->value.data,
|
||||
|
@ -463,6 +463,9 @@ ngx_http_script_start_args_code(ngx_http_script_engine_t *e)
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if (NGX_PCRE)
|
||||
|
||||
void
|
||||
ngx_http_script_regex_start_code(ngx_http_script_engine_t *e)
|
||||
{
|
||||
@ -693,6 +696,8 @@ ngx_http_script_regex_end_code(ngx_http_script_engine_t *e)
|
||||
e->ip += sizeof(ngx_http_script_regex_end_code_t);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
void
|
||||
ngx_http_script_return_code(ngx_http_script_engine_t *e)
|
||||
|
@ -79,6 +79,8 @@ typedef struct {
|
||||
} ngx_http_script_copy_capture_code_t;
|
||||
|
||||
|
||||
#if (NGX_PCRE)
|
||||
|
||||
typedef struct {
|
||||
ngx_http_script_code_pt code;
|
||||
ngx_regex_t *regex;
|
||||
@ -114,6 +116,8 @@ typedef struct {
|
||||
uintptr_t redirect:1;
|
||||
} ngx_http_script_regex_end_code_t;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_http_script_code_pt code;
|
||||
@ -156,10 +160,11 @@ size_t ngx_http_script_copy_var_len_code(ngx_http_script_engine_t *e);
|
||||
void ngx_http_script_copy_var_code(ngx_http_script_engine_t *e);
|
||||
size_t ngx_http_script_copy_capture_len_code(ngx_http_script_engine_t *e);
|
||||
void ngx_http_script_copy_capture_code(ngx_http_script_engine_t *e);
|
||||
void ngx_http_script_start_args_code(ngx_http_script_engine_t *e);
|
||||
#if (NGX_PCRE)
|
||||
void ngx_http_script_regex_start_code(ngx_http_script_engine_t *e);
|
||||
void ngx_http_script_regex_end_code(ngx_http_script_engine_t *e);
|
||||
void ngx_http_script_copy_capture_code(ngx_http_script_engine_t *e);
|
||||
void ngx_http_script_start_args_code(ngx_http_script_engine_t *e);
|
||||
#endif
|
||||
void ngx_http_script_return_code(ngx_http_script_engine_t *e);
|
||||
void ngx_http_script_if_code(ngx_http_script_engine_t *e);
|
||||
void ngx_http_script_complex_value_code(ngx_http_script_engine_t *e);
|
||||
|
@ -52,7 +52,7 @@ u_char *ngx_strerror_r(int err, u_char *errstr, size_t size);
|
||||
|
||||
#else
|
||||
|
||||
/* Solaris has thread-safe strerror() */
|
||||
/* Solaris and Tru64 UNIX have thread-safe strerror() */
|
||||
|
||||
#define ngx_strerror_r(err, errstr, size) \
|
||||
ngx_cpystrn(errstr, (u_char *) strerror(err), size)
|
||||
|
@ -14,7 +14,7 @@ void ngx_localtime(ngx_tm_t *tm)
|
||||
time_t now;
|
||||
|
||||
now = ngx_time();
|
||||
localtime_r(&now, tm);
|
||||
(void) localtime_r(&now, tm);
|
||||
|
||||
#else
|
||||
time_t now;
|
||||
@ -37,7 +37,7 @@ void ngx_libc_localtime(struct tm *tm)
|
||||
time_t now;
|
||||
|
||||
now = ngx_time();
|
||||
localtime_r(&now, tm);
|
||||
(void) localtime_r(&now, tm);
|
||||
|
||||
#else
|
||||
time_t now;
|
||||
@ -57,7 +57,7 @@ void ngx_libc_gmtime(struct tm *tm)
|
||||
time_t now;
|
||||
|
||||
now = ngx_time();
|
||||
gmtime_r(&now, tm);
|
||||
(void) gmtime_r(&now, tm);
|
||||
|
||||
#else
|
||||
time_t now;
|
||||
|
@ -57,9 +57,9 @@ void ngx_localtime(ngx_tm_t *tm);
|
||||
void ngx_libc_localtime(struct tm *tm);
|
||||
void ngx_libc_gmtime(struct tm *tm);
|
||||
|
||||
#define ngx_gettimeofday(tp) gettimeofday(tp, NULL);
|
||||
#define ngx_msleep(ms) usleep(ms * 1000)
|
||||
#define ngx_sleep(s) sleep(s)
|
||||
#define ngx_gettimeofday(tp) (void) gettimeofday(tp, NULL);
|
||||
#define ngx_msleep(ms) (void) usleep(ms * 1000)
|
||||
#define ngx_sleep(s) (void) sleep(s)
|
||||
|
||||
|
||||
#endif /* _NGX_TIME_H_INCLUDED_ */
|
||||
|
Loading…
Reference in New Issue
Block a user