<title lang="en">nginx changelog</title>
+<changes ver="0.3.52" date="03.07.2006">
+
+<change type="change">
+<para lang="ru">
+×ÏÓÓÔÁÎÏ×ÌÅÎÏ ÐÏ×ÅÄÅÎÉÅ ÍÏÄÕÌÑ ngx_http_index_module ÄÌÑ ÚÁÐÒÏÓÏ× "POST /":
+ËÁË × ×ÅÒÓÉÉ ÄÏ 0.3.40, ÍÏÄÕÌØ ÔÅÐÅÒØ ÎÅ ×ÙÄÁ£Ô ÏÛÉÂËÕ 405.
+</para>
+<para lang="en">
+the ngx_http_index_module behavior for the "POST /" requests is reverted
+to the 0.3.40 version state: the module now does not return the 405 error.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÏÇÒÁÎÉÞÅÎÉÑ ÓËÏÒÏÓÔÉ ÒÁÂÏÞÉÊ ÐÒÏÃÅÓÓ ÍÏÇ ÚÁÃÉËÌÉÔØÓÑ;
+ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.3.37.
+</para>
+<para lang="en">
+the worker process may got caught in an endless loop if the limit rate was used;
+bug appeared in 0.3.37.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+ÍÏÄÕÌØ ngx_http_charset_module ÚÁÐÉÓÙ×ÁÌ × ÌÏÇ ÏÛÉÂËÕ "unknown charset",
+ÄÁÖÅ ÅÓÌÉ ÐÅÒÅËÏÄÉÒÏ×ËÁ ÎÅ ÔÒÅÂÏ×ÁÌÁÓØ;
+ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.3.50.
+</para>
+<para lang="en">
+ngx_http_charset_module logged "unknown charset" alert, even if the recoding
+was not needed;
+bug appeared in 0.3.50.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+ÅÓÌÉ × ÒÅÚÕÌØÔÁÔÅ ÚÁÐÒÏÓÁ PUT ×ÏÚ×ÒÁÝÁÌÓÑ ËÏÄ 409, ÔÏ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ
+ÎÅ ÕÄÁÌÑÌÓÑ.
+</para>
+<para lang="en">
+if a code response of the PUT request was 409, then a temporary file
+was not removed.
+</para>
+</change>
+
+</changes>
+
+
<changes ver="0.3.51" date="30.06.2006">
<change type="bugfix">
r->headers_out.override_charset->data);
if (charset == NGX_HTTP_NO_CHARSET) {
- ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"unknown charset \"%V\" to override",
r->headers_out.override_charset);
ctx->charset = charset;
- if (charset == NGX_HTTP_NO_CHARSET) {
- ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
- "unknown charset \"%V\" of main request", mc);
-
- return ngx_http_next_header_filter(r);
- }
- }
-
- charset = ctx->charset;
-
- if (charset == NGX_HTTP_NO_CHARSET) {
- return ngx_http_next_header_filter(r);
+ } else {
+ charset = ctx->charset;
}
}
if (r->headers_out.charset.len == 0) {
lcf = ngx_http_get_module_loc_conf(r, ngx_http_charset_filter_module);
- return ngx_http_charset_set_charset(r, mcf->charsets.elts, charset,
- lcf->source_charset);
+ if (charset != NGX_HTTP_NO_CHARSET) {
+ return ngx_http_charset_set_charset(r, mcf->charsets.elts, charset,
+ lcf->source_charset);
+ }
+
+ if (lcf->source_charset == NGX_CONF_UNSET) {
+ return ngx_http_next_header_filter(r);
+ }
+
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "no \"charset_map\" between the charsets "
+ "\"%V\" and \"%V\"",
+ &charsets[lcf->source_charset].name,
+ &r->main->headers_out.charset);
+
+ return ngx_http_next_header_filter(r);
}
source_charset = ngx_http_charset_get_charset(charsets, n,
r->headers_out.charset.data);
- if (source_charset == NGX_HTTP_NO_CHARSET) {
- ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
- "unknown source charset \"%V\"", &r->headers_out.charset);
+ if (charset == NGX_HTTP_NO_CHARSET
+ || source_charset == NGX_HTTP_NO_CHARSET)
+ {
+ if (charset != source_charset
+ || ngx_strcasecmp(r->main->headers_out.charset.data,
+ r->headers_out.charset.data)
+ != 0)
+ {
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "no \"charset_map\" between the charsets "
+ "\"%V\" and \"%V\"",
+ &r->headers_out.charset,
+ &r->main->headers_out.charset);
+ }
return ngx_http_next_header_filter(r);
}
&& (charsets[source_charset].tables == NULL
|| charsets[source_charset].tables[charset] == NULL))
{
- ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"no \"charset_map\" between the charsets "
"\"%V\" and \"%V\"",
&charsets[source_charset].name, &charsets[charset].name);
}
if (ngx_is_dir(&fi)) {
+ if (ngx_delete_file(temp->data) == NGX_FILE_ERROR) {
+ ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno,
+ ngx_delete_file_n " \"%s\" failed",
+ temp->data);
+ }
+
ngx_http_finalize_request(r, NGX_HTTP_CONFLICT);
return;
}
#endif
+ if (ngx_delete_file(temp->data) == NGX_FILE_ERROR) {
+ ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno,
+ ngx_delete_file_n " \"%s\" failed",
+ temp->data);
+ }
+
ngx_http_finalize_request(r, ngx_http_dav_error(r, err, NGX_HTTP_CONFLICT,
ngx_rename_file_n,
path.data));