Show
Ignore:
Timestamp:
08/19/08 14:13:04 (5 months ago)
Author:
alo
Message:

--

Files:

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  
    22 
    33        * 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. 
    413 
    514        * cherokee/handler_dirlist.c: Fixes a problem with redirections of 
  • cherokee/branches/0.8/cherokee/connection-protected.h

    r1814 r1873  
    241241ret_t cherokee_connection_build_local_directory_userdir (cherokee_connection_t *conn, cherokee_virtual_server_t *vsrv, cherokee_config_entry_t *entry); 
    242242ret_t cherokee_connection_clean_error_headers    (cherokee_connection_t *conn); 
     243ret_t cherokee_connection_set_redirect           (cherokee_connection_t *conn, cherokee_buffer_t *address); 
    243244 
    244245ret_t cherokee_connection_clean_for_respin       (cherokee_connection_t *conn); 
  • cherokee/branches/0.8/cherokee/connection.c

    r1814 r1873  
    20612061} 
    20622062#endif 
     2063 
     2064 
     2065ret_t 
     2066cherokee_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  
    453453check_request_finish_with_slash (cherokee_handler_dirlist_t *dhdl) 
    454454{ 
    455         cuint_t                len; 
    456455        cherokee_connection_t *conn = HANDLER_CONN(dhdl); 
    457456 
     
    459458            (!cherokee_buffer_is_ending (&conn->request, '/')))  
    460459        { 
    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); 
    502463                 
    503464                conn->error_code = http_moved_permanently; 
  • cherokee/branches/0.8/cherokee/rule_directory.c

    r1611 r1873  
    6969            (cherokee_buffer_cmp_buf (&conn->request, &rule->directory) == 0)) 
    7070        { 
    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); 
    7474 
    7575                TRACE(ENTRIES, "Had to redirect to: %s\n", conn->redirect.buf);