nginx-0.3.38-RELEASE import

    *) Feature: the ngx_http_dav_module.

    *) Change: the ngx_http_perl_module optimizations.
       Thanks to Sergey Skvortsov.

    *) Feature: the ngx_http_perl_module supports the $r->request_body_file
       method.

    *) Feature: the "client_body_in_file_only" directive.

    *) Workaround: now on disk overflow nginx tries to write access logs
       once a second only.
       Thanks to Anton Yuzhaninov and Maxim Dounin.

    *) Bugfix: now the "limit_rate" directive more precisely limits rate if
       rate is more than 100 Kbyte/s.
       Thanks to ForJest.

    *) Bugfix: now the IMAP/POP3 proxy escapes the "\r" and "\n" symbols in
       login and password to pass authorization server.
       Thanks to Maxim Dounin.
diff --git a/src/core/nginx.c b/src/core/nginx.c
index 64f8012..12a2b8a 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -426,7 +426,7 @@
 
     ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
 
-    if (ngx_rename_file((char *) ccf->pid.data, (char *) ccf->oldpid.data)
+    if (ngx_rename_file(ccf->pid.data, ccf->oldpid.data)
         != NGX_OK)
     {
         ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
@@ -442,7 +442,7 @@
     pid = ngx_execute(cycle, &ctx);
 
     if (pid == NGX_INVALID_PID) {
-        if (ngx_rename_file((char *) ccf->oldpid.data, (char *) ccf->pid.data)
+        if (ngx_rename_file(ccf->oldpid.data, ccf->pid.data)
             != NGX_OK)
         {
             ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 06e46c0..f47c36a 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,7 +8,7 @@
 #define _NGINX_H_INCLUDED_
 
 
-#define NGINX_VER          "nginx/0.3.37"
+#define NGINX_VER          "nginx/0.3.38"
 
 #define NGINX_VAR          "NGINX"
 #define NGX_OLDPID_EXT     ".oldbin"
diff --git a/src/core/ngx_file.c b/src/core/ngx_file.c
index e3e7190..0a2c371 100644
--- a/src/core/ngx_file.c
+++ b/src/core/ngx_file.c
@@ -19,7 +19,7 @@
 
     if (tf->file.fd == NGX_INVALID_FILE) {
         rc = ngx_create_temp_file(&tf->file, tf->path, tf->pool,
-                                  tf->persistent);
+                                  tf->persistent, tf->mode);
 
         if (rc == NGX_ERROR || rc == NGX_AGAIN) {
             return rc;
@@ -36,7 +36,7 @@
 
 ngx_int_t
 ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool,
-    ngx_uint_t persistent)
+    ngx_uint_t persistent, ngx_uint_t mode)
 {
     ngx_err_t                 err;
     ngx_atomic_uint_t         n;
@@ -71,11 +71,7 @@
             return NGX_ERROR;
         }
 
-#if 1
-        file->fd = ngx_open_tempfile(file->name.data, persistent);
-#else
-        file->fd = ngx_open_tempfile(file->name.data, 1);
-#endif
+        file->fd = ngx_open_tempfile(file->name.data, persistent, mode);
 
         ngx_log_debug1(NGX_LOG_DEBUG_CORE, file->log, 0,
                        "temp fd:%d", file->fd);
diff --git a/src/core/ngx_file.h b/src/core/ngx_file.h
index 52c1ae2..488c10a 100644
--- a/src/core/ngx_file.h
+++ b/src/core/ngx_file.h
@@ -49,13 +49,15 @@
     ngx_pool_t         *pool;
     char               *warn;
 
+    ngx_uint_t          mode;
+
     unsigned            persistent:1;
 } ngx_temp_file_t;
 
 
 ssize_t ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain);
 ngx_int_t ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path,
-    ngx_pool_t *pool, ngx_uint_t persistent);
+    ngx_pool_t *pool, ngx_uint_t persistent,ngx_uint_t mode);
 void 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);
 ngx_int_t ngx_add_path(ngx_conf_t *cf, ngx_path_t **slot);