static handler_t mod_simple_vhost_docroot(server *srv, connection *con, void *p_data) { plugin_data *p = p_data; /* * cache the last successfull translation from hostname (authority) to docroot * - this saves us a stat() call * */ mod_simple_vhost_patch_connection(srv, con, p); /* build_doc_root() requires a server_root; skip module if simple-vhost.server-root is not set * or set to an empty string (especially don't cache any results!) */ if (buffer_string_is_empty(p->conf.server_root)) return HANDLER_GO_ON; if (!buffer_string_is_empty(p->conf.docroot_cache_key) && !buffer_string_is_empty(con->uri.authority) && buffer_is_equal(p->conf.docroot_cache_key, con->uri.authority)) { /* cache hit */ buffer_copy_buffer(con->server_name, p->conf.docroot_cache_servername); buffer_copy_buffer(con->physical.doc_root, p->conf.docroot_cache_value); } else { /* build document-root */ if (buffer_string_is_empty(con->uri.authority) || build_doc_root(srv, con, p, p->doc_root, con->uri.authority)) { /* not found, fallback the default-host */ if (0 == build_doc_root(srv, con, p, p->doc_root, p->conf.default_host)) { /* default host worked */ buffer_copy_buffer(con->server_name, p->conf.default_host); buffer_copy_buffer(con->physical.doc_root, p->doc_root); /* do not cache default host */ } return HANDLER_GO_ON; } /* found host */ buffer_copy_buffer(con->server_name, con->uri.authority); buffer_copy_buffer(con->physical.doc_root, p->doc_root); /* copy to cache */ buffer_copy_buffer(p->conf.docroot_cache_key, con->uri.authority); buffer_copy_buffer(p->conf.docroot_cache_value, p->doc_root); buffer_copy_buffer(p->conf.docroot_cache_servername, con->server_name); } return HANDLER_GO_ON; }
static handler_t mod_simple_vhost_docroot(server *srv, connection *con, void *p_data) { plugin_data *p = p_data; /* * cache the last successfull translation from hostname (authority) to docroot * - this saves us a stat() call * */ mod_simple_vhost_patch_connection(srv, con, p); if (p->conf.docroot_cache_key->used && con->uri.authority->used && buffer_is_equal(p->conf.docroot_cache_key, con->uri.authority)) { /* cache hit */ buffer_copy_string_buffer(con->physical.doc_root, p->conf.docroot_cache_value); buffer_copy_string_buffer(con->server_name, p->conf.docroot_cache_servername); } else { /* build document-root */ if ((con->uri.authority->used == 0) || build_doc_root(srv, con, p, p->doc_root, con->uri.authority)) { /* not found, fallback the default-host */ if (build_doc_root(srv, con, p, p->doc_root, p->conf.default_host)) { return HANDLER_GO_ON; } else { buffer_copy_string_buffer(con->server_name, p->conf.default_host); } } else { buffer_copy_string_buffer(con->server_name, con->uri.authority); } /* copy to cache */ buffer_copy_string_buffer(p->conf.docroot_cache_key, con->uri.authority); buffer_copy_string_buffer(p->conf.docroot_cache_value, p->doc_root); buffer_copy_string_buffer(p->conf.docroot_cache_servername, con->server_name); buffer_copy_string_buffer(con->physical.doc_root, p->doc_root); } return HANDLER_GO_ON; }