Changeset 1873 for cherokee/branches
- Timestamp:
- 08/19/08 14:13:04 (5 months ago)
- Files:
-
- cherokee/branches/0.8 (modified) (1 prop)
- cherokee/branches/0.8/ChangeLog (modified) (1 diff)
- cherokee/branches/0.8/cherokee/connection-protected.h (modified) (1 diff)
- cherokee/branches/0.8/cherokee/connection.c (modified) (1 diff)
- cherokee/branches/0.8/cherokee/handler_dirlist.c (modified) (2 diffs)
- cherokee/branches/0.8/cherokee/rule_directory.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/branches/0.8
- Property svnmerge-integrated changed from /cherokee/trunk:1-1826,1842,1854,1857,1859,1864,1867-1868 to /cherokee/trunk:1-1826,1842,1854,1857,1859,1864,1867-1868,1871-1872
cherokee/branches/0.8/ChangeLog
r1869 r1873 2 2 3 3 * 0.8.1 released 4 5 * cherokee/connection.c (cherokee_connection_set_redirect), 6 cherokee/connection-protected.h, cherokee/rule_directory.c, 7 cherokee/handler_dirlist.c, cherokee/connection.c: Fixes another 8 problem with redirections. It was failing to redirect requests 9 targeting a directory rule entry without a empty request (not even 10 the root slash). There is a new function now to perform this sort 11 of redirections, so it should be much safer to use it from 12 handler_dirilst and rule_directory. 4 13 5 14 * cherokee/handler_dirlist.c: Fixes a problem with redirections of cherokee/branches/0.8/cherokee/connection-protected.h
r1814 r1873 241 241 ret_t cherokee_connection_build_local_directory_userdir (cherokee_connection_t *conn, cherokee_virtual_server_t *vsrv, cherokee_config_entry_t *entry); 242 242 ret_t cherokee_connection_clean_error_headers (cherokee_connection_t *conn); 243 ret_t cherokee_connection_set_redirect (cherokee_connection_t *conn, cherokee_buffer_t *address); 243 244 244 245 ret_t cherokee_connection_clean_for_respin (cherokee_connection_t *conn); cherokee/branches/0.8/cherokee/connection.c
r1814 r1873 2061 2061 } 2062 2062 #endif 2063 2064 2065 ret_t 2066 cherokee_connection_set_redirect (cherokee_connection_t *conn, cherokee_buffer_t *address) 2067 { 2068 cuint_t len; 2069 2070 /* Build the redirection address 2071 */ 2072 cherokee_buffer_clean (&conn->redirect); 2073 2074 len = conn->web_directory.len + 2075 address->len + 2076 conn->userdir.len + 2077 conn->host.len + 2078 sizeof(":65535") + 2079 sizeof("https://") + 4; 2080 2081 cherokee_buffer_ensure_size (&conn->redirect, len); 2082 2083 /* In case the connection has a custom Document Root directory, 2084 * it must add the web equivalent directory to the path (web_directory). 2085 */ 2086 if (cherokee_connection_use_webdir (conn)) { 2087 cherokee_buffer_add_buffer (&conn->redirect, &conn->web_directory); 2088 } 2089 2090 if (! cherokee_buffer_is_empty (&conn->host)) { 2091 if (conn->socket.is_tls == TLS) 2092 cherokee_buffer_add_str (&conn->redirect, "https://"); 2093 else 2094 cherokee_buffer_add_str (&conn->redirect, "http://"); 2095 2096 cherokee_buffer_add_buffer (&conn->redirect, &conn->host); 2097 2098 if (CONN_SRV(conn)->port != 80) { 2099 cherokee_buffer_add_str (&conn->redirect, ":"); 2100 cherokee_buffer_add_long10 (&conn->redirect, CONN_SRV(conn)->port); 2101 } 2102 } 2103 2104 if (! cherokee_buffer_is_empty (&conn->userdir)) { 2105 cherokee_buffer_add_str (&conn->redirect, "/~"); 2106 cherokee_buffer_add_buffer (&conn->redirect, &conn->userdir); 2107 } 2108 2109 cherokee_buffer_add_buffer (&conn->redirect, address); 2110 return ret_ok; 2111 } cherokee/branches/0.8/cherokee/handler_dirlist.c
r1869 r1873 453 453 check_request_finish_with_slash (cherokee_handler_dirlist_t *dhdl) 454 454 { 455 cuint_t len;456 455 cherokee_connection_t *conn = HANDLER_CONN(dhdl); 457 456 … … 459 458 (!cherokee_buffer_is_ending (&conn->request, '/'))) 460 459 { 461 /* Build the redirection address 462 */ 463 cherokee_buffer_clean (&conn->redirect); 464 465 len = conn->web_directory.len + 466 conn->request.len + 467 conn->userdir.len + 468 conn->host.len + 469 sizeof(":65535") + 470 sizeof("https://") + 4; 471 472 cherokee_buffer_ensure_size (&conn->redirect, len); 473 474 /* In case the connection has a custom Document Root directory, 475 * it must add the web equivalent directory to the path (web_directory). 476 */ 477 if (cherokee_connection_use_webdir (conn)) { 478 cherokee_buffer_add_buffer (&conn->redirect, &conn->web_directory); 479 } 480 481 if (! cherokee_buffer_is_empty (&conn->host)) { 482 if (conn->socket.is_tls == TLS) 483 cherokee_buffer_add_str (&conn->redirect, "https://"); 484 else 485 cherokee_buffer_add_str (&conn->redirect, "http://"); 486 487 cherokee_buffer_add_buffer (&conn->redirect, &conn->host); 488 489 if (CONN_SRV(conn)->port != 80) { 490 cherokee_buffer_add_str (&conn->redirect, ":"); 491 cherokee_buffer_add_long10 (&conn->redirect, CONN_SRV(conn)->port); 492 } 493 } 494 495 if (! cherokee_buffer_is_empty (&conn->userdir)) { 496 cherokee_buffer_add_str (&conn->redirect, "/~"); 497 cherokee_buffer_add_buffer (&conn->redirect, &conn->userdir); 498 } 499 500 cherokee_buffer_add_buffer (&conn->redirect, &conn->request); 501 cherokee_buffer_add_str (&conn->redirect, "/"); 460 cherokee_buffer_add_str (&conn->request, "/"); 461 cherokee_connection_set_redirect (conn, &conn->request); 462 cherokee_buffer_drop_ending (&conn->request, 1); 502 463 503 464 conn->error_code = http_moved_permanently; cherokee/branches/0.8/cherokee/rule_directory.c
r1611 r1873 69 69 (cherokee_buffer_cmp_buf (&conn->request, &rule->directory) == 0)) 70 70 { 71 cherokee_buffer_ ensure_size (&conn->redirect, conn->request.len + 4);72 cherokee_ buffer_add_buffer (&conn->redirect, &conn->request);73 cherokee_buffer_ add (&conn->redirect, "/", 1);71 cherokee_buffer_add_str (&conn->request, "/"); 72 cherokee_connection_set_redirect (conn, &conn->request); 73 cherokee_buffer_drop_ending (&conn->request, 1); 74 74 75 75 TRACE(ENTRIES, "Had to redirect to: %s\n", conn->redirect.buf);