version 1.1, 2013/10/14 10:32:47
|
version 1.1.1.3, 2016/11/02 10:35:00
|
Line 1
|
Line 1
|
|
#include "first.h" |
|
|
#include "base.h" |
#include "base.h" |
#include "log.h" |
#include "log.h" |
#include "buffer.h" |
#include "buffer.h" |
Line 45 FREE_FUNC(mod_alias_free) {
|
Line 47 FREE_FUNC(mod_alias_free) {
|
for (i = 0; i < srv->config_context->used; i++) { |
for (i = 0; i < srv->config_context->used; i++) { |
plugin_config *s = p->config_storage[i]; |
plugin_config *s = p->config_storage[i]; |
|
|
if(!s) continue; | if (NULL == s) continue; |
|
|
array_free(s->alias); |
array_free(s->alias); |
|
|
Line 72 SETDEFAULTS_FUNC(mod_alias_set_defaults) {
|
Line 74 SETDEFAULTS_FUNC(mod_alias_set_defaults) {
|
|
|
if (!p) return HANDLER_ERROR; |
if (!p) return HANDLER_ERROR; |
|
|
p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *)); | p->config_storage = calloc(1, srv->config_context->used * sizeof(plugin_config *)); |
|
|
for (i = 0; i < srv->config_context->used; i++) { |
for (i = 0; i < srv->config_context->used; i++) { |
|
data_config const* config = (data_config const*)srv->config_context->data[i]; |
plugin_config *s; |
plugin_config *s; |
|
|
s = calloc(1, sizeof(plugin_config)); |
s = calloc(1, sizeof(plugin_config)); |
Line 83 SETDEFAULTS_FUNC(mod_alias_set_defaults) {
|
Line 86 SETDEFAULTS_FUNC(mod_alias_set_defaults) {
|
|
|
p->config_storage[i] = s; |
p->config_storage[i] = s; |
|
|
if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) { | if (0 != config_insert_values_global(srv, config->value, cv, i == 0 ? T_CONFIG_SCOPE_SERVER : T_CONFIG_SCOPE_CONNECTION)) { |
return HANDLER_ERROR; |
return HANDLER_ERROR; |
} |
} |
if (s->alias->used >= 2) { |
if (s->alias->used >= 2) { |
Line 95 SETDEFAULTS_FUNC(mod_alias_set_defaults) {
|
Line 98 SETDEFAULTS_FUNC(mod_alias_set_defaults) {
|
for (k = j + 1; k < a->used; k ++) { |
for (k = j + 1; k < a->used; k ++) { |
const buffer *key = a->data[a->sorted[k]]->key; |
const buffer *key = a->data[a->sorted[k]]->key; |
|
|
if (key->used < prefix->used) { | if (buffer_string_length(key) < buffer_string_length(prefix)) { |
break; |
break; |
} |
} |
if (memcmp(key->ptr, prefix->ptr, prefix->used - 1) != 0) { | if (memcmp(key->ptr, prefix->ptr, buffer_string_length(prefix)) != 0) { |
break; |
break; |
} |
} |
/* ok, they have same prefix. check position */ |
/* ok, they have same prefix. check position */ |
Line 151 PHYSICALPATH_FUNC(mod_alias_physical_handler) {
|
Line 154 PHYSICALPATH_FUNC(mod_alias_physical_handler) {
|
char *uri_ptr; |
char *uri_ptr; |
size_t k; |
size_t k; |
|
|
if (con->physical.path->used == 0) return HANDLER_GO_ON; | if (buffer_is_empty(con->physical.path)) return HANDLER_GO_ON; |
|
|
mod_alias_patch_connection(srv, con, p); |
mod_alias_patch_connection(srv, con, p); |
|
|
/* not to include the tailing slash */ |
/* not to include the tailing slash */ |
basedir_len = (con->physical.basedir->used - 1); | basedir_len = buffer_string_length(con->physical.basedir); |
if ('/' == con->physical.basedir->ptr[basedir_len-1]) --basedir_len; |
if ('/' == con->physical.basedir->ptr[basedir_len-1]) --basedir_len; |
uri_len = con->physical.path->used - 1 - basedir_len; | uri_len = buffer_string_length(con->physical.path) - basedir_len; |
uri_ptr = con->physical.path->ptr + basedir_len; |
uri_ptr = con->physical.path->ptr + basedir_len; |
|
|
for (k = 0; k < p->conf.alias->used; k++) { |
for (k = 0; k < p->conf.alias->used; k++) { |
data_string *ds = (data_string *)p->conf.alias->data[k]; |
data_string *ds = (data_string *)p->conf.alias->data[k]; |
int alias_len = ds->key->used - 1; | int alias_len = buffer_string_length(ds->key); |
|
|
if (alias_len > uri_len) continue; |
if (alias_len > uri_len) continue; |
if (ds->key->used == 0) continue; | if (buffer_is_empty(ds->key)) continue; |
|
|
if (0 == (con->conf.force_lowercase_filenames ? |
if (0 == (con->conf.force_lowercase_filenames ? |
strncasecmp(uri_ptr, ds->key->ptr, alias_len) : |
strncasecmp(uri_ptr, ds->key->ptr, alias_len) : |
strncmp(uri_ptr, ds->key->ptr, alias_len))) { |
strncmp(uri_ptr, ds->key->ptr, alias_len))) { |
/* matched */ |
/* matched */ |
|
|
buffer_copy_string_buffer(con->physical.basedir, ds->value); | buffer_copy_buffer(con->physical.basedir, ds->value); |
buffer_copy_string_buffer(srv->tmp_buf, ds->value); | buffer_copy_buffer(srv->tmp_buf, ds->value); |
buffer_append_string(srv->tmp_buf, uri_ptr + alias_len); |
buffer_append_string(srv->tmp_buf, uri_ptr + alias_len); |
buffer_copy_string_buffer(con->physical.path, srv->tmp_buf); | buffer_copy_buffer(con->physical.path, srv->tmp_buf); |
|
|
return HANDLER_GO_ON; |
return HANDLER_GO_ON; |
} |
} |