Changeset 343
- Timestamp:
- 08/22/06 18:43:26 (2 years ago)
- Files:
-
- cherokee/trunk/Makefile.am (modified) (3 diffs)
- cherokee/trunk/cherokee.conf.performance.pre (added)
- cherokee/trunk/cherokee.conf.sample.pre (modified) (2 diffs)
- cherokee/trunk/cherokee/buffer.c (modified) (5 diffs)
- cherokee/trunk/cherokee/config_entry.h (modified) (1 diff)
- cherokee/trunk/cherokee/fdpoll-epoll.c (modified) (1 diff)
- cherokee/trunk/cherokee/fdpoll-poll.c (modified) (1 diff)
- cherokee/trunk/cherokee/fdpoll-select.c (modified) (1 diff)
- cherokee/trunk/cherokee/handler.h (modified) (1 diff)
- cherokee/trunk/cherokee/header-protected.h (modified) (1 diff)
- cherokee/trunk/cherokee/logger.h (modified) (1 diff)
- cherokee/trunk/cherokee/logger_combined.c (modified) (2 diffs)
- cherokee/trunk/cherokee/logger_combined.h (modified) (2 diffs)
- cherokee/trunk/cherokee/logger_ncsa.c (modified) (8 diffs)
- cherokee/trunk/cherokee/logger_ncsa.h (modified) (1 diff)
- cherokee/trunk/cherokee/logger_w3c.c (modified) (7 diffs)
- cherokee/trunk/cherokee/logger_w3c.h (modified) (1 diff)
- cherokee/trunk/cherokee/module.h (modified) (2 diffs)
- cherokee/trunk/cherokee/pcre/pcre.c (modified) (2 diffs)
- cherokee/trunk/cherokee/validator.h (modified) (1 diff)
- cherokee/trunk/cherokee/validator_htdigest.c (modified) (1 diff)
- cherokee/trunk/cherokee/validator_ldap.c (modified) (1 diff)
- cherokee/trunk/cherokee/virtual_server.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/Makefile.am
r340 r343 31 31 32 32 CONFS_PRE = \ 33 cherokee.conf.sample.pre 33 cherokee.conf.sample.pre \ 34 cherokee.conf.performance.pre 34 35 35 36 CONFS_DONE = \ … … 87 88 $(INSTALL_DATA) $(top_builddir)/cherokee.conf.sample $(DESTDIR)$(cherokeeconfdir)/cherokee.conf; \ 88 89 fi 90 @if test -f $(DESTDIR)$(cherokeeconfdir)/cherokee.conf.perf_sample ; then \ 91 echo "$@ will not overwrite existing $(DESTDIR)$(cherokeeconfdir)/cherokee.conf.perf_sample"; \ 92 else \ 93 $(INSTALL_DATA) $(top_builddir)/cherokee.conf.performance $(DESTDIR)$(cherokeeconfdir)/cherokee.conf.perf_sample; \ 94 fi 89 95 @if test -f $(DESTDIR)$(cherokeeconfdir)/mime.types ; then \ 90 96 echo "$@ will not overwrite existing $(DESTDIR)$(cherokeeconfdir)/mime.types"; \ … … 112 118 $(RM) -f $(DESTDIR)$(cherokeeconfdir)/cherokee.conf; \ 113 119 fi 120 @if test -f $(DESTDIR)$(cherokeeconfdir)/cherokee.conf.perf_sample ; then \ 121 echo "rm -f $(DESTDIR)$(cherokeeconfdir)/cherokee.conf.perf_sample"; \ 122 $(RM) -f $(DESTDIR)$(cherokeeconfdir)/cherokee.conf.perf_sample; \ 123 fi 114 124 @if test -f $(DESTDIR)$(cherokeeconfdir)/mime.types ; then \ 115 125 echo "rm -f $(cherokeeconfdir)/mime.types"; \ cherokee/trunk/cherokee.conf.sample.pre
r340 r343 1 1 ## 2 2 ## cherokee.conf -- Cherokee HTTP server configuration file 3 ## 4 ## Common use 3 5 ## 4 6 ## NOTE: This file is NOT meant to be edited by hand. … … 23 25 vserver!default!document_root = %wwwroot% 24 26 vserver!default!directory_index = index.php,index.html 27 28 vserver!default!logger = combined 29 vserver!default!logger!access = /var/log/cherokee.access 30 vserver!default!logger!error = /var/log/cherokee.error 25 31 26 32 vserver!default!directory!/!handler = common cherokee/trunk/cherokee/buffer.c
r342 r343 331 331 332 332 333 /* This function is based on code from thttpd334 * Copyright: Jef Poskanzer <jef@acme.com>335 *336 * Copies and decodes a string. It's ok for from and to to be the337 * same string.338 */339 340 333 ret_t 341 334 cherokee_buffer_decode (cherokee_buffer_t *buffer) … … 348 341 } 349 342 343 /* Copies and decodes a string. It's ok for from and to to be 344 * the same string. 345 */ 350 346 from = to = buffer->buf; 351 347 352 348 for (; *from != '\0'; ++to, ++from) { 353 349 if (from[0] == '%' && isxdigit(from[1]) && isxdigit(from[2])) { 354 if ( (from[1] == '0') && (from[2] == '0')) {355 /* Replace null bytes (%00) with spaces,356 * to prevent attacks350 if (unlikely (((from[1] == '0') && (from[2] == '0')))) { 351 /* Replace null bytes (%00) with 352 * spaces, to prevent attacks 357 353 */ 358 354 *to = ' '; … … 668 664 669 665 670 /* b64_decode_table has been copy&pasted from the code of thttpd:671 * Copyright <A9> 1995,1998,1999,2000,2001 by Jef Poskanzer <jef@acme.com>672 */673 674 /* Base-64 decoding. This represents binary data as printable ASCII675 * characters. Three 8-bit binary bytes are turned into four 6-bit676 * values, like so:677 *678 * [11111111] [22222222] [33333333]679 * [111111] [112222] [222233] [333333]680 *681 * Then the 6-bit values are represented using the characters "A-Za-z0-9+/".682 */683 684 666 ret_t 685 667 cherokee_buffer_decode_base64 (cherokee_buffer_t *buf) … … 690 672 int d, prev_d = 0; 691 673 int buf_pos = 0; 674 675 /* Base-64 decoding: This represents binary data as printable 676 * ASCII characters. Three 8-bit binary bytes are turned into 677 * four 6-bit values, like so: 678 * 679 * [11111111] [22222222] [33333333] 680 * [111111] [112222] [222233] [333333] 681 * 682 * Then the 6-bit values are represented using the characters 683 * "A-Za-z0-9+/". 684 */ 692 685 693 686 static const char … … 711 704 }; 712 705 713 714 space_idx = 0;715 phase = 0;716 706 for (i=0; i < buf->len; i++) { 717 707 d = b64_decode_table[(int) buf->buf[i]]; cherokee/trunk/cherokee/config_entry.h
r289 r343 52 52 /* Handler 53 53 */ 54 handler_func_new_t handler_new_func;55 cherokee_http_method_t handler_methods;56 cherokee_handler_props_t *handler_properties;54 handler_func_new_t handler_new_func; 55 cherokee_http_method_t handler_methods; 56 cherokee_handler_props_t *handler_properties; 57 57 58 58 /* Validator 59 59 */ 60 validator_func_new_t validator_new_func;61 cherokee_ table_t*validator_properties;60 validator_func_new_t validator_new_func; 61 cherokee_validator_props_t *validator_properties; 62 62 63 cherokee_buffer_t *auth_realm;64 cherokee_http_auth_t authentication;65 cherokee_table_t *users;63 cherokee_buffer_t *auth_realm; 64 cherokee_http_auth_t authentication; 65 cherokee_table_t *users; 66 66 } cherokee_config_entry_t; 67 67 cherokee/trunk/cherokee/fdpoll-epoll.c
r122 r343 58 58 } cherokee_fdpoll_epoll_t; 59 59 60 61 /*62 ** Copyright (c) 1999,2000 by Jef Poskanzer <jef@acme.com>63 ** All rights reserved.64 **65 ** Redistribution and use in source and binary forms, with or without66 ** modification, are permitted provided that the following conditions67 ** are met:68 ** 1. Redistributions of source code must retain the above copyright69 ** notice, this list of conditions and the following disclaimer.70 ** 2. Redistributions in binary form must reproduce the above copyright71 ** notice, this list of conditions and the following disclaimer in the72 ** documentation and/or other materials provided with the distribution.73 */74 60 75 61 static ret_t cherokee/trunk/cherokee/fdpoll-poll.c
r122 r343 50 50 } cherokee_fdpoll_poll_t; 51 51 52 53 /*54 ** Copyright (c) 1999,2000 by Jef Poskanzer <jef@acme.com>55 ** All rights reserved.56 **57 ** Redistribution and use in source and binary forms, with or without58 ** modification, are permitted provided that the following conditions59 ** are met:60 ** 1. Redistributions of source code must retain the above copyright61 ** notice, this list of conditions and the following disclaimer.62 ** 2. Redistributions in binary form must reproduce the above copyright63 ** notice, this list of conditions and the following disclaimer in the64 ** documentation and/or other materials provided with the distribution.65 */66 52 67 53 static ret_t cherokee/trunk/cherokee/fdpoll-select.c
r333 r343 71 71 72 72 73 /*74 ** Copyright (c) 1999,2000 by Jef Poskanzer <jef@acme.com>75 ** All rights reserved.76 **77 ** Redistribution and use in source and binary forms, with or without78 ** modification, are permitted provided that the following conditions79 ** are met:80 ** 1. Redistributions of source code must retain the above copyright81 ** notice, this list of conditions and the following disclaimer.82 ** 2. Redistributions in binary form must reproduce the above copyright83 ** notice, this list of conditions and the following disclaimer in the84 ** documentation and/or other materials provided with the distribution.85 */86 87 73 static ret_t 88 74 _free (cherokee_fdpoll_select_t *fdp) cherokee/trunk/cherokee/handler.h
r283 r343 55 55 } cherokee_handler_support_t; 56 56 57 /* Handler properties 58 */ 59 typedef ret_t (* handler_props_func_free_t) (void *handlerp); 60 61 typedef struct { 62 handler_props_func_free_t free; 63 } cherokee_handler_props_t; 64 57 65 58 66 /* Callback function definitions 59 67 */ 60 typedef ret_t (* handler_func_new_t) (void **handler, void *cnt, cherokee_ table_t *properties);68 typedef ret_t (* handler_func_new_t) (void **handler, void *cnt, cherokee_handler_props_t *properties); 61 69 typedef ret_t (* handler_func_init_t) (void *handler); 62 70 typedef ret_t (* handler_func_free_t) (void *handler); 63 71 typedef ret_t (* handler_func_step_t) (void *handler, cherokee_buffer_t *buffer); 64 72 typedef ret_t (* handler_func_add_headers_t) (void *handler, cherokee_buffer_t *buffer); 65 typedef ret_t (* handler_props_func_free_t) (void *handlerp);66 73 67 74 /* Data types 68 75 */ 69 typedef struct {70 void (*free) (void *itself);71 } cherokee_handler_props_t;72 73 76 typedef struct { 74 77 cherokee_module_t module; cherokee/trunk/cherokee/header-protected.h
r342 r343 76 76 cherokee_buffer_t *input_buffer; 77 77 crc_t input_buffer_crc; 78 uint32_t input_header_start;79 78 uint32_t input_header_len; 80 81 79 }; 82 80 cherokee/trunk/cherokee/logger.h
r122 r343 43 43 /* Callback function definitions 44 44 */ 45 typedef ret_t (* logger_func_new_t) (void **logger, cherokee_ table_t *properties);45 typedef ret_t (* logger_func_new_t) (void **logger, cherokee_config_node_t *config); 46 46 typedef ret_t (* logger_func_init_t) (void *logger); 47 47 typedef ret_t (* logger_func_free_t) (void *logger); cherokee/trunk/cherokee/logger_combined.c
r122 r343 35 35 36 36 ret_t 37 cherokee_logger_combined_new (cherokee_logger_t **logger, cherokee_ table_t *properties)37 cherokee_logger_combined_new (cherokee_logger_t **logger, cherokee_config_node_t *config) 38 38 { 39 39 ret_t ret; … … 54 54 /* Init the base class: NCSA 55 55 */ 56 ret = cherokee_logger_ncsa_init_base (n, properties);56 ret = cherokee_logger_ncsa_init_base (n, config); 57 57 if (unlikely(ret < ret_ok)) return ret; 58 58 cherokee/trunk/cherokee/logger_combined.h
r122 r343 23 23 */ 24 24 25 #ifndef __CHEROKEE_LOGGER_COMBINED_H__26 #define __CHEROKEE_LOGGER_COMBINED_H__25 #ifndef CHEROKEE_LOGGER_COMBINED_H 26 #define CHEROKEE_LOGGER_COMBINED_H 27 27 28 28 #include "logger_ncsa.h" … … 30 30 typedef cherokee_logger_ncsa_t cherokee_logger_combined_t; 31 31 32 ret_t cherokee_logger_combined_new (cherokee_logger_t **logger, cherokee_ table_t *properties);32 ret_t cherokee_logger_combined_new (cherokee_logger_t **logger, cherokee_config_node_t *config); 33 33 34 #endif /* __CHEROKEE_LOGGER_COMBINED_H__*/34 #endif /* CHEROKEE_LOGGER_COMBINED_H */ cherokee/trunk/cherokee/logger_ncsa.c
r220 r343 71 71 72 72 ret_t 73 cherokee_logger_ncsa_new (cherokee_logger_t **logger, cherokee_ table_t *properties)73 cherokee_logger_ncsa_new (cherokee_logger_t **logger, cherokee_config_node_t *config) 74 74 { 75 75 ret_t ret; … … 82 82 MODULE(n)->init = (logger_func_init_t) cherokee_logger_ncsa_init; 83 83 MODULE(n)->free = (logger_func_free_t) cherokee_logger_ncsa_free; 84 84 85 LOGGER(n)->flush = (logger_func_flush_t) cherokee_logger_ncsa_flush; 85 86 LOGGER(n)->reopen = (logger_func_reopen_t) cherokee_logger_ncsa_reopen; … … 88 89 LOGGER(n)->write_string = (logger_func_write_string_t) cherokee_logger_ncsa_write_string; 89 90 90 ret = cherokee_logger_ncsa_init_base (n, properties);91 ret = cherokee_logger_ncsa_init_base (n, config); 91 92 if (unlikely(ret < ret_ok)) return ret; 92 93 … … 99 100 100 101 ret_t 101 cherokee_logger_ncsa_init_base (cherokee_logger_ncsa_t *logger, cherokee_table_t *properties) 102 { 102 cherokee_logger_ncsa_init_base (cherokee_logger_ncsa_t *logger, cherokee_config_node_t *config) 103 { 104 ret_t ret; 105 cherokee_buffer_t *tmp; 106 103 107 /* Init 104 108 */ 109 cherokee_buffer_init (&logger->accesslog); 110 cherokee_buffer_init (&logger->errorlog); 111 105 112 logger->errorlog_fd = NULL; 106 113 logger->accesslog_fd = NULL; 107 logger->accesslog_filename = NULL;108 logger->errorlog_filename = NULL;109 114 logger->combined = false; 110 115 111 if (properties != NULL) { 112 cherokee_typed_table_get_str (properties, "AccessLog", &logger->accesslog_filename); 113 cherokee_typed_table_get_str (properties, "ErrorLog", &logger->errorlog_filename); 116 ret = cherokee_config_node_read (config, "access", &tmp); 117 if (ret == ret_ok) { 118 cherokee_buffer_add_buffer (&logger->accesslog, tmp); 119 } 120 121 ret = cherokee_config_node_read (config, "error", &tmp); 122 if (ret == ret_ok) { 123 cherokee_buffer_add_buffer (&logger->errorlog, tmp); 114 124 } 115 125 … … 121 131 open_output (cherokee_logger_ncsa_t *logger) 122 132 { 123 if ( (logger->accesslog_filename == NULL) ||124 (logger->errorlog_filename == NULL))133 if (cherokee_buffer_is_empty (&logger->accesslog) || 134 cherokee_buffer_is_empty (&logger->errorlog)) 125 135 { 126 136 openlog ("Cherokee", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); … … 128 138 } 129 139 130 logger->accesslog_fd = fopen (logger->accesslog _filename, "a+");140 logger->accesslog_fd = fopen (logger->accesslog.buf, "a+"); 131 141 if (logger->accesslog_fd == NULL) { 132 PRINT_ERROR("cherokee_logger_ncsa: error opening %s for append\n", logger->accesslog _filename);142 PRINT_ERROR("cherokee_logger_ncsa: error opening %s for append\n", logger->accesslog.buf); 133 143 return ret_error; 134 144 } … … 137 147 #endif 138 148 139 logger->errorlog_fd = fopen (logger->errorlog _filename, "a+");149 logger->errorlog_fd = fopen (logger->errorlog.buf, "a+"); 140 150 if (logger->errorlog_fd == NULL) { 141 PRINT_ERROR("cherokee_logger_ncsa: error opening %s for append\n", logger->errorlog _filename);151 PRINT_ERROR("cherokee_logger_ncsa: error opening %s for append\n", logger->errorlog.buf); 142 152 return ret_error; 143 153 } … … 186 196 cherokee_logger_ncsa_free (cherokee_logger_ncsa_t *logger) 187 197 { 198 cherokee_buffer_mrproper (&logger->accesslog); 199 cherokee_buffer_mrproper (&logger->errorlog); 200 188 201 return close_output (logger); 189 202 } cherokee/trunk/cherokee/logger_ncsa.h
r122 r343 40 40 cherokee_boolean_t combined; 41 41 42 ch ar *accesslog_filename;43 ch ar *errorlog_filename;42 cherokee_buffer_t accesslog; 43 cherokee_buffer_t errorlog; 44 44 45 45 FILE *accesslog_fd; 46 46 FILE *errorlog_fd; 47 48 47 } cherokee_logger_ncsa_t; 49 48 50 49 51 ret_t cherokee_logger_ncsa_new (cherokee_logger_t **logger, cherokee_ table_t *properties);52 ret_t cherokee_logger_ncsa_init_base (cherokee_logger_ncsa_t *logger, cherokee_ table_t *properties);50 ret_t cherokee_logger_ncsa_new (cherokee_logger_t **logger, cherokee_config_node_t *config); 51 ret_t cherokee_logger_ncsa_init_base (cherokee_logger_ncsa_t *logger, cherokee_config_node_t *config); 53 52 54 53 /* virtual methods implementation cherokee/trunk/cherokee/logger_w3c.c
r221 r343 76 76 77 77 ret_t 78 cherokee_logger_w3c_new (cherokee_logger_t **logger, cherokee_table_t *properties) 79 { 78 cherokee_logger_w3c_new (cherokee_logger_t **logger, cherokee_config_node_t *config) 79 { 80 ret_t ret; 81 cherokee_buffer_t *tmp; 80 82 CHEROKEE_NEW_STRUCT (n, logger_w3c); 81 83 … … 95 97 /* Init 96 98 */ 97 98 n->header_added = 0; 99 n-> filename = NULL;99 cherokee_buffer_init (&n->filename); 100 101 n->header_added = false; 100 102 n->file = NULL; 101 103 102 if (properties != NULL) { 103 cherokee_typed_table_get_str (properties, "LogFile", &n->filename); 104 } 105 104 ret = cherokee_config_node_read (config, "file", &tmp); 105 if (ret == ret_ok) { 106 cherokee_buffer_add_buffer (&n->filename, tmp); 107 } 108 106 109 return ret_ok; 107 110 } … … 113 116 /* Syslog 114 117 */ 115 if ( logger->filename == NULL) {118 if (cherokee_buffer_is_empty (&logger->filename)) { 116 119 openlog ("Cherokee", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); 117 120 return ret_ok; … … 121 124 /* Direct file writting 122 125 */ 123 logger->file = fopen (logger->filename , "a+");126 logger->file = fopen (logger->filename.buf, "a+"); 124 127 if (logger->file == NULL) { 125 PRINT_ERROR("cherokee_logger_w3c: error opening %s for append\n", logger->filename );128 PRINT_ERROR("cherokee_logger_w3c: error opening %s for append\n", logger->filename.buf); 126 129 return ret_error; 127 130 } … … 163 166 cherokee_logger_w3c_free (cherokee_logger_w3c_t *logger) 164 167 { 168 cherokee_buffer_mrproper (&logger->filename); 165 169 return close_output (logger); 166 170 } … … 291 295 conn_time = &CONN_THREAD(cnt)->bogo_now_tm; 292 296 293 if (( logger->header_added == 0) && (logger->file)) {297 if ((! logger->header_added) && (logger->file)) { 294 298 len = snprintf (tmp, tmp_size-1, 295 299 "#Version 1.0\n" … … 307 311 CHEROKEE_MUTEX_UNLOCK(&buffer_lock); 308 312 309 logger->header_added = 1;313 logger->header_added = true; 310 314 } 311 315 cherokee/trunk/cherokee/logger_w3c.h
r122 r343 43 43 44 44 typedef struct { 45 cherokee_logger_t logger; 46 47 int header_added; 48 49 char *filename; 50 FILE *file; 51 45 cherokee_logger_t logger; 46 47 cherokee_boolean_t header_added; 48 cherokee_buffer_t filename; 49 FILE *file; 52 50 } cherokee_logger_w3c_t; 53 51 54 52 55 ret_t cherokee_logger_w3c_new (cherokee_logger_t **logger, cherokee_ table_t *properties);53 ret_t cherokee_logger_w3c_new (cherokee_logger_t **logger, cherokee_config_node_t *config); 56 54 57 55 /* virtual methods implementation cherokee/trunk/cherokee/module.h
r336 r343 56 56 57 57 58 /* Data types for module_info58 /* Data types for the plug-ins: module_info 59 59 */ 60 60 typedef struct { … … 75 75 76 76 77 /* Data types for module 77 /* Data types for module objects 78 78 */ 79 79 typedef struct { cherokee/trunk/cherokee/pcre/pcre.c
r31 r343 471 471 472 472 473 474 473 #ifdef SUPPORT_UTF8 475 474 /************************************************* … … 5568 5567 5569 5568 const uschar *callpat; /* Many of these variables are used ony */ 5570 const uschar *charptr;/* small blocks of the code. My normal */5569 // const uschar *charptr; /* small blocks of the code. My normal */ 5571 5570 const uschar *data; /* style of coding would have declared */ 5572 const uschar *lastptr;/* them within each of those blocks. */5571 // const uschar *lastptr; /* them within each of those blocks. */ 5573 5572 const uschar *next; /* However, in order to accommodate the */ 5574 5573 const uschar *pp; /* version of this code that uses an */ cherokee/trunk/cherokee/validator.h
r330 r343 37 37 CHEROKEE_BEGIN_DECLS 38 38 39 40 /* Validator properties 41 */ 42 typedef ret_t (* validator_props_func_free_t) (void *validatorp); 43 44 typedef struct { 45 validator_props_func_free_t free; 46 } cherokee_validator_props_t; 47 48 39 49 /* Callback function definitions 40 50 */ 41 typedef ret_t (* validator_func_new_t) (void **validator, cherokee_ table_t *properties);51 typedef ret_t (* validator_func_new_t) (void **validator, cherokee_validator_props_t *props); 42 52 typedef ret_t (* validator_func_check_t) (void *validator, void *conn); 43 53 typedef ret_t (* validator_func_add_headers_t) (void *validator, void *conn, cherokee_buffer_t *buf); 44 typedef ret_t (* validator_props_func_free_t) (void *validatorp); 54 45 55 46 56 /* Data types 47 57 */ 48 typedef struct {49 void (*free) (void *itself);50 } cherokee_validator_props_t;51 52 58 typedef struct { 53 59 cherokee_module_t module; cherokee/trunk/cherokee/validator_htdigest.c
r342 r343 37 37 38 38 ret_t 39 cherokee_validator_htdigest_configure (cherokee_config_node_t *conf, cherokee_server_t *srv, cherokee_ table_t **_props)39 cherokee_validator_htdigest_configure (cherokee_config_node_t *conf, cherokee_server_t *srv, cherokee_validator_props_t **_props) 40 40 { 41 41 ret_t ret; cherokee/trunk/cherokee/validator_ldap.c
r333 r343 37 37 cherokee_validator_ldap_new (cherokee_validator_ldap_t **ldap, cherokee_validator_props_t *props) 38 38 { 39 ret_t ret;40 39 CHEROKEE_NEW_STRUCT(n,validator_ldap); 41 40 cherokee/trunk/cherokee/virtual_server.c
r340 r343 572 572 573 573 static ret_t 574 add_logger (cherokee_config_node_t *config, cherokee_virtual_server_t *vserver) 575 { 576 ret_t ret; 577 logger_func_new_t func_new; 578 cherokee_module_info_t *info = NULL; 579 cherokee_server_t *srv = SRV(vserver->server_ref); 580 581 if (cherokee_buffer_is_empty (&config->val)) { 582 PRINT_ERROR_S ("ERROR: A logger must be specified\n"); 583 return ret_error; 584 } 585 586 ret = cherokee_module_loader_get (&srv->loader, config->val.buf, &info); 587 if (ret < ret_ok) { 588 PRINT_MSG ("ERROR: Couldn't load logger module '%s'\n", config->val.buf); 589 return ret_error; 590 } 591 592 func_new = (logger_func_new_t) info->new_func; 593 if (func_new == NULL) return ret_error; 594 595 ret = func_new ((void **) &vserver->logger, config); 596 if (ret != ret_ok) return ret; 597 598 return ret_ok; 599 } 600 601 602 static ret_t 574 603 configure_user_dir (cherokee_config_node_t *config, cherokee_virtual_server_t *vserver) 575 604 { … … 646 675 if (ret != ret_ok) return ret; 647 676 } 677 } else if (equal_buf_str (&conf->key, "logger")) { 678 ret = add_logger (conf, vserver); 679 if (ret != ret_ok) return ret; 648 680 649 681 } else if (equal_buf_str (&conf->key, "directory_index")) {