diff -urN proftpd-1.2.10-org/modules/mod_codeconv.c proftpd-1.2.10/modules/mod_codeconv.c --- proftpd-1.2.10-org/modules/mod_codeconv.c 2005-08-16 21:22:06.629366776 +0900 +++ proftpd-1.2.10/modules/mod_codeconv.c 2005-08-16 21:23:23.460686640 +0900 @@ -56,8 +54,19 @@ config_rec* conf_l = NULL; config_rec* conf_r = NULL; - conf_l = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE); - conf_r = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE); + config_rec* c; + + c = find_config(CURRENT_CONF, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE); + while( c ){ + conf_l = c; + c = find_config_next( c, c->next, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE ); + } + + c = find_config(CURRENT_CONF, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE); + while( c ){ + conf_r = c; + c = find_config_next( c, c->next, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE ); + } if (!conf_l || !conf_r) return NULL; ic = iconv_open(conf_l->argv[0], conf_r->argv[0]); @@ -95,9 +104,21 @@ config_rec* conf_l = NULL; config_rec* conf_r = NULL; + + config_rec* c; - conf_l = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE); - conf_r = find_config(main_server->conf, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE); + c = find_config(CURRENT_CONF, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE); + while( c ){ + conf_l = c; + c = find_config_next( c, c->next, CONF_PARAM, DIRECTIVE_CHARSETLOCAL, FALSE ); + } + + c = find_config(CURRENT_CONF, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE); + while( c ){ + conf_r = c; + c = find_config_next( c, c->next, CONF_PARAM, DIRECTIVE_CHARSETREMOTE, FALSE ); + } + if (!conf_l || !conf_r) return NULL; ic = iconv_open(conf_r->argv[0], conf_l->argv[0]); @@ -154,10 +175,11 @@ /* Syntax: CharsetLocal iconv-charset-name */ CHECK_ARGS(cmd, 1); - CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); - - c = add_config_param_str(DIRECTIVE_CHARSETLOCAL, 1, cmd->argv[1]); + CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_DIR|CONF_DYNDIR); + c = add_config_param_str(cmd->argv[0], 1, cmd->argv[1]); + c->flags |= CF_MERGEDOWN; + return HANDLED(cmd); } @@ -166,14 +188,15 @@ // MODRET set_charsetremote(cmd_rec *cmd) { config_rec *c = NULL; - + /* Syntax: CharsetRemote iconv-charset-name */ CHECK_ARGS(cmd, 1); - CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); - - c = add_config_param_str(DIRECTIVE_CHARSETREMOTE, 1, cmd->argv[1]); + CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_DIR|CONF_DYNDIR); + c = add_config_param_str(cmd->argv[0], 1, cmd->argv[1]); + c->flags |= CF_MERGEDOWN; + return HANDLED(cmd); }