Changeset 1871
- Timestamp:
- 08/19/08 13:57:55 (3 months ago)
- Files:
-
- cherokee/trunk/ChangeLog (modified) (1 diff)
- cherokee/trunk/cherokee/connection-protected.h (modified) (1 diff)
- cherokee/trunk/cherokee/connection.c (modified) (1 diff)
- cherokee/trunk/cherokee/handler_dirlist.c (modified) (1 diff)
- cherokee/trunk/cherokee/rule_directory.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/ChangeLog
r1867 r1871 1 1 2008-08-19 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 3 * cherokee/connection.c (cherokee_connection_set_redirect), 4 cherokee/connection-protected.h, cherokee/rule_directory.c, 5 cherokee/handler_dirlist.c, cherokee/connection.c: Fixes another 6 problem with redirections. It was failing to redirect requests 7 targeting a directory rule entry without a empty request (not even 8 the root slash). There is a new function now to perform this sort 9 of redirections, so it should be much safer to use it from 10 handler_dirilst and rule_directory. 2 11 3 12 * cherokee/handler_dirlist.c: Fixes a problem with redirections of cherokee/trunk/cherokee/connection-protected.h
r1814 r1871 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/trunk/cherokee/connection.c
r1853 r1871 2074 2074 } 2075 2075 #endif 2076 2077 2078 ret_t 2079 cherokee_connection_set_redirect (cherokee_connection_t *conn, cherokee_buffer_t *address) 2080 { 2081 cuint_t len; 2082 2083 /* Build the redirection address 2084 */ 2085 cherokee_buffer_clean (&conn->redirect); 2086 2087 len = conn->web_directory.len + 2088 address->len + 2089 conn->userdir.len + 2090 conn->host.len + 2091 sizeof(":65535") + 2092 sizeof("https://") + 4; 2093 2094 cherokee_buffer_ensure_size (&conn->redirect, len); 2095 2096 /* In case the connection has a custom Document Root directory, 2097 * it must add the web equivalent directory to the path (web_directory). 2098 */ 2099 if (cherokee_connection_use_webdir (conn)) { 2100 cherokee_buffer_add_buffer (&conn->redirect, &conn->web_directory); 2101 } 2102 2103 if (! cherokee_buffer_is_empty (&conn->host)) { 2104 if (conn->socket.is_tls == TLS) 2105 cherokee_buffer_add_str (&conn->redirect, "https://"); 2106 else 2107 cherokee_buffer_add_str (&conn->redirect, "http://"); 2108 2109 cherokee_buffer_add_buffer (&conn->redirect, &conn->host); 2110 2111 if (CONN_SRV(conn)->port != 80) { 2112 cherokee_buffer_add_str (&conn->redirect, ":"); 2113 cherokee_buffer_add_long10 (&conn->redirect, CONN_SRV(conn)->port); 2114 } 2115 } 2116 2117 if (! cherokee_buffer_is_empty (&conn->userdir)) { 2118 cherokee_buffer_add_str (&conn->redirect, "/~"); 2119 cherokee_buffer_add_buffer (&conn->redirect, &conn->userdir); 2120 } 2121 2122 cherokee_buffer_add_buffer (&conn->redirect, address); 2123 return ret_ok; 2124 } cherokee/trunk/cherokee/handler_dirlist.c
r1867 r1871 459 459 (!cherokee_buffer_is_ending (&conn->request, '/'))) 460 460 { 461 /* Build the redirection address462 */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 else485 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 461 cherokee_buffer_add_str (&conn->redirect, "/"); 462 cherokee_connection_set_redirect (conn, &conn->redirect); 463 cherokee_buffer_drop_ending (&conn->redirect, 1); 502 464 503 465 conn->error_code = http_moved_permanently; cherokee/trunk/cherokee/rule_directory.c
r1611 r1871 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->redirect, "/"); 72 cherokee_connection_set_redirect (conn, &conn->redirect); 73 cherokee_buffer_drop_ending (&conn->redirect, 1); 74 74 75 75 TRACE(ENTRIES, "Had to redirect to: %s\n", conn->redirect.buf);