diff src/http/ngx_http_core_module.c @ 119:cd54bcbaf3b5

nginx-0.0.1-2003-07-21-01:15:59 import
author Igor Sysoev <igor@sysoev.ru>
date Sun, 20 Jul 2003 21:15:59 +0000
parents 5bf52498665c
children 5526213be452
line wrap: on
line diff
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -11,25 +11,26 @@ int ngx_http_static_handler(ngx_http_req
 
 static int ngx_http_core_index_handler(ngx_http_request_t *r);
 
-static void *ngx_http_core_create_main_conf(ngx_pool_t *pool);
-static char *ngx_http_core_init_main_conf(ngx_pool_t *pool, void *conf);
-static void *ngx_http_core_create_srv_conf(ngx_pool_t *pool);
-static char *ngx_http_core_merge_srv_conf(ngx_pool_t *pool,
+static void *ngx_http_core_create_main_conf(ngx_conf_t *cf);
+static char *ngx_http_core_init_main_conf(ngx_conf_t *cf, void *conf);
+static void *ngx_http_core_create_srv_conf(ngx_conf_t *cf);
+static char *ngx_http_core_merge_srv_conf(ngx_conf_t *cf,
                                           void *parent, void *child);
-static void *ngx_http_core_create_loc_conf(ngx_pool_t *pool);
-static char *ngx_http_core_merge_loc_conf(ngx_pool_t *pool,
+static void *ngx_http_core_create_loc_conf(ngx_conf_t *cf);
+static char *ngx_http_core_merge_loc_conf(ngx_conf_t *cf,
                                           void *parent, void *child);
 
 static int ngx_http_core_init(ngx_cycle_t *cycle);
 static char *ngx_server_block(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy);
 static int ngx_cmp_locations(const void *first, const void *second);
 static char *ngx_location_block(ngx_conf_t *cf, ngx_command_t *cmd,
-                                                                  void *dummy);
+                                void *dummy);
 static char *ngx_types_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
 static char *ngx_set_type(ngx_conf_t *cf, ngx_command_t *dummy, void *conf);
 static char *ngx_set_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
 static char *ngx_set_server_name(ngx_conf_t *cf, ngx_command_t *cmd,
-                                                                   void *conf);
+                                 void *conf);
+static char *ngx_set_error_log(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
 
 
 static ngx_command_t  ngx_http_core_commands[] = {
@@ -165,6 +166,13 @@ static ngx_command_t  ngx_http_core_comm
      offsetof(ngx_http_core_loc_conf_t, lingering_timeout),
      NULL},
 
+    {ngx_string("error_log"),
+     NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+     ngx_set_error_log,
+     NGX_HTTP_LOC_CONF_OFFSET,
+     0,
+     NULL},
+
     ngx_null_command
 };
 
@@ -226,22 +234,25 @@ void ngx_http_handler(ngx_http_request_t
 #if 0
 ngx_log_debug(r->connection->log, "trans: %s" _ clcfp[i]->name.data);
 #endif
-         if (r->uri.len < clcfp[i]->name.len) {
-             continue;
-         }
+        if (r->uri.len < clcfp[i]->name.len) {
+            continue;
+        }
 
-         rc = ngx_strncmp(r->uri.data, clcfp[i]->name.data,
-                          clcfp[i]->name.len);
+        rc = ngx_strncmp(r->uri.data, clcfp[i]->name.data,
+                         clcfp[i]->name.len);
 
 ngx_log_debug(r->connection->log, "rc: %d" _ rc);
 
-         if (rc < 0) {
-             break;
-         }
+        if (rc < 0) {
+            break;
+        }
 
-         if (rc == 0) {
-             r->loc_conf = clcfp[i]->loc_conf;
-         }
+        if (rc == 0) {
+            r->loc_conf = clcfp[i]->loc_conf;
+            clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+            r->connection->log->file = clcf->err_log->file;
+            r->connection->log->log_level = clcf->err_log->log_level;
+        }
     }
 
     clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
@@ -583,13 +594,13 @@ static char *ngx_server_block(ngx_conf_t
 
         if (module->create_srv_conf) {
             ngx_test_null(ctx->srv_conf[ngx_modules[m]->ctx_index],
-                          module->create_srv_conf(cf->pool),
+                          module->create_srv_conf(cf),
                           NGX_CONF_ERROR);
         }
 
         if (module->create_loc_conf) {
             ngx_test_null(ctx->loc_conf[ngx_modules[m]->ctx_index],
-                          module->create_loc_conf(cf->pool),
+                          module->create_loc_conf(cf),
                           NGX_CONF_ERROR);
         }
     }
@@ -664,7 +675,7 @@ static char *ngx_location_block(ngx_conf
 
         if (module->create_loc_conf) {
             ngx_test_null(ctx->loc_conf[ngx_modules[m]->ctx_index],
-                          module->create_loc_conf(cf->pool),
+                          module->create_loc_conf(cf),
                           NGX_CONF_ERROR);
         }
     }
@@ -740,22 +751,23 @@ static char *ngx_set_type(ngx_conf_t *cf
 }
 
 
-static void *ngx_http_core_create_main_conf(ngx_pool_t *pool)
+static void *ngx_http_core_create_main_conf(ngx_conf_t *cf)
 {
     ngx_http_core_main_conf_t *cmcf;
 
     ngx_test_null(cmcf,
-                  ngx_palloc(pool, sizeof(ngx_http_core_main_conf_t)),
+                  ngx_palloc(cf->pool, sizeof(ngx_http_core_main_conf_t)),
                   NGX_CONF_ERROR);
 
-    ngx_init_array(cmcf->servers, pool, 5, sizeof(ngx_http_core_srv_conf_t *),
+    ngx_init_array(cmcf->servers, cf->pool,
+                   5, sizeof(ngx_http_core_srv_conf_t *),
                    NGX_CONF_ERROR);
 
     return cmcf;
 }
 
 
-static char *ngx_http_core_init_main_conf(ngx_pool_t *pool, void *conf)
+static char *ngx_http_core_init_main_conf(ngx_conf_t *cf, void *conf)
 {
     ngx_http_core_main_conf_t *cmcf = conf;
 
@@ -765,19 +777,20 @@ static char *ngx_http_core_init_main_con
 }
 
 
-static void *ngx_http_core_create_srv_conf(ngx_pool_t *pool)
+static void *ngx_http_core_create_srv_conf(ngx_conf_t *cf)
 {
     ngx_http_core_srv_conf_t  *cscf;
 
     ngx_test_null(cscf,
-                  ngx_pcalloc(pool, sizeof(ngx_http_core_srv_conf_t)),
+                  ngx_pcalloc(cf->pool, sizeof(ngx_http_core_srv_conf_t)),
                   NGX_CONF_ERROR);
 
-    ngx_init_array(cscf->locations, pool, 5, sizeof(void *), NGX_CONF_ERROR);
-    ngx_init_array(cscf->listen, pool, 5, sizeof(ngx_http_listen_t),
+    ngx_init_array(cscf->locations, cf->pool,
+                   5, sizeof(void *), NGX_CONF_ERROR);
+    ngx_init_array(cscf->listen, cf->pool, 5, sizeof(ngx_http_listen_t),
                    NGX_CONF_ERROR);
-    ngx_init_array(cscf->server_names, pool, 5, sizeof(ngx_http_server_name_t),
-                   NGX_CONF_ERROR);
+    ngx_init_array(cscf->server_names, cf->pool,
+                   5, sizeof(ngx_http_server_name_t), NGX_CONF_ERROR);
 
     cscf->connection_pool_size = NGX_CONF_UNSET;
     cscf->post_accept_timeout = NGX_CONF_UNSET;
@@ -790,14 +803,12 @@ static void *ngx_http_core_create_srv_co
 }
 
 
-static char *ngx_http_core_merge_srv_conf(ngx_pool_t *pool,
+static char *ngx_http_core_merge_srv_conf(ngx_conf_t *cf,
                                           void *parent, void *child)
 {
     ngx_http_core_srv_conf_t *prev = parent;
     ngx_http_core_srv_conf_t *conf = child;
 
-    int                       len;
-    ngx_err_t                 err;
     ngx_http_listen_t        *l;
     ngx_http_server_name_t   *n;
 
@@ -817,24 +828,13 @@ static char *ngx_http_core_merge_srv_con
 
     if (conf->server_names.nelts == 0) {
         ngx_test_null(n, ngx_push_array(&conf->server_names), NGX_CONF_ERROR);
-        ngx_test_null(n->name.data, ngx_palloc(pool, NGX_MAXHOSTNAMELEN),
+        ngx_test_null(n->name.data, ngx_palloc(cf->pool, NGX_MAXHOSTNAMELEN),
                       NGX_CONF_ERROR);
 
         if (gethostname(n->name.data, NGX_MAXHOSTNAMELEN) == -1) {
-#if 0
             ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
                                "gethostname() failed");
             return NGX_CONF_ERROR;
-#endif
-
-            err = ngx_errno;
-            len = ngx_snprintf(ngx_conf_errstr, sizeof(ngx_conf_errstr) - 1,
-                               "gethostname() failed (%d: ", err);
-            len += ngx_strerror_r(err, ngx_conf_errstr + len,
-                                  sizeof(ngx_conf_errstr) - len - 1);
-            ngx_conf_errstr[len++] = ')';
-            ngx_conf_errstr[len++] = '\0';
-            return ngx_conf_errstr;
         }
 
         n->name.len = ngx_strlen(n->name.data);
@@ -858,12 +858,12 @@ static char *ngx_http_core_merge_srv_con
 }
 
 
-static void *ngx_http_core_create_loc_conf(ngx_pool_t *pool)
+static void *ngx_http_core_create_loc_conf(ngx_conf_t *cf)
 {
     ngx_http_core_loc_conf_t *lcf;
 
     ngx_test_null(lcf,
-                  ngx_pcalloc(pool, sizeof(ngx_http_core_loc_conf_t)),
+                  ngx_pcalloc(cf->pool, sizeof(ngx_http_core_loc_conf_t)),
                   NGX_CONF_ERROR);
 
     /* set by ngx_pcalloc():
@@ -897,7 +897,7 @@ static ngx_http_type_t default_types[] =
 };
 
 
-static char *ngx_http_core_merge_loc_conf(ngx_pool_t *pool,
+static char *ngx_http_core_merge_loc_conf(ngx_conf_t *cf,
                                           void *parent, void *child)
 {
     ngx_http_core_loc_conf_t *prev = parent;
@@ -914,13 +914,13 @@ static char *ngx_http_core_merge_loc_con
 
         } else {
             ngx_test_null(conf->types,
-                          ngx_palloc(pool, NGX_HTTP_TYPES_HASH_PRIME
+                          ngx_palloc(cf->pool, NGX_HTTP_TYPES_HASH_PRIME
                                                         * sizeof(ngx_array_t)),
                           NGX_CONF_ERROR);
 
             for (i = 0; i < NGX_HTTP_TYPES_HASH_PRIME; i++) {
-                ngx_init_array(conf->types[i], pool, 5, sizeof(ngx_http_type_t),
-                               NGX_CONF_ERROR);
+                ngx_init_array(conf->types[i], cf->pool,
+                               5, sizeof(ngx_http_type_t), NGX_CONF_ERROR);
             }
 
             for (i = 0; default_types[i].exten.len; i++) {
@@ -936,6 +936,14 @@ static char *ngx_http_core_merge_loc_con
         }
     }
 
+    if (conf->err_log == NULL) {
+        if (prev->err_log) {
+            conf->err_log = prev->err_log;
+        } else {
+            conf->err_log = cf->cycle->log;
+        }
+    }
+
     ngx_conf_merge_str_value(conf->default_type,
                              prev->default_type, "text/plain");