Changeset 1871

Show
Ignore:
Timestamp:
08/19/08 13:57:55 (3 months ago)
Author:
alo
Message:

--

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • cherokee/trunk/ChangeLog

    r1867 r1871  
    112008-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. 
    211 
    312        * cherokee/handler_dirlist.c: Fixes a problem with redirections of 
  • cherokee/trunk/cherokee/connection-protected.h

    r1814 r1871  
    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/trunk/cherokee/connection.c

    r1853 r1871  
    20742074} 
    20752075#endif 
     2076 
     2077 
     2078ret_t 
     2079cherokee_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  
    459459            (!cherokee_buffer_is_ending (&conn->request, '/')))  
    460460        { 
    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); 
    501461                cherokee_buffer_add_str (&conn->redirect, "/"); 
     462                cherokee_connection_set_redirect (conn, &conn->redirect); 
     463                cherokee_buffer_drop_ending (&conn->redirect, 1); 
    502464                 
    503465                conn->error_code = http_moved_permanently; 
  • cherokee/trunk/cherokee/rule_directory.c

    r1611 r1871  
    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->redirect, "/"); 
     72                cherokee_connection_set_redirect (conn, &conn->redirect); 
     73                cherokee_buffer_drop_ending (&conn->redirect, 1); 
    7474 
    7575                TRACE(ENTRIES, "Had to redirect to: %s\n", conn->redirect.buf);