Changeset 282
- Timestamp:
- 05/09/06 13:22:53 (2 years ago)
- Files:
-
- cherokee/trunk/ChangeLog (modified) (1 diff)
- cherokee/trunk/Makefile.am (modified) (1 diff)
- cherokee/trunk/cherokee/connection.c (modified) (5 diffs)
- cherokee/trunk/cherokee/connection_info.c (modified) (1 diff)
- cherokee/trunk/cherokee/ext_source.c (modified) (2 diffs)
- cherokee/trunk/cherokee/ext_source.h (modified) (1 diff)
- cherokee/trunk/cherokee/fcgi_manager.c (modified) (4 diffs)
- cherokee/trunk/cherokee/handler.c (modified) (2 diffs)
- cherokee/trunk/cherokee/handler.h (modified) (3 diffs)
- cherokee/trunk/cherokee/handler_admin.c (modified) (2 diffs)
- cherokee/trunk/cherokee/handler_admin.h (modified) (2 diffs)
- cherokee/trunk/cherokee/handler_cgi.c (modified) (12 diffs)
- cherokee/trunk/cherokee/handler_cgi.h (modified) (4 diffs)
- cherokee/trunk/cherokee/handler_cgi_base.c (modified) (11 diffs)
- cherokee/trunk/cherokee/handler_cgi_base.h (modified) (3 diffs)
- cherokee/trunk/cherokee/handler_common.c (modified) (7 diffs)
- cherokee/trunk/cherokee/handler_common.h (modified) (1 diff)
- cherokee/trunk/cherokee/handler_dirlist.c (modified) (19 diffs)
- cherokee/trunk/cherokee/handler_dirlist.h (modified) (3 diffs)
- cherokee/trunk/cherokee/handler_error.c (modified) (2 diffs)
- cherokee/trunk/cherokee/handler_error.h (modified) (1 diff)
- cherokee/trunk/cherokee/handler_fastcgi.c (modified) (15 diffs)
- cherokee/trunk/cherokee/handler_fastcgi.h (modified) (4 diffs)
- cherokee/trunk/cherokee/handler_fcgi.c (modified) (16 diffs)
- cherokee/trunk/cherokee/handler_fcgi.h (modified) (2 diffs)
- cherokee/trunk/cherokee/handler_file.c (modified) (5 diffs)
- cherokee/trunk/cherokee/handler_file.h (modified) (2 diffs)
- cherokee/trunk/cherokee/handler_nn.c (modified) (5 diffs)
- cherokee/trunk/cherokee/handler_nn.h (modified) (1 diff)
- cherokee/trunk/cherokee/handler_phpcgi.c (modified) (6 diffs)
- cherokee/trunk/cherokee/handler_phpcgi.h (modified) (2 diffs)
- cherokee/trunk/cherokee/handler_proxy.c (modified) (2 diffs)
- cherokee/trunk/cherokee/handler_proxy.h (modified) (3 diffs)
- cherokee/trunk/cherokee/handler_redir.c (modified) (15 diffs)
- cherokee/trunk/cherokee/handler_redir.h (modified) (1 diff)
- cherokee/trunk/cherokee/handler_scgi.c (modified) (12 diffs)
- cherokee/trunk/cherokee/handler_scgi.h (modified) (2 diffs)
- cherokee/trunk/cherokee/handler_server_info.c (modified) (7 diffs)
- cherokee/trunk/cherokee/handler_server_info.h (modified) (2 diffs)
- cherokee/trunk/cherokee/header.c (modified) (2 diffs)
- cherokee/trunk/cherokee/header.h (modified) (1 diff)
- cherokee/trunk/cherokee/nn.deps (modified) (1 diff)
- cherokee/trunk/cherokee/reqs_list.c (modified) (4 diffs)
- cherokee/trunk/cherokee/reqs_list_entry.h (modified) (1 diff)
- cherokee/trunk/cherokee/util.c (modified) (1 diff)
- cherokee/trunk/cherokee/util.h (modified) (2 diffs)
- cherokee/trunk/configure.in (modified) (3 diffs)
- cherokee/trunk/qa/048-NN.py (modified) (2 diffs)
- cherokee/trunk/qa/083-RedirParam.py (modified) (1 diff)
- cherokee/trunk/qa/113-HeaderFile.py (modified) (2 diffs)
- cherokee/trunk/qa/114-HeaderFile2.py (modified) (2 diffs)
- cherokee/trunk/qa/135-RedirParams.py (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/ChangeLog
r277 r282 3 3 * themes/Makefile.am, themes/default_theme.css, 4 4 themes/default_header.html, themes/default_footer.html, 5 themes/default_entry.html: Added default theme for dirlist. 5 themes/default_entry.html, configure.in: Added default theme for 6 dirlist. 6 7 7 8 * cherokee/handler_dirlist.c, cherokee/handler_dirlist.c: Almost cherokee/trunk/Makefile.am
r277 r282 1 1 ## Cherokee: Makefile.am -*- makefile -*- 2 2 3 SUBDIRS = m4 contrib www doc icons themes qa cherokee cget windows3 SUBDIRS = m4 contrib www doc icons themes qa cherokee admin cget windows 4 4 bin_SCRIPTS = cherokee-config 5 5 SUFFIXES = .sample.pre .sample cherokee/trunk/cherokee/connection.c
r269 r282 1 1 2 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ 2 3 … … 1365 1366 } 1366 1367 1367 /* Copy the request 1368 /* Copy the request and query string 1368 1369 */ 1369 1370 ret = cherokee_header_copy_request (&cnt->header, &cnt->request); 1370 if (ret < ret_ok) goto error; 1371 if (unlikely (ret < ret_ok)) goto error; 1372 1373 ret = cherokee_header_copy_query_string (&cnt->header, &cnt->query_string); 1374 if (unlikely (ret < ret_ok)) goto error; 1371 1375 1372 1376 /* Look for starting '/' in the request … … 1566 1570 #ifndef CHEROKEE_EMBEDDED 1567 1571 ret = cherokee_reqs_list_get (reqs, &cnt->request, config_entry, cnt); 1568 #else1569 return ret_ok;1570 #endif1571 1572 switch (ret) { 1572 1573 case ret_not_found: … … 1588 1589 1589 1590 return ret; 1591 #else 1592 return ret_ok; 1593 #endif 1590 1594 } 1591 1595 … … 1808 1812 /* Parse the header 1809 1813 */ 1810 ret = cherokee_ header_get_arguments (&cnt->header,&cnt->query_string, cnt->arguments);1814 ret = cherokee_parse_query_string (&cnt->query_string, cnt->arguments); 1811 1815 if (unlikely(ret < ret_ok)) return ret; 1812 1816 cherokee/trunk/cherokee/connection_info.c
r219 r282 175 175 char *point; 176 176 double percent; 177 cherokee_handler_file_t *file = FHANDLER(conn->handler);177 cherokee_handler_file_t *file = HDL_FILE(conn->handler); 178 178 179 179 /* File size cherokee/trunk/cherokee/ext_source.c
r269 r282 354 354 355 355 ret_t 356 cherokee_ext_source_configure (cherokee_config_node_t *conf, cherokee_table_t *props)356 cherokee_ext_source_configure (cherokee_config_node_t *conf, list_t *ext_list) 357 357 { 358 358 ret_t ret; 359 cherokee_config_node_t *subconf;360 359 cherokee_config_node_t *child; 361 360 cherokee_config_node_t *child2; 362 list_t *i, *j; 361 cherokee_config_node_t *child3; 362 list_t *i, *j, *k; 363 363 list_t nlist = LIST_HEAD_INIT(nlist); 364 cherokee_boolean_t first = true;365 364 cherokee_ext_source_t *server_entry = NULL; 366 365 cherokee_ext_source_head_t *head = NULL; … … 371 370 child = CONFIG_NODE(i); 372 371 373 /* Create the external source object372 /* Instance a new entry 374 373 */ 375 if ( first) {374 if (list_empty (ext_list)) { 376 375 ret = cherokee_ext_source_head_new (&head); 377 376 if (ret != ret_ok) return ret; 378 379 list_add ((list_t *)head, &nlist); 380 cherokee_typed_table_add_list (props, "servers", &nlist, (cherokee_typed_free_func_t) cherokee_ext_source_free); 381 382 first = false; 377 383 378 server_entry = EXT_SOURCE(head); 384 379 } else { 385 cherokee_ext_source_new (&server_entry);386 list_add_tail ((list_t *)server_entry, &nlist);380 ret = cherokee_ext_source_new (&server_entry); 381 if (ret != ret_ok) return ret; 387 382 } 388 389 /* Properties383 384 /* Add the entry to the list 390 385 */ 391 ret = cherokee_config_node_get (child, "host", &subconf); 392 if (ret == ret_ok) { 393 split_address_or_path (subconf->val.buf, &server_entry->host, &server_entry->port, 394 &server_entry->unix_socket, &server_entry->original_server); 395 } 396 397 subconf = NULL; 398 ret = cherokee_config_node_get (child, "env", &subconf); 399 if (ret == ret_ok) { 400 cherokee_config_node_foreach (j, subconf) { 401 child2 = CONFIG_NODE(j); 402 403 ret = cherokee_ext_source_add_env (server_entry, child2->key.buf, child2->val.buf); 404 if (ret != ret_ok) return ret; 386 list_add_tail ((list_t *)server_entry, ext_list); 387 388 /* Parse properties 389 */ 390 cherokee_config_node_foreach (j, child) { 391 child2 = CONFIG_NODE(j); 392 393 if (equal_buf_str (&child2->key, "host")) { 394 split_address_or_path (child2->val.buf, &server_entry->host, &server_entry->port, 395 &server_entry->unix_socket, &server_entry->original_server); 396 397 } else if (equal_buf_str (&child2->key, "env")) { 398 cherokee_config_node_foreach (k, child2) { 399 child3 = CONFIG_NODE(k); 400 401 ret = cherokee_ext_source_add_env (server_entry, child3->key.buf, child3->val.buf); 402 if (ret != ret_ok) return ret; 403 } 404 405 } else if (equal_buf_str (&child2->key, "interpreter")) { 406 // fix win32 path 407 cherokee_buffer_add_buffer (&server_entry->interpreter, &child2->val); 408 409 } else { 410 PRINT_MSG ("ERROR: Handler ext_source: Unknown key: '%s'\n", child2->key.buf); 411 return ret_error; 405 412 } 406 413 } 407 408 ret = cherokee_config_node_get (child, "interpreter", &subconf);409 if (ret == ret_ok) {410 // fix win32 path411 cherokee_buffer_add_buffer (&server_entry->interpreter, &subconf->val);412 }413 414 } 414 415 cherokee/trunk/cherokee/ext_source.h
r269 r282 84 84 /* Configure 85 85 */ 86 ret_t cherokee_ext_source_configure (cherokee_config_node_t *conf, cherokee_table_t *props);86 ret_t cherokee_ext_source_configure (cherokee_config_node_t *conf, list_t *ext_list); 87 87 88 88 cherokee/trunk/cherokee/fcgi_manager.c
r237 r282 115 115 continue; 116 116 117 cgi = CGI_BASE(mgr->conn.id2conn[i].conn->handler);118 119 if (mgr->generation != H ANDLER_FASTCGI(cgi)->generation) {117 cgi = HDL_CGI_BASE(mgr->conn.id2conn[i].conn->handler); 118 119 if (mgr->generation != HDL_FASTCGI(cgi)->generation) { 120 120 continue; 121 121 } … … 269 269 } 270 270 271 hdl = H ANDLER_FASTCGI(conn->handler);272 outbuf = & CGI_BASE(hdl)->data;271 hdl = HDL_FASTCGI(conn->handler); 272 outbuf = &HDL_CGI_BASE(hdl)->data; 273 273 data = inbuf->buf + FCGI_HEADER_LEN; 274 274 … … 300 300 (ending->appStatusB0 << 24)); 301 301 302 CGI_BASE(hdl)->got_eof = true;302 HDL_CGI_BASE(hdl)->got_eof = true; 303 303 mgr->conn.id2conn[id].eof = true; 304 304 … … 392 392 cherokee_fcgi_manager_unregister (cherokee_fcgi_manager_t *mgr, cherokee_connection_t *conn) 393 393 { 394 cherokee_handler_fastcgi_t *hdl = H ANDLER_FASTCGI(conn->handler);394 cherokee_handler_fastcgi_t *hdl = HDL_FASTCGI(conn->handler); 395 395 396 396 if (hdl->generation != mgr->generation) { cherokee/trunk/cherokee/handler.c
r132 r282 33 33 34 34 ret_t 35 cherokee_handler_init_base (cherokee_handler_t *hdl, void *conn )35 cherokee_handler_init_base (cherokee_handler_t *hdl, void *conn, cherokee_handler_props_t *props) 36 36 { 37 37 /* Init the base class … … 47 47 */ 48 48 hdl->connection = conn; 49 hdl->props = props; 50 49 51 return ret_ok; 50 52 } cherokee/trunk/cherokee/handler.h
r277 r282 64 64 typedef ret_t (* handler_func_add_headers_t) (void *handler, cherokee_buffer_t *buffer); 65 65 66 typedef struct { 67 void (*free) (void *itself); 68 } cherokee_handler_props_t; 66 69 67 70 typedef struct { 68 cherokee_module_t module; 69 71 cherokee_module_t module; 72 cherokee_handler_props_t *props; 73 70 74 /* Pure virtual methods 71 75 */ … … 75 79 /* Properties 76 80 */ 77 void *connection;78 cherokee_handler_support_t support;81 void *connection; 82 cherokee_handler_support_t support; 79 83 } cherokee_handler_t; 80 81 typedef struct {82 void (*free) (void *itself);83 } cherokee_handler_props_t;84 84 85 85 86 86 #define HANDLER(x) ((cherokee_handler_t *)(x)) 87 #define HANDLER_PROPS(x) ((cherokee_handler_props_t *)(x)) 88 87 89 #define HANDLER_CONN(h) (CONN(HANDLER(h)->connection)) 88 90 #define HANDLER_SRV(h) (CONN_SRV(HANDLER_CONN(h))) … … 95 97 96 98 97 ret_t cherokee_handler_init_base (cherokee_handler_t *hdl, void *conn );99 ret_t cherokee_handler_init_base (cherokee_handler_t *hdl, void *conn, cherokee_handler_props_t *props); 98 100 ret_t cherokee_handler_free_base (cherokee_handler_t *hdl); 99 101 cherokee/trunk/cherokee/handler_admin.c
r132 r282 43 43 44 44 ret_t 45 cherokee_handler_admin_new (cherokee_handler_t **hdl, void *cnt, cherokee_ table_t *properties)45 cherokee_handler_admin_new (cherokee_handler_t **hdl, void *cnt, cherokee_handler_props_t *props) 46 46 { 47 47 CHEROKEE_NEW_STRUCT (n, handler_admin); … … 49 49 /* Init the base class object 50 50 */ 51 cherokee_handler_init_base (HANDLER(n), cnt );51 cherokee_handler_init_base (HANDLER(n), cnt, props); 52 52 53 53 MODULE(n)->init = (handler_func_init_t) cherokee_handler_admin_init; cherokee/trunk/cherokee/handler_admin.h
r191 r282 40 40 } cherokee_handler_admin_t; 41 41 42 #define AHANDLER(x) ((cherokee_handler_admin_t *)(x)) 42 #define PROP_ADMIN(x) ((cherokee_handler_admin_props_t *)(x)) 43 #define HDL_ADMIN(x) ((cherokee_handler_admin_t *)(x)) 44 #define HDL_ADMIN_PROPS(x) (PROP_ADMIN(HANDLER(x)->props)) 43 45 44 46 … … 46 48 */ 47 49 void MODULE_INIT(admi) (cherokee_module_loader_t *loader); 48 ret_t cherokee_handler_admin_new (cherokee_handler_t **hdl, void *cnt, cherokee_ table_t *properties);50 ret_t cherokee_handler_admin_new (cherokee_handler_t **hdl, void *cnt, cherokee_handler_props_t *props); 49 51 50 52 /* virtual methods implementation cherokee/trunk/cherokee/handler_cgi.c
r269 r282 77 77 ret_t ret; 78 78 size_t readed = 0; 79 cherokee_handler_cgi_t *cgi = H ANDLER_CGI(cgi_base);79 cherokee_handler_cgi_t *cgi = HDL_CGI(cgi_base); 80 80 81 81 /* Read the data from the pipe: … … 109 109 110 110 ret_t 111 cherokee_handler_cgi_new (cherokee_handler_t **hdl, void *cnt, cherokee_ table_t *properties)111 cherokee_handler_cgi_new (cherokee_handler_t **hdl, void *cnt, cherokee_handler_props_t *props) 112 112 { 113 113 int i; … … 116 116 /* Init the base class 117 117 */ 118 cherokee_handler_cgi_base_init (CGI_BASE(n), cnt, properties, 119 cherokee_handler_cgi_add_env_pair, read_from_cgi); 118 cherokee_handler_cgi_base_init (HDL_CGI_BASE(n), cnt, props, cherokee_handler_cgi_add_env_pair, read_from_cgi); 120 119 121 120 /* Virtual methods … … 192 191 /* Free the rest of the handler CGI memory 193 192 */ 194 cherokee_handler_cgi_base_free ( CGI_BASE(cgi));193 cherokee_handler_cgi_base_free (HDL_CGI_BASE(cgi)); 195 194 196 195 /* Close the connection with the CGI … … 254 253 255 254 ret_t 256 cherokee_handler_cgi_configure (cherokee_config_node_t *conf, cherokee_server_t *srv, cherokee_table_t **props) 257 { 258 return cherokee_handler_cgi_base_configure (conf, srv, props); 255 cherokee_handler_cgi_configure (cherokee_config_node_t *conf, cherokee_server_t *srv, cherokee_handler_props_t **_props) 256 { 257 cherokee_handler_cgi_props_t *props; 258 259 /* Instance a new property object 260 */ 261 if (*_props == NULL) { 262 CHEROKEE_NEW_STRUCT (n, handler_cgi_props); 263 *_props = HANDLER_PROPS(n); 264 } 265 266 props = PROP_CGI(*_props); 267 268 /* Parse local options 269 */ 270 271 272 273 return cherokee_handler_cgi_base_configure (conf, srv, _props); 259 274 } 260 275 … … 265 280 char *content, int content_len) 266 281 { 267 cherokee_handler_cgi_t *cgi = H ANDLER_CGI(cgi_base);282 cherokee_handler_cgi_t *cgi = HDL_CGI(cgi_base); 268 283 269 284 #ifdef _WIN32 … … 303 318 char *lenght; 304 319 cuint_t lenght_len; 305 cherokee_handler_cgi_base_t *cgi_base = CGI_BASE(cgi);306 307 ret = cherokee_handler_cgi_base_build_envp ( CGI_BASE(cgi), conn);320 cherokee_handler_cgi_base_t *cgi_base = HDL_CGI_BASE(cgi); 321 322 ret = cherokee_handler_cgi_base_build_envp (HDL_CGI_BASE(cgi), conn); 308 323 if (unlikely (ret != ret_ok)) return ret; 309 324 … … 362 377 { 363 378 ret_t ret; 364 cherokee_handler_cgi_base_t *cgi_base = CGI_BASE(cgi);379 cherokee_handler_cgi_base_t *cgi_base = HDL_CGI_BASE(cgi); 365 380 cherokee_connection_t *conn = HANDLER_CONN(cgi); 366 381 … … 441 456 int re; 442 457 cherokee_connection_t *conn = HANDLER_CONN(cgi); 443 cherokee_handler_cgi_base_t *cgi_base = CGI_BASE(cgi);458 cherokee_handler_cgi_base_t *cgi_base = HDL_CGI_BASE(cgi); 444 459 char *absolute_path = cgi_base->executable.buf; 445 460 char *argv[4] = { NULL, NULL, NULL, NULL }; … … 504 519 /* Change the execution user? 505 520 */ 506 if ( cgi_base->change_user) {521 if (HDL_CGI_BASE_PROPS(cgi_base)->change_user) { 507 522 struct stat info; 508 523 … … 628 643 /* Command line 629 644 */ 630 cmd = CGI_BASE(cgi)->executable.buf;645 cmd = HDL_CGI_BASE(cgi)->executable.buf; 631 646 cherokee_buffer_add (&cmd_line, cmd, strlen(cmd)); 632 cherokee_buffer_add_va (&cmd_line, " \"%s\"", CGI_BASE(cgi)->param.buf);647 cherokee_buffer_add_va (&cmd_line, " \"%s\"", HDL_CGI_BASE(cgi)->param.buf); 633 648 634 649 /* Execution directory … … 638 653 } else { 639 654 char *file = strrchr (cmd, '/'); 640 char *end = CGI_BASE(cgi)->executable.buf +CGI_BASE(cgi)->executable.len;655 char *end = HDL_CGI_BASE(cgi)->executable.buf + HDL_CGI_BASE(cgi)->executable.len; 641 656 642 657 cherokee_buffer_add (&exec_dir, cmd, 643 CGI_BASE(cgi)->executable.len - (end - file));658 HDL_CGI_BASE(cgi)->executable.len - (end - file)); 644 659 } 645 660 cherokee/trunk/cherokee/handler_cgi.h
r269 r282 43 43 44 44 45 typedef cherokee_handler_cgi_base_props_t cherokee_handler_cgi_props_t; 46 45 47 typedef struct { 46 48 cherokee_handler_cgi_base_t base; … … 59 61 pid_t pid; /* CGI pid */ 60 62 #endif 61 62 63 64 63 } cherokee_handler_cgi_t; 65 64 66 #define HANDLER_CGI(x) ((cherokee_handler_cgi_t *)(x)) 65 #define HDL_CGI(x) ((cherokee_handler_cgi_t *)(x)) 66 #define PROP_CGI(x) ((cherokee_handler_cgi_props_t *)(x)) 67 #define HDL_CGI_PROPS(x) (PROP_CGI(HANDLER(x)->props)) 67 68 68 69 … … 73 74 /* Methods 74 75 */ 75 ret_t cherokee_handler_cgi_new (cherokee_handler_t **hdl, void *cnt, cherokee_ table_t *properties);76 ret_t cherokee_handler_cgi_new (cherokee_handler_t **hdl, void *cnt, cherokee_handler_props_t *props); 76 77 ret_t cherokee_handler_cgi_free (cherokee_handler_cgi_t *hdl); 77 78 … … 88 89 char *content, int content_len); 89 90 90 ret_t cherokee_handler_cgi_configure (cherokee_config_node_t *conf, cherokee_server_t *srv, cherokee_ table_t **props);91 ret_t cherokee_handler_cgi_configure (cherokee_config_node_t *conf, cherokee_server_t *srv, cherokee_handler_props_t **props); 91 92 92 93 #endif /* CHEROKEE_HANDLER_CGI_H */ cherokee/trunk/cherokee/handler_cgi_base.c
r273 r282 45 45 cherokee_handler_cgi_base_init (cherokee_handler_cgi_base_t *cgi, 46 46 cherokee_connection_t *conn, 47 cherokee_ table_t *properties,47 cherokee_handler_props_t *props, 48 48 cherokee_handler_cgi_base_add_env_pair_t add_env_pair, 49 49 cherokee_handler_cgi_base_read_from_cgi_t read_from_cgi) … … 53 53 /* Init the base class object 54 54 */ 55 cherokee_handler_init_base (HANDLER(cgi), conn );55 cherokee_handler_init_base (HANDLER(cgi), conn, props); 56 56 57 57 /* Supported features … … 68 68 */ 69 69 cgi->init_phase = hcgi_phase_build_headers; 70 cgi->script_alias = NULL;71 cgi->system_env = NULL;72 70 cgi->content_length = 0; 73 71 cgi->got_eof = false; 74 cgi->is_error_handler = false;75 cgi->check_file = true;76 cgi->change_user = 0;77 72 78 73 cherokee_buffer_init (&cgi->executable); … … 90 85 /* Read the properties 91 86 */ 92 if (properties) { 93 cherokee_typed_table_get_str (properties, "script_alias", &cgi->script_alias); 94 cherokee_typed_table_get_list (properties, "env", &cgi->system_env); 95 cherokee_typed_table_get_int (properties, "error_handler", &cgi->is_error_handler); 96 cherokee_typed_table_get_int (properties, "change_user", &cgi->change_user); 97 cherokee_typed_table_get_int (properties, "check_file", &cgi->check_file); 98 } 99 100 if (cgi->is_error_handler) { 87 if (HDL_CGI_BASE_PROPS(cgi)->is_error_handler) { 101 88 HANDLER(cgi)->support |= hsupport_error; 102 89 } … … 140 127 141 128 ret_t 142 cherokee_handler_cgi_base_configure (cherokee_config_node_t *conf, cherokee_server_t *srv, cherokee_table_t **props) 143 { 144 ret_t ret; 145 list_t *i, *j; 146 129 cherokee_handler_cgi_base_configure (cherokee_config_node_t *conf, cherokee_server_t *srv, cherokee_handler_props_t **_props) 130 { 131 ret_t ret; 132 list_t *i, *j; 133 cherokee_handler_cgi_base_props_t *props; 134 135 /* Sanity check: This class is pure virtual, it shouldn't allocate memory here. 136 * Check that the object space has been already instanced by it father. 137 */ 138 if (*_props == NULL) { 139 SHOULDNT_HAPPEN; 140 return ret_ok; 141 } 142 143 /* Init 144 */ 145 props = PROP_CGI_BASE(*_props); 146 147 INIT_LIST_HEAD (&props->system_env); 148 cherokee_buffer_init (&props->script_alias); 149 150 props->is_error_handler = false; 151 props->change_user = false; 152 props->check_file = true; 153 154 /* Parse the configuration tree 155 */ 147 156 cherokee_config_node_foreach (i, conf) { 148 157 cherokee_config_node_t *subconf = CONFIG_NODE(i); 149 158 150 ret = cherokee_typed_table_instance (props);151 if (ret != ret_ok) return ret;152 153 159 if (equal_buf_str (&subconf->key, "script_alias")) { 154 ret = cherokee_ typed_table_add_str (*props, "script_alias", strdup(subconf->val.buf));160 ret = cherokee_buffer_add_buffer (&props->script_alias, &subconf->val); 155 161 if (ret != ret_ok) return ret; 156 162 … … 158 164 cherokee_config_node_foreach (j, subconf) { 159 165 env_item_t *env; 160 list_t *plist = NULL;161 list_t nlist = LIST_HEAD_INIT(nlist);162 166 cherokee_config_node_t *subconf2 = CONFIG_NODE(j); 163 167 … … 165 169 if (env == NULL) return ret_error; 166 170 167 cherokee_typed_table_get_list (*props, "env", &plist); 168 169 if (plist == NULL) { 170 list_add ((list_t *)env, &nlist); 171 cherokee_typed_table_add_list (*props, "env", &nlist, env_item_free); 172 } else { 173 list_add_tail ((list_t *)env, plist); 174 } 171 list_add_tail ((list_t *)env, &props->system_env); 175 172 } 176 173 } else if (equal_buf_str (&subconf->key, "error_handler")) { 177 ret = cherokee_typed_table_add_int (*props, "error_handler", atoi(subconf->val.buf)); 178 if (ret != ret_ok) return ret; 174 props->is_error_handler = atoi(subconf->val.buf); 179 175 180 176 } else if (equal_buf_str (&subconf->key, "change_user")) { 181 ret = cherokee_typed_table_add_int (*props, "change_user", atoi(subconf->val.buf)); 182 if (ret != ret_ok) return ret; 177 props->change_user = atoi(subconf->val.buf); 183 178 184 179 } else if (equal_buf_str (&subconf->key, "check_file")) { 185 ret = cherokee_typed_table_add_int (*props, "check_file", atoi(subconf->val.buf)); 186 if (ret != ret_ok) return ret; 180 props->check_file = atoi(subconf->val.buf); 187 181 } 188 182 } … … 419 413 * these have precedence.. 420 414 */ 421 if (cgi->system_env != NULL) { 422 list_for_each (i, cgi->system_env) { 423 env_item_t *env = (env_item_t *)i; 424 cgi->add_env_pair (cgi, 425 env->env.buf, env->env.len, 426 env->val.buf, env->val.len); 427 } 428 } 415 list_for_each (i, &HDL_CGI_BASE_PROPS(cgi)->system_env) { 416 env_item_t *env = (env_item_t *)i; 417 cgi->add_env_pair (cgi, 418 env->env.buf, env->env.len, 419 env->val.buf, env->val.len); 420 } 429 421 430 422 /* Add the basic enviroment variables … … 436 428 * It is the request without the pathinfo if it exists 437 429 */ 438 if ( ! cgi->script_alias) {430 if (cherokee_buffer_is_empty (&HDL_CGI_BASE_PROPS(cgi)->script_alias)) { 439 431 if (cgi->param.len > 0) { 440 432 /* phpcgi request … … 458 450 cherokee_buffer_clean (&tmp); 459 451 460 if ( cgi->check_file &&452 if (HDL_CGI_BASE_PROPS(cgi)->check_file && 461 453 (conn->web_directory.len > 1)) 462 454 { … … 482 474 cherokee_handler_cgi_base_extract_path (cherokee_handler_cgi_base_t *cgi, cherokee_boolean_t check_filename) 483 475 { 484 struct stat st; 485 ret_t ret; 486 cherokee_connection_t *conn = HANDLER_CONN(cgi); 487 int req_len; 488 int local_len; 489 int pathinfo_len = 0; 476 ret_t ret; 477 cint_t req_len; 478 cint_t local_len; 479 struct stat st; 480 cint_t pathinfo_len = 0; 481 cherokee_connection_t *conn = HANDLER_CONN(cgi); 482 cherokee_handler_cgi_base_props_t *props = HDL_CGI_BASE_PROPS(cgi); 490 483 491 484 /* ScriptAlias: If there is a ScriptAlias directive, it 492 485 * doesn't need to find the executable file.. 493 486 */ 494 if ( cgi->script_alias != NULL) {495 TRACE (ENTRIES, "Script alias '%s'\n", cgi->script_alias);496 497 if (stat (cgi->script_alias, &st) == -1) {487 if (! cherokee_buffer_is_empty (&props->script_alias)) { 488 TRACE (ENTRIES, "Script alias '%s'\n", props->script_alias.buf); 489 490 if (stat (props->script_alias.buf, &st) == -1) { 498 491 conn->error_code = http_not_found; 499 492 return ret_error; 500 493 } 501 494 502 cherokee_buffer_add (&cgi->executable, cgi->script_alias, strlen(cgi->script_alias));495 cherokee_buffer_add_buffer (&cgi->executable, &props->script_alias); 503 496 504 497 /* Check the path_info even if it uses a scriptalias. The PATH_INFO cherokee/trunk/cherokee/handler_cgi_base.h
r269 r282 49 49 } cherokee_handler_cgi_base_phase_t; 50 50 51 typedef struct { 52 list_t system_env; 53 cuint_t change_user; 54 cherokee_buffer_t script_alias; 55 cherokee_boolean_t check_file; 56 cherokee_boolean_t is_error_handler; 57 } cherokee_handler_cgi_base_props_t; 51 58 52 59 struct cherokee_handler_cgi_base { 53 cherokee_handler_t handler;54 cherokee_handler_cgi_base_phase_t init_phase;60 cherokee_handler_t handler; 61 cherokee_handler_cgi_base_phase_t init_phase; 55 62 56 char *script_alias; 57 char *extra_param; 58 list_t *system_env; 59 size_t content_length; 60 cherokee_boolean_t is_error_handler; 61 cherokee_boolean_t check_file; 63 cuint_t got_eof; 64 char *extra_param; 65 size_t content_length; 62 66 63 cuint_t change_user; 64 cuint_t got_eof; 65 66 cherokee_buffer_t executable; 67 cherokee_buffer_t param; 68 cherokee_buffer_t param_extra; 69 70 cherokee_buffer_t data; 67 cherokee_buffer_t param; 68 cherokee_buffer_t param_extra; 69 cherokee_buffer_t executable; 70 cherokee_buffer_t data; 71 71 72 72 /* Virtual methods … … 76 76 } ; 77 77