Lines Matching refs:cmd

74 static unsigned long core_exceeded_cmd_rate(cmd_rec *cmd) {  in core_exceeded_cmd_rate()  argument
195 MODRET start_ifdefine(cmd_rec *cmd) { in start_ifdefine() argument
200 CHECK_ARGS(cmd, 1); in start_ifdefine()
202 ptr = cmd->argv[1]; in start_ifdefine()
216 (char *) cmd->argv[0], not_define ? "!" : "", (char *) cmd->argv[1], in start_ifdefine()
218 return PR_HANDLED(cmd); in start_ifdefine()
222 (char *) cmd->argv[0], not_define ? "!" : "", (char *) cmd->argv[1], in start_ifdefine()
245 CONF_ERROR(cmd, "unclosed <IfDefine> context"); in start_ifdefine()
248 return PR_HANDLED(cmd); in start_ifdefine()
255 MODRET end_ifdefine(cmd_rec *cmd) { in end_ifdefine() argument
256 return PR_HANDLED(cmd); in end_ifdefine()
259 MODRET start_ifmodule(cmd_rec *cmd) { in start_ifmodule() argument
264 CHECK_ARGS(cmd, 1); in start_ifmodule()
266 ptr = cmd->argv[1]; in start_ifmodule()
280 (char *) cmd->argv[0], not_module ? "!" : "", (char *) cmd->argv[1], in start_ifmodule()
282 return PR_HANDLED(cmd); in start_ifmodule()
286 (char *) cmd->argv[0], not_module ? "!" : "", (char *) cmd->argv[1], in start_ifmodule()
314 CONF_ERROR(cmd, "unclosed <IfModule> context"); in start_ifmodule()
317 return PR_HANDLED(cmd); in start_ifmodule()
324 MODRET end_ifmodule(cmd_rec *cmd) { in end_ifmodule() argument
325 return PR_HANDLED(cmd); in end_ifmodule()
337 MODRET set_define(cmd_rec *cmd) { in set_define() argument
340 CHECK_ARGS(cmd, 1); in set_define()
346 pr_define_add(cmd->argv[1], FALSE); in set_define()
347 return PR_HANDLED(cmd); in set_define()
351 MODRET set_include(cmd_rec *cmd) { in set_include() argument
354 CHECK_ARGS(cmd, 1); in set_include()
364 if (cmd->config != NULL && in set_include()
365 cmd->config->parent != NULL) { in set_include()
366 parent_ctx = cmd->config->parent->config_type; in set_include()
373 CHECK_CONF(cmd, allowed_ctxs); in set_include()
378 res = pr_fs_valid_path(cmd->argv[1]); in set_include()
382 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_include()
383 "unable to use path for configuration file '", cmd->argv[1], "'", NULL)); in set_include()
387 res = parse_config_path(cmd->tmp_pool, cmd->argv[1]); in set_include()
394 (char *) cmd->argv[1], strerror(xerrno)); in set_include()
397 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error including '", in set_include()
398 (char *) cmd->argv[1], "': ", strerror(xerrno), NULL)); in set_include()
402 return PR_HANDLED(cmd); in set_include()
406 MODRET set_includeoptions(cmd_rec *cmd) { in set_includeoptions() argument
410 if (cmd->argc-1 == 0) { in set_includeoptions()
411 CONF_ERROR(cmd, "wrong number of parameters"); in set_includeoptions()
414 CHECK_CONF(cmd, CONF_ROOT); in set_includeoptions()
416 for (i = 1; i < cmd->argc; i++) { in set_includeoptions()
417 if (strcmp(cmd->argv[i], "AllowSymlinks") == 0) { in set_includeoptions()
420 } else if (strcmp(cmd->argv[i], "IgnoreTempFiles") == 0) { in set_includeoptions()
423 } else if (strcmp(cmd->argv[i], "IgnoreWildcards") == 0) { in set_includeoptions()
427 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "unknown IncludeOption '", in set_includeoptions()
428 cmd->argv[i], "'", NULL)); in set_includeoptions()
433 return PR_HANDLED(cmd); in set_includeoptions()
436 MODRET set_debuglevel(cmd_rec *cmd) { in set_debuglevel() argument
441 CHECK_ARGS(cmd, 1); in set_debuglevel()
442 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_debuglevel()
445 debuglevel = strtol(cmd->argv[1], &endp, 10); in set_debuglevel()
448 CONF_ERROR(cmd, "not a valid number"); in set_debuglevel()
452 CONF_ERROR(cmd, "invalid debug level configured"); in set_debuglevel()
454 c = add_config_param(cmd->argv[0], 1, NULL); in set_debuglevel()
458 return PR_HANDLED(cmd); in set_debuglevel()
461 MODRET set_defaultaddress(cmd_rec *cmd) { in set_defaultaddress() argument
467 if (cmd->argc-1 < 1) { in set_defaultaddress()
468 CONF_ERROR(cmd, "wrong number of parameters"); in set_defaultaddress()
471 CHECK_CONF(cmd, CONF_ROOT); in set_defaultaddress()
473 name = cmd->argv[1]; in set_defaultaddress()
476 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "unable to resolve '", name, "'", in set_defaultaddress()
510 ipbuf = pcalloc(cmd->tmp_pool, INET6_ADDRSTRLEN + 1); in set_defaultaddress()
529 if (cmd->argc-1 > 1) { in set_defaultaddress()
533 for (i = 2; i < cmd->argc; i++) { in set_defaultaddress()
538 addr = pr_netaddr_get_addr2(cmd->tmp_pool, cmd->argv[i], &addrs, in set_defaultaddress()
541 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error resolving '", in set_defaultaddress()
542 cmd->argv[i], "': ", strerror(errno), NULL)); in set_defaultaddress()
551 if (pr_netaddr_is_v4(cmd->argv[i]) == FALSE && in set_defaultaddress()
552 pr_netaddr_is_v6(cmd->argv[i]) == FALSE) { in set_defaultaddress()
553 add_config_param_str("ServerAlias", 1, cmd->argv[i]); in set_defaultaddress()
556 addrs_str = pstrcat(cmd->tmp_pool, addrs_str, ", ", addr_ipstr, NULL); in set_defaultaddress()
584 return PR_HANDLED(cmd); in set_defaultaddress()
587 MODRET set_servername(cmd_rec *cmd) { in set_servername() argument
588 server_rec *s = cmd->server; in set_servername()
590 CHECK_ARGS(cmd, 1); in set_servername()
591 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL); in set_servername()
593 s->ServerName = pstrdup(s->pool,cmd->argv[1]); in set_servername()
594 return PR_HANDLED(cmd); in set_servername()
597 MODRET set_servertype(cmd_rec *cmd) { in set_servertype() argument
598 CHECK_ARGS(cmd, 1); in set_servertype()
599 CHECK_CONF(cmd, CONF_ROOT); in set_servertype()
601 if (strcasecmp(cmd->argv[1], "inetd") == 0) in set_servertype()
604 else if (strcasecmp(cmd->argv[1], "standalone") == 0) in set_servertype()
608 CONF_ERROR(cmd,"type must be either 'inetd' or 'standalone'"); in set_servertype()
610 return PR_HANDLED(cmd); in set_servertype()
613 MODRET set_setenv(cmd_rec *cmd) { in set_setenv() argument
616 CHECK_ARGS(cmd, 2); in set_setenv()
617 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_setenv()
619 add_config_param_str(cmd->argv[0], 2, cmd->argv[1], cmd->argv[2]); in set_setenv()
626 ctxt_type = (cmd->config && cmd->config->config_type != CONF_PARAM ? in set_setenv()
627 cmd->config->config_type : cmd->server->config_type ? in set_setenv()
628 cmd->server->config_type : CONF_ROOT); in set_setenv()
631 if (pr_env_set(cmd->server->pool, cmd->argv[1], cmd->argv[2]) < 0) { in set_setenv()
633 (char *) cmd->argv[0], (char *) cmd->argv[1], strerror(errno)); in set_setenv()
636 core_handle_locale_env(cmd->argv[1]); in set_setenv()
640 return PR_HANDLED(cmd); in set_setenv()
643 MODRET add_transferlog(cmd_rec *cmd) { in add_transferlog() argument
646 CHECK_ARGS(cmd, 1); in add_transferlog()
647 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON); in add_transferlog()
649 c = add_config_param_str(cmd->argv[0], 1, cmd->argv[1]); in add_transferlog()
652 return PR_HANDLED(cmd); in add_transferlog()
655 MODRET set_serveradmin(cmd_rec *cmd) { in set_serveradmin() argument
656 server_rec *s = cmd->server; in set_serveradmin()
658 CHECK_ARGS(cmd, 1); in set_serveradmin()
659 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL); in set_serveradmin()
661 s->ServerAdmin = pstrdup(s->pool, cmd->argv[1]); in set_serveradmin()
662 return PR_HANDLED(cmd); in set_serveradmin()
666 MODRET set_useipv6(cmd_rec *cmd) { in set_useipv6() argument
670 CHECK_ARGS(cmd, 1); in set_useipv6()
671 CHECK_CONF(cmd, CONF_ROOT); in set_useipv6()
673 bool = get_boolean(cmd, 1); in set_useipv6()
675 CONF_ERROR(cmd, "expected Boolean parameter"); in set_useipv6()
685 return PR_HANDLED(cmd); in set_useipv6()
687 CONF_ERROR(cmd, in set_useipv6()
692 MODRET set_usereversedns(cmd_rec *cmd) { in set_usereversedns() argument
695 CHECK_ARGS(cmd, 1); in set_usereversedns()
696 CHECK_CONF(cmd, CONF_ROOT); in set_usereversedns()
698 bool = get_boolean(cmd, 1); in set_usereversedns()
700 CONF_ERROR(cmd, "expected Boolean parameter"); in set_usereversedns()
705 return PR_HANDLED(cmd); in set_usereversedns()
708 MODRET set_satisfy(cmd_rec *cmd) { in set_satisfy() argument
711 CHECK_ARGS(cmd, 1); in set_satisfy()
712 CHECK_CONF(cmd, CONF_CLASS); in set_satisfy()
714 if (strcasecmp(cmd->argv[1], "any") == 0) { in set_satisfy()
717 } else if (strcasecmp(cmd->argv[1], "all") == 0) { in set_satisfy()
721 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "invalid parameter: '", in set_satisfy()
722 cmd->argv[1], "'", NULL)); in set_satisfy()
726 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error setting Satisfy: ", in set_satisfy()
730 return PR_HANDLED(cmd); in set_satisfy()
734 MODRET set_scoreboardfile(cmd_rec *cmd) { in set_scoreboardfile() argument
735 CHECK_ARGS(cmd, 1); in set_scoreboardfile()
736 CHECK_CONF(cmd, CONF_ROOT); in set_scoreboardfile()
738 if (pr_set_scoreboard(cmd->argv[1]) < 0) { in set_scoreboardfile()
739 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "unable to use '", cmd->argv[1], in set_scoreboardfile()
743 return PR_HANDLED(cmd); in set_scoreboardfile()
747 MODRET set_scoreboardmutex(cmd_rec *cmd) { in set_scoreboardmutex() argument
748 CHECK_ARGS(cmd, 1); in set_scoreboardmutex()
749 CHECK_CONF(cmd, CONF_ROOT); in set_scoreboardmutex()
751 if (pr_set_scoreboard_mutex(cmd->argv[1]) < 0) { in set_scoreboardmutex()
752 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "unable to use '", cmd->argv[1], in set_scoreboardmutex()
756 return PR_HANDLED(cmd); in set_scoreboardmutex()
760 MODRET set_scoreboardscrub(cmd_rec *cmd) { in set_scoreboardscrub() argument
764 CHECK_ARGS(cmd, 1); in set_scoreboardscrub()
765 CHECK_CONF(cmd, CONF_ROOT); in set_scoreboardscrub()
767 bool = get_boolean(cmd, 1); in set_scoreboardscrub()
772 nsecs = atoi(cmd->argv[1]); in set_scoreboardscrub()
774 CONF_ERROR(cmd, "number must be greater than zero"); in set_scoreboardscrub()
779 c = add_config_param(cmd->argv[0], 2, NULL, NULL); in set_scoreboardscrub()
786 c = add_config_param(cmd->argv[0], 1, NULL); in set_scoreboardscrub()
791 return PR_HANDLED(cmd); in set_scoreboardscrub()
794 MODRET set_serverport(cmd_rec *cmd) { in set_serverport() argument
795 server_rec *s = cmd->server; in set_serverport()
798 CHECK_ARGS(cmd, 1); in set_serverport()
799 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL); in set_serverport()
801 port = atoi(cmd->argv[1]); in set_serverport()
804 CONF_ERROR(cmd, "value must be between 0 and 65535"); in set_serverport()
808 return PR_HANDLED(cmd); in set_serverport()
811 MODRET set_pidfile(cmd_rec *cmd) { in set_pidfile() argument
812 CHECK_ARGS(cmd, 1); in set_pidfile()
813 CHECK_CONF(cmd, CONF_ROOT); in set_pidfile()
815 if (pr_pidfile_set(cmd->argv[1]) < 0) { in set_pidfile()
816 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "unable to set PidFile '", in set_pidfile()
817 cmd->argv[1], "': ", strerror(errno), NULL)); in set_pidfile()
820 return PR_HANDLED(cmd); in set_pidfile()
823 MODRET set_sysloglevel(cmd_rec *cmd) { in set_sysloglevel() argument
827 CHECK_ARGS(cmd, 1); in set_sysloglevel()
828 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_sysloglevel()
830 level = pr_log_str2sysloglevel(cmd->argv[1]); in set_sysloglevel()
832 CONF_ERROR(cmd, "SyslogLevel requires level keyword: one of " in set_sysloglevel()
836 c = add_config_param(cmd->argv[0], 1, NULL); in set_sysloglevel()
840 return PR_HANDLED(cmd); in set_sysloglevel()
844 MODRET set_serveralias(cmd_rec *cmd) { in set_serveralias() argument
847 if (cmd->argc < 2) { in set_serveralias()
848 CONF_ERROR(cmd, "wrong number of parameters"); in set_serveralias()
851 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL); in set_serveralias()
853 for (i = 1; i < cmd->argc; i++) { in set_serveralias()
854 add_config_param_str(cmd->argv[0], 1, cmd->argv[i]); in set_serveralias()
857 return PR_HANDLED(cmd); in set_serveralias()
861 MODRET set_serverident(cmd_rec *cmd) { in set_serverident() argument
865 if (cmd->argc < 2 || in set_serverident()
866 cmd->argc > 3) { in set_serverident()
867 CONF_ERROR(cmd, "wrong number of parameters"); in set_serverident()
870 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_serverident()
872 ident_on = get_boolean(cmd, 1); in set_serverident()
874 CONF_ERROR(cmd, "expected Boolean parameter"); in set_serverident()
878 cmd->argc == 3) { in set_serverident()
879 c = add_config_param(cmd->argv[0], 2, NULL, NULL); in set_serverident()
882 c->argv[1] = pstrdup(c->pool, cmd->argv[2]); in set_serverident()
885 c = add_config_param(cmd->argv[0], 1, NULL); in set_serverident()
890 return PR_HANDLED(cmd); in set_serverident()
893 MODRET set_defaultserver(cmd_rec *cmd) { in set_defaultserver() argument
898 CHECK_ARGS(cmd, 1); in set_defaultserver()
899 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL); in set_defaultserver()
901 bool = get_boolean(cmd, 1); in set_defaultserver()
903 CONF_ERROR(cmd, "expected Boolean parameter"); in set_defaultserver()
907 return PR_HANDLED(cmd); in set_defaultserver()
912 if (find_config(s->conf, CONF_PARAM, cmd->argv[0], FALSE)) { in set_defaultserver()
913 CONF_ERROR(cmd, "DefaultServer has already been set"); in set_defaultserver()
917 c = add_config_param(cmd->argv[0], 1, NULL); in set_defaultserver()
921 return PR_HANDLED(cmd); in set_defaultserver()
924 MODRET set_masqueradeaddress(cmd_rec *cmd) { in set_masqueradeaddress() argument
931 CHECK_ARGS(cmd, 1); in set_masqueradeaddress()
932 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_masqueradeaddress()
937 name = cmd->argv[1]; in set_masqueradeaddress()
941 CONF_ERROR(cmd, "missing required name parameter"); in set_masqueradeaddress()
944 masq_addr = pr_netaddr_get_addr2(cmd->server->pool, name, NULL, addr_flags); in set_masqueradeaddress()
951 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "unable to resolve '", name, "'", in set_masqueradeaddress()
956 c = add_config_param(cmd->argv[0], 2, (void *) masq_addr, NULL); in set_masqueradeaddress()
957 c->argv[1] = pstrdup(c->pool, cmd->argv[1]); in set_masqueradeaddress()
959 return PR_HANDLED(cmd); in set_masqueradeaddress()
962 MODRET set_maxinstances(cmd_rec *cmd) { in set_maxinstances() argument
966 CHECK_ARGS(cmd, 1); in set_maxinstances()
967 CHECK_CONF(cmd, CONF_ROOT); in set_maxinstances()
969 if (strcasecmp(cmd->argv[1], "none") == 0) { in set_maxinstances()
973 max_instances = strtol(cmd->argv[1], &endp, 10); in set_maxinstances()
977 CONF_ERROR(cmd, "argument must be 'none' or a number greater than 0"); in set_maxinstances()
982 return PR_HANDLED(cmd); in set_maxinstances()
986 MODRET set_maxcommandrate(cmd_rec *cmd) { in set_maxcommandrate() argument
992 if (cmd->argc-1 < 1 || in set_maxcommandrate()
993 cmd->argc-1 > 2) { in set_maxcommandrate()
994 CONF_ERROR(cmd, "wrong number of parameters"); in set_maxcommandrate()
997 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_maxcommandrate()
999 cmd_max = strtol(cmd->argv[1], &endp, 10); in set_maxcommandrate()
1002 CONF_ERROR(cmd, "invalid command rate"); in set_maxcommandrate()
1006 CONF_ERROR(cmd, "command rate must be positive"); in set_maxcommandrate()
1010 if (cmd->argc-1 == 2) { in set_maxcommandrate()
1011 max_cmd_interval = atoi(cmd->argv[2]); in set_maxcommandrate()
1014 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_maxcommandrate()
1019 c = add_config_param(cmd->argv[0], 2, NULL, NULL); in set_maxcommandrate()
1025 return PR_HANDLED(cmd); in set_maxcommandrate()
1030 MODRET set_maxconnrate(cmd_rec *cmd) { in set_maxconnrate() argument
1034 if (cmd->argc-1 < 1 || in set_maxconnrate()
1035 cmd->argc-1 > 2) { in set_maxconnrate()
1036 CONF_ERROR(cmd, "wrong number of parameters"); in set_maxconnrate()
1038 CHECK_CONF(cmd, CONF_ROOT); in set_maxconnrate()
1040 conn_max = strtol(cmd->argv[1], &endp, 10); in set_maxconnrate()
1043 CONF_ERROR(cmd, "invalid connection rate"); in set_maxconnrate()
1047 CONF_ERROR(cmd, "connection rate must be positive"); in set_maxconnrate()
1053 if (cmd->argc-1 == 2) { in set_maxconnrate()
1054 max_connect_interval = atoi(cmd->argv[2]); in set_maxconnrate()
1057 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_maxconnrate()
1062 return PR_HANDLED(cmd); in set_maxconnrate()
1065 MODRET set_timeoutidle(cmd_rec *cmd) { in set_timeoutidle() argument
1069 CHECK_ARGS(cmd, 1); in set_timeoutidle()
1070 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON); in set_timeoutidle()
1072 if (pr_str_get_duration(cmd->argv[1], &timeout) < 0) { in set_timeoutidle()
1073 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error parsing timeout value '", in set_timeoutidle()
1074 cmd->argv[1], "': ", strerror(errno), NULL)); in set_timeoutidle()
1077 c = add_config_param(cmd->argv[0], 1, NULL); in set_timeoutidle()
1082 return PR_HANDLED(cmd); in set_timeoutidle()
1085 MODRET set_timeoutlinger(cmd_rec *cmd) { in set_timeoutlinger() argument
1089 CHECK_ARGS(cmd, 1); in set_timeoutlinger()
1090 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_timeoutlinger()
1092 if (pr_str_get_duration(cmd->argv[1], &timeout) < 0) { in set_timeoutlinger()
1093 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error parsing timeout value '", in set_timeoutlinger()
1094 cmd->argv[1], "': ", strerror(errno), NULL)); in set_timeoutlinger()
1097 c = add_config_param(cmd->argv[0], 1, NULL); in set_timeoutlinger()
1101 return PR_HANDLED(cmd); in set_timeoutlinger()
1104 MODRET set_socketbindtight(cmd_rec *cmd) { in set_socketbindtight() argument
1106 CHECK_ARGS(cmd, 1); in set_socketbindtight()
1107 CHECK_CONF(cmd, CONF_ROOT); in set_socketbindtight()
1109 bool = get_boolean(cmd, 1); in set_socketbindtight()
1111 CONF_ERROR(cmd, "expected Boolean parameter"); in set_socketbindtight()
1115 return PR_HANDLED(cmd); in set_socketbindtight()
1121 MODRET set_socketoptions(cmd_rec *cmd) { in set_socketoptions() argument
1125 if ((cmd->argc-1) % 2 != 0) in set_socketoptions()
1126 CONF_ERROR(cmd, "bad number of parameters"); in set_socketoptions()
1128 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL); in set_socketoptions()
1130 for (i = 1; i < cmd->argc; i++) { in set_socketoptions()
1133 if (strcasecmp(cmd->argv[i], "maxseg") == 0) { in set_socketoptions()
1134 value = atoi(cmd->argv[++i]); in set_socketoptions()
1141 CONF_ERROR(cmd, "maxseg size must be greater than 0"); in set_socketoptions()
1144 cmd->server->tcp_mss_len = value; in set_socketoptions()
1146 } else if (strcasecmp(cmd->argv[i], "rcvbuf") == 0) { in set_socketoptions()
1147 value = atoi(cmd->argv[++i]); in set_socketoptions()
1150 CONF_ERROR(cmd, "rcvbuf size must be greater than or equal to 1024"); in set_socketoptions()
1153 cmd->server->tcp_rcvbuf_len = value; in set_socketoptions()
1154 cmd->server->tcp_rcvbuf_override = TRUE; in set_socketoptions()
1156 } else if (strcasecmp(cmd->argv[i], "sndbuf") == 0) { in set_socketoptions()
1157 value = atoi(cmd->argv[++i]); in set_socketoptions()
1160 CONF_ERROR(cmd, "sndbuf size must be greater than or equal to 1024"); in set_socketoptions()
1163 cmd->server->tcp_sndbuf_len = value; in set_socketoptions()
1164 cmd->server->tcp_sndbuf_override = TRUE; in set_socketoptions()
1170 } else if (strcasecmp(cmd->argv[i], "keepalive") == 0) { in set_socketoptions()
1173 b = get_boolean(cmd, i+1); in set_socketoptions()
1180 keepalive_spec = cmd->argv[i+1]; in set_socketoptions()
1184 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_socketoptions()
1185 "badly formatted TCP keepalive spec '", cmd->argv[i+1], "'", NULL)); in set_socketoptions()
1195 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_socketoptions()
1196 "badly formatted TCP keepalive spec '", cmd->argv[i+1], "'", NULL)); in set_socketoptions()
1211 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_socketoptions()
1222 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_socketoptions()
1233 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_socketoptions()
1238 cmd->server->tcp_keepalive->keepalive_enabled = TRUE; in set_socketoptions()
1239 cmd->server->tcp_keepalive->keepalive_idle = idle; in set_socketoptions()
1240 cmd->server->tcp_keepalive->keepalive_count = count; in set_socketoptions()
1241 cmd->server->tcp_keepalive->keepalive_intvl = intvl; in set_socketoptions()
1243 cmd->server->tcp_keepalive->keepalive_enabled = TRUE; in set_socketoptions()
1246 "using \"keepalive on\"", (char *) cmd->argv[0]); in set_socketoptions()
1250 cmd->server->tcp_keepalive->keepalive_enabled = b; in set_socketoptions()
1257 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, ": unknown socket option: '", in set_socketoptions()
1258 cmd->argv[i], "'", NULL)); in set_socketoptions()
1262 return PR_HANDLED(cmd); in set_socketoptions()
1265 MODRET set_multilinerfc2228(cmd_rec *cmd) { in set_multilinerfc2228() argument
1269 CHECK_ARGS(cmd, 1); in set_multilinerfc2228()
1270 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_multilinerfc2228()
1272 bool = get_boolean(cmd, 1); in set_multilinerfc2228()
1274 CONF_ERROR(cmd, "expected Boolean parameter"); in set_multilinerfc2228()
1277 c = add_config_param(cmd->argv[0], 1, NULL); in set_multilinerfc2228()
1281 return PR_HANDLED(cmd); in set_multilinerfc2228()
1284 MODRET set_tcpbacklog(cmd_rec *cmd) { in set_tcpbacklog() argument
1287 CHECK_ARGS(cmd, 1); in set_tcpbacklog()
1288 CHECK_CONF(cmd, CONF_ROOT); in set_tcpbacklog()
1290 backlog = atoi(cmd->argv[1]); in set_tcpbacklog()
1294 CONF_ERROR(cmd, "parameter must be a number between 1 and 255"); in set_tcpbacklog()
1304 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_tcpbacklog()
1310 return PR_HANDLED(cmd); in set_tcpbacklog()
1313 MODRET set_tcpnodelay(cmd_rec *cmd) { in set_tcpnodelay() argument
1317 CHECK_ARGS(cmd, 1); in set_tcpnodelay()
1318 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_tcpnodelay()
1320 bool = get_boolean(cmd, 1); in set_tcpnodelay()
1322 CONF_ERROR(cmd, "expected Boolean parameter"); in set_tcpnodelay()
1325 c = add_config_param(cmd->argv[0], 1, NULL); in set_tcpnodelay()
1329 return PR_HANDLED(cmd); in set_tcpnodelay()
1332 MODRET set_user(cmd_rec *cmd) { in set_user() argument
1335 CHECK_ARGS(cmd, 1); in set_user()
1336 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON); in set_user()
1342 if (!cmd->config || cmd->config->config_type != CONF_ANON) { in set_user()
1343 pw = pr_auth_getpwnam(cmd->tmp_pool, cmd->argv[1]); in set_user()
1345 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "Unknown user '", in set_user()
1346 cmd->argv[1], "'", NULL)); in set_user()
1356 add_config_param_str("UserName", 1, cmd->argv[1]); in set_user()
1357 return PR_HANDLED(cmd); in set_user()
1360 MODRET add_from(cmd_rec *cmd) { in add_from() argument
1364 CHECK_CONF(cmd, CONF_CLASS); in add_from()
1366 cargc = cmd->argc-1; in add_from()
1367 cargv = cmd->argv; in add_from()
1376 pr_netacl_t *acl = pr_netacl_create(cmd->tmp_pool, from); in add_from()
1378 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "bad ACL definition '", from, in add_from()
1383 pr_netacl_get_str(cmd->tmp_pool, acl)); in add_from()
1386 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error adding rule '", from, in add_from()
1400 str = pstrdup(cmd->tmp_pool, *((char **) cargv)); in add_from()
1414 acl = pr_netacl_create(cmd->tmp_pool, ent); in add_from()
1416 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "bad ACL definition '", in add_from()
1421 pr_netacl_get_str(cmd->tmp_pool, acl)); in add_from()
1424 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error adding rule '", ent, in add_from()
1431 return PR_HANDLED(cmd); in add_from()
1435 MODRET set_fscachepolicy(cmd_rec *cmd) { in set_fscachepolicy() argument
1439 if (cmd->argc != 2 && in set_fscachepolicy()
1440 cmd->argc != 5) { in set_fscachepolicy()
1441 CONF_ERROR(cmd, "wrong number of parameters"); in set_fscachepolicy()
1444 if (cmd->argc == 2) { in set_fscachepolicy()
1447 engine = get_boolean(cmd, 1); in set_fscachepolicy()
1449 CONF_ERROR(cmd, "expected Boolean parameter"); in set_fscachepolicy()
1452 c = add_config_param(cmd->argv[0], 3, NULL, NULL, NULL); in set_fscachepolicy()
1460 return PR_HANDLED(cmd); in set_fscachepolicy()
1463 c = add_config_param_str(cmd->argv[0], 3, NULL, NULL, NULL); in set_fscachepolicy()
1471 for (i = 1; i < cmd->argc; i++) { in set_fscachepolicy()
1472 if (strncasecmp(cmd->argv[i], "size", 5) == 0) { in set_fscachepolicy()
1476 size = atoi(cmd->argv[i]); in set_fscachepolicy()
1478 CONF_ERROR(cmd, "size parameter must be greater than 1"); in set_fscachepolicy()
1483 } else if (strncasecmp(cmd->argv[i], "maxAge", 7) == 0) { in set_fscachepolicy()
1487 max_age = atoi(cmd->argv[i]); in set_fscachepolicy()
1489 CONF_ERROR(cmd, "maxAge parameter must be greater than 1"); in set_fscachepolicy()
1495 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "unknown FSCachePolicy: ", in set_fscachepolicy()
1496 cmd->argv[i], NULL)); in set_fscachepolicy()
1500 return PR_HANDLED(cmd); in set_fscachepolicy()
1504 MODRET set_fsoptions(cmd_rec *cmd) { in set_fsoptions() argument
1510 if (cmd->argc-1 == 0) { in set_fsoptions()
1511 CONF_ERROR(cmd, "wrong number of parameters"); in set_fsoptions()
1514 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_fsoptions()
1516 c = add_config_param(cmd->argv[0], 1, NULL); in set_fsoptions()
1518 for (i = 1; i < cmd->argc; i++) { in set_fsoptions()
1519 if (strcmp(cmd->argv[i], "IgnoreExtendedAttributes") == 0) { in set_fsoptions()
1523 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, ": unknown FSOption '", in set_fsoptions()
1524 cmd->argv[i], "'", NULL)); in set_fsoptions()
1531 return PR_HANDLED(cmd); in set_fsoptions()
1534 MODRET set_group(cmd_rec *cmd) { in set_group() argument
1537 CHECK_ARGS(cmd, 1); in set_group()
1538 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON); in set_group()
1540 if (!cmd->config || cmd->config->config_type != CONF_ANON) { in set_group()
1541 grp = pr_auth_getgrnam(cmd->tmp_pool, cmd->argv[1]); in set_group()
1543 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "Unknown group '", in set_group()
1544 cmd->argv[1], "'", NULL)); in set_group()
1554 add_config_param_str("GroupName", 1, cmd->argv[1]); in set_group()
1555 return PR_HANDLED(cmd); in set_group()
1559 MODRET set_trace(cmd_rec *cmd) { in set_trace() argument
1565 if (cmd->argc-1 < 1) { in set_trace()
1566 CONF_ERROR(cmd, "wrong number of parameters"); in set_trace()
1568 CHECK_CONF(cmd, CONF_ROOT); in set_trace()
1573 if (strncmp(cmd->argv[1], "session", 8) == 0) { in set_trace()
1576 if (cmd->argc == 2) { in set_trace()
1577 CONF_ERROR(cmd, "wrong number of parameters"); in set_trace()
1585 for (i = idx; i < cmd->argc; i++) { in set_trace()
1589 ptr = strchr(cmd->argv[i], ':'); in set_trace()
1591 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "badly formatted parameter: '", in set_trace()
1592 cmd->argv[i], "'", NULL)); in set_trace()
1595 channel = cmd->argv[i]; in set_trace()
1600 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error parsing level \"", in set_trace()
1605 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error setting level \"", in set_trace()
1620 c = add_config_param(cmd->argv[0], 0); in set_trace()
1621 c->argc = cmd->argc - 2; in set_trace()
1624 for (i = idx; i < cmd->argc; i++) { in set_trace()
1627 ptr = strchr(cmd->argv[i], ':'); in set_trace()
1629 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "badly formatted parameter: '", in set_trace()
1630 cmd->argv[i], "'", NULL)); in set_trace()
1633 c->argv[j++] = pstrdup(c->pool, cmd->argv[i]); in set_trace()
1637 return PR_HANDLED(cmd); in set_trace()
1639 CONF_ERROR(cmd, in set_trace()
1645 MODRET set_tracelog(cmd_rec *cmd) { in set_tracelog() argument
1647 if (cmd->argc-1 != 1) { in set_tracelog()
1648 CONF_ERROR(cmd, "wrong number of parameters"); in set_tracelog()
1650 CHECK_CONF(cmd, CONF_ROOT); in set_tracelog()
1652 if (pr_fs_valid_path(cmd->argv[1]) < 0) { in set_tracelog()
1653 CONF_ERROR(cmd, "must be an absolute path"); in set_tracelog()
1656 trace_log = pstrdup(cmd->server->pool, cmd->argv[1]); in set_tracelog()
1659 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error using TraceLog '", in set_tracelog()
1663 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error using TraceLog '", in set_tracelog()
1668 return PR_HANDLED(cmd); in set_tracelog()
1670 CONF_ERROR(cmd, in set_tracelog()
1676 MODRET set_traceoptions(cmd_rec *cmd) { in set_traceoptions() argument
1683 if (cmd->argc < 2) { in set_traceoptions()
1684 CONF_ERROR(cmd, "wrong number of parameters"); in set_traceoptions()
1687 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_traceoptions()
1689 for (i = 1; i < cmd->argc; i++) { in set_traceoptions()
1692 opt = cmd->argv[i]; in set_traceoptions()
1697 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "bad TraceOption: '", opt, "'", in set_traceoptions()
1737 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "unknown TraceOption: '", in set_traceoptions()
1742 c = add_config_param(cmd->argv[0], 1, NULL); in set_traceoptions()
1746 ctx = (cmd->config && cmd->config->config_type != CONF_PARAM ? in set_traceoptions()
1747 cmd->config->config_type : cmd->server->config_type ? in set_traceoptions()
1748 cmd->server->config_type : CONF_ROOT); in set_traceoptions()
1756 (char *) cmd->argv[0], trace_opts, strerror(errno)); in set_traceoptions()
1760 return PR_HANDLED(cmd); in set_traceoptions()
1763 CONF_ERROR(cmd, in set_traceoptions()
1768 MODRET set_umask(cmd_rec *cmd) { in set_umask() argument
1773 CHECK_VARARGS(cmd, 1, 2); in set_umask()
1774 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON| in set_umask()
1777 tmp_umask = (mode_t) strtol(cmd->argv[1], &endp, 8); in set_umask()
1780 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "'", cmd->argv[1], in set_umask()
1784 c = add_config_param(cmd->argv[0], 1, NULL); in set_umask()
1791 if (CHECK_HASARGS(cmd, 2)) { in set_umask()
1796 tmp_umask = (mode_t) strtol(cmd->argv[2], &endp, 8); in set_umask()
1799 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "'", cmd->argv[2], in set_umask()
1809 return PR_HANDLED(cmd); in set_umask()
1812 MODRET set_unsetenv(cmd_rec *cmd) { in set_unsetenv() argument
1815 CHECK_ARGS(cmd, 1); in set_unsetenv()
1816 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_unsetenv()
1818 add_config_param_str(cmd->argv[0], 1, cmd->argv[1]); in set_unsetenv()
1825 ctxt_type = (cmd->config && cmd->config->config_type != CONF_PARAM ? in set_unsetenv()
1826 cmd->config->config_type : cmd->server->config_type ? in set_unsetenv()
1827 cmd->server->config_type : CONF_ROOT); in set_unsetenv()
1830 if (pr_env_unset(cmd->server->pool, cmd->argv[1]) < 0) { in set_unsetenv()
1832 (char *) cmd->argv[0], (char *) cmd->argv[1], strerror(errno)); in set_unsetenv()
1835 core_handle_locale_env(cmd->argv[1]); in set_unsetenv()
1839 return PR_HANDLED(cmd); in set_unsetenv()
1843 MODRET set_processtitles(cmd_rec *cmd) { in set_processtitles() argument
1844 CHECK_ARGS(cmd, 1); in set_processtitles()
1845 CHECK_CONF(cmd, CONF_ROOT); in set_processtitles()
1847 if (strcasecmp(cmd->argv[1], "terse") != 0 && in set_processtitles()
1848 strcasecmp(cmd->argv[1], "verbose") != 0) { in set_processtitles()
1849 CONF_ERROR(cmd, "unknown parameter"); in set_processtitles()
1852 add_config_param_str(cmd->argv[0], 1, cmd->argv[1]); in set_processtitles()
1853 return PR_HANDLED(cmd); in set_processtitles()
1857 MODRET set_protocols(cmd_rec *cmd) { in set_protocols() argument
1862 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_protocols()
1864 if (cmd->argc < 2) { in set_protocols()
1865 CONF_ERROR(cmd, "wrong number of parameters"); in set_protocols()
1868 c = add_config_param(cmd->argv[0], 1, NULL); in set_protocols()
1871 for (i = 1; i < cmd->argc; i++) { in set_protocols()
1872 *((char **) push_array(list)) = pstrdup(c->pool, cmd->argv[i]); in set_protocols()
1878 return PR_HANDLED(cmd); in set_protocols()
1883 MODRET set_regexoptions(cmd_rec *cmd) { in set_regexoptions() argument
1888 if (cmd->argc < 3) { in set_regexoptions()
1889 CONF_ERROR(cmd, "Wrong number of parameters"); in set_regexoptions()
1895 npairs = cmd->argc - 1; in set_regexoptions()
1897 CONF_ERROR(cmd, "Wrong number of parameters"); in set_regexoptions()
1901 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_regexoptions()
1907 for (i = 1; i < cmd->argc; i++) { in set_regexoptions()
1908 if (strncmp(cmd->argv[i], "MatchLimit", 11) == 0) { in set_regexoptions()
1911 match_limit = strtoul(cmd->argv[i+1], &ptr, 10); in set_regexoptions()
1913 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "bad MatchLimit value: ", in set_regexoptions()
1914 cmd->argv[i+1], NULL)); in set_regexoptions()
1920 } else if (strncmp(cmd->argv[i], "MatchLimitRecursion", 20) == 0) { in set_regexoptions()
1923 match_limit_recursion = strtoul(cmd->argv[i+1], &ptr, 10); in set_regexoptions()
1925 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_regexoptions()
1926 "bad MatchLimitRecursion value: ", cmd->argv[i+1], NULL)); in set_regexoptions()
1933 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, ": unknown RegexOptions option: '", in set_regexoptions()
1934 cmd->argv[i], "'", NULL)); in set_regexoptions()
1938 c = add_config_param(cmd->argv[0], 2, NULL, NULL); in set_regexoptions()
1944 return PR_HANDLED(cmd); in set_regexoptions()
1947 MODRET set_syslogfacility(cmd_rec *cmd) { in set_syslogfacility() argument
1978 CHECK_ARGS(cmd, 1); in set_syslogfacility()
1979 CHECK_CONF(cmd, CONF_ROOT); in set_syslogfacility()
1982 if (strcasecmp(cmd->argv[1], factable[i].name) == 0) { in set_syslogfacility()
1990 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "unable to open syslog: ", in set_syslogfacility()
1996 CONF_ERROR(cmd, in set_syslogfacility()
2002 CONF_ERROR(cmd, "you are attempting to log to a symbolic link"); in set_syslogfacility()
2010 return PR_HANDLED(cmd); in set_syslogfacility()
2014 CONF_ERROR(cmd, "argument must be a valid syslog facility"); in set_syslogfacility()
2017 MODRET set_timesgmt(cmd_rec *cmd) { in set_timesgmt() argument
2021 CHECK_ARGS(cmd, 1); in set_timesgmt()
2022 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON); in set_timesgmt()
2024 bool = get_boolean(cmd, 1); in set_timesgmt()
2026 CONF_ERROR(cmd, "expected Boolean parameter"); in set_timesgmt()
2029 c = add_config_param(cmd->argv[0], 1, NULL); in set_timesgmt()
2034 return PR_HANDLED(cmd); in set_timesgmt()
2037 MODRET set_regex(cmd_rec *cmd, char *param, char *type) { in set_regex() argument
2043 if (cmd->argc-1 < 1 || in set_regex()
2044 cmd->argc-1 > 2) { in set_regex()
2045 CONF_ERROR(cmd, "bad number of parameters"); in set_regex()
2048 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON|CONF_DIR| in set_regex()
2052 if (cmd->argc-1 == 2) { in set_regex()
2059 flags = pr_filter_parse_flags(cmd->tmp_pool, cmd->argv[2]); in set_regex()
2061 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_regex()
2062 "badly formatted flags parameter: '", cmd->argv[2], "'", NULL)); in set_regex()
2066 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_regex()
2067 "unknown filter flags '", cmd->argv[2], "'", NULL)); in set_regex()
2073 pr_log_debug(DEBUG4, "%s: compiling %s regex '%s'", (char *) cmd->argv[0], in set_regex()
2074 type, (char *) cmd->argv[1]); in set_regex()
2077 res = pr_regexp_compile(pre, cmd->argv[1], regex_flags); in set_regex()
2084 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "'", (char *) cmd->argv[1], in set_regex()
2090 return PR_HANDLED(cmd); in set_regex()
2093 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "The ", param, " directive cannot be " in set_regex()
2099 MODRET set_allowdenyfilter(cmd_rec *cmd) { in set_allowdenyfilter() argument
2105 if (cmd->argc-1 < 1 || in set_allowdenyfilter()
2106 cmd->argc-1 > 2) { in set_allowdenyfilter()
2107 CONF_ERROR(cmd, "bad number of parameters"); in set_allowdenyfilter()
2110 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON|CONF_DIR| in set_allowdenyfilter()
2114 if (cmd->argc-1 == 2) { in set_allowdenyfilter()
2121 flags = pr_filter_parse_flags(cmd->tmp_pool, cmd->argv[2]); in set_allowdenyfilter()
2123 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_allowdenyfilter()
2124 "badly formatted flags parameter: '", cmd->argv[2], "'", NULL)); in set_allowdenyfilter()
2128 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in set_allowdenyfilter()
2129 "unknown filter flags '", cmd->argv[2], "'", NULL)); in set_allowdenyfilter()
2135 pr_log_debug(DEBUG4, "%s: compiling regex '%s'", (char *) cmd->argv[0], in set_allowdenyfilter()
2136 (char *) cmd->argv[1]); in set_allowdenyfilter()
2139 res = pr_regexp_compile(pre, cmd->argv[1], regex_flags); in set_allowdenyfilter()
2146 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "'", (char *) cmd->argv[1], in set_allowdenyfilter()
2150 c = add_config_param(cmd->argv[0], 1, pre); in set_allowdenyfilter()
2152 return PR_HANDLED(cmd); in set_allowdenyfilter()
2155 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "The ", cmd->argv[0], in set_allowdenyfilter()
2161 MODRET set_passiveports(cmd_rec *cmd) { in set_passiveports() argument
2165 CHECK_ARGS(cmd, 2); in set_passiveports()
2166 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_passiveports()
2168 pasv_min_port = atoi(cmd->argv[1]); in set_passiveports()
2169 pasv_max_port = atoi(cmd->argv[2]); in set_passiveports()
2174 CONF_ERROR(cmd, "min port must be allowable port number"); in set_passiveports()
2179 CONF_ERROR(cmd, "max port must be allowable port number"); in set_passiveports()
2184 CONF_ERROR(cmd, "port numbers must be above 1023"); in set_passiveports()
2188 CONF_ERROR(cmd, "min port must be less than max port"); in set_passiveports()
2191 c = add_config_param(cmd->argv[0], 2, NULL, NULL); in set_passiveports()
2197 return PR_HANDLED(cmd); in set_passiveports()
2200 MODRET set_pathallowfilter(cmd_rec *cmd) { in set_pathallowfilter() argument
2201 return set_regex(cmd, cmd->argv[0], "allow"); in set_pathallowfilter()
2204 MODRET set_pathdenyfilter(cmd_rec *cmd) { in set_pathdenyfilter() argument
2205 return set_regex(cmd, cmd->argv[0], "deny"); in set_pathdenyfilter()
2209 MODRET set_allowforeignaddress(cmd_rec *cmd) { in set_allowforeignaddress() argument
2214 CHECK_ARGS(cmd, 1); in set_allowforeignaddress()
2215 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON); in set_allowforeignaddress()
2217 bool = get_boolean(cmd, 1); in set_allowforeignaddress()
2220 class_name = cmd->argv[1]; in set_allowforeignaddress()
2223 c = add_config_param(cmd->argv[0], 2, NULL, NULL); in set_allowforeignaddress()
2229 return PR_HANDLED(cmd); in set_allowforeignaddress()
2232 MODRET set_commandbuffersize(cmd_rec *cmd) { in set_commandbuffersize() argument
2238 if (cmd->argc < 2 || cmd->argc > 3) { in set_commandbuffersize()
2239 CONF_ERROR(cmd, "wrong number of parameters") in set_commandbuffersize()
2242 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_commandbuffersize()
2244 if (cmd->argc == 3) { in set_commandbuffersize()
2245 units = cmd->argv[2]; in set_commandbuffersize()
2248 if (pr_str_get_nbytes(cmd->argv[1], units, &nbytes) < 0) { in set_commandbuffersize()
2249 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "unable to parse: ", in set_commandbuffersize()
2250 cmd->argv[1], " ", units ? units : "", ": ", strerror(errno), NULL)); in set_commandbuffersize()
2260 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "size ", cmd->argv[1], in set_commandbuffersize()
2267 c = add_config_param(cmd->argv[0], 1, NULL); in set_commandbuffersize()
2271 return PR_HANDLED(cmd); in set_commandbuffersize()
2274 MODRET set_cdpath(cmd_rec *cmd) { in set_cdpath() argument
2277 CHECK_ARGS(cmd, 1); in set_cdpath()
2278 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON); in set_cdpath()
2280 c = add_config_param_str(cmd->argv[0], 1, cmd->argv[1]); in set_cdpath()
2283 return PR_HANDLED(cmd); in set_cdpath()
2286 MODRET add_directory(cmd_rec *cmd) { in add_directory() argument
2291 CHECK_ARGS(cmd, 1); in add_directory()
2292 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON); in add_directory()
2294 dir = cmd->argv[1]; in add_directory()
2298 (!cmd->config || in add_directory()
2299 cmd->config->config_type != CONF_ANON)) { in add_directory()
2300 CONF_ERROR(cmd, "relative path not allowed in non-<Anonymous> sections"); in add_directory()
2309 if (cmd->config && in add_directory()
2310 cmd->config->config_type == CONF_ANON && in add_directory()
2314 dir = pdircat(cmd->tmp_pool, "/", dir, NULL); in add_directory()
2316 rootdir = cmd->config->name; in add_directory()
2334 if (!check_context(cmd, CONF_ANON) && in add_directory()
2335 find_config(cmd->server->conf, CONF_DIR, dir, FALSE) != NULL) { in add_directory()
2336 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, in add_directory()
2337 "<Directory> section already configured for '", cmd->argv[1], "'", NULL)); in add_directory()
2363 "path '%s'", (char *) cmd->argv[1], dir); in add_directory()
2367 "<Directory %s>: deferring resolution of path", (char *) cmd->argv[1]); in add_directory()
2370 return PR_HANDLED(cmd); in add_directory()
2373 MODRET set_hidefiles(cmd_rec *cmd) { in set_hidefiles() argument
2381 int ctxt = (cmd->config && cmd->config->config_type != CONF_PARAM ? in set_hidefiles()
2382 cmd->config->config_type : cmd->server->config_type ? in set_hidefiles()
2383 cmd->server->config_type : CONF_ROOT); in set_hidefiles()
2386 if (cmd->argc-1 != 1 && in set_hidefiles()
2387 cmd->argc-1 != 3) { in set_hidefiles()
2388 CONF_ERROR(cmd, "wrong number of parameters"); in set_hidefiles()
2391 CHECK_CONF(cmd, CONF_DIR|CONF_DYNDIR); in set_hidefiles()
2404 ptr = cmd->argv[1]; in set_hidefiles()
2430 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "'", ptr, in set_hidefiles()
2439 if (cmd->argc-1 == 3) { in set_hidefiles()
2440 if (strncmp(cmd->argv[2], "user", 5) == 0 || in set_hidefiles()
2441 strncmp(cmd->argv[2], "group", 6) == 0 || in set_hidefiles()
2442 strncmp(cmd->argv[2], "class", 6) == 0) { in set_hidefiles()
2447 return PR_ERROR_MSG(cmd, NULL, pstrcat(cmd->tmp_pool, cmd->argv[0], in set_hidefiles()
2448 "unknown classifier used: '", cmd->argv[2], "'", NULL)); in set_hidefiles()
2452 if (cmd->argc-1 == 1) { in set_hidefiles()
2453 c = add_config_param(cmd->argv[0], 3, NULL, NULL, NULL); in set_hidefiles()
2461 } else if (cmd->argc-1 == 3) { in set_hidefiles()
2463 unsigned int argc = cmd->argc - 3; in set_hidefiles()
2466 argv = &(cmd->argv[2]); in set_hidefiles()
2468 acl = pr_expr_create(cmd->tmp_pool, &argc, (char **) argv); in set_hidefiles()
2470 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error creating expression: ", in set_hidefiles()
2474 c = add_config_param(cmd->argv[0], 0); in set_hidefiles()
2501 *argv++ = pstrdup(c->pool, cmd->argv[2]); in set_hidefiles()
2516 return PR_HANDLED(cmd); in set_hidefiles()
2519 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "The HideFiles directive cannot be " in set_hidefiles()
2525 MODRET set_hidenoaccess(cmd_rec *cmd) { in set_hidenoaccess() argument
2529 CHECK_ARGS(cmd, 1); in set_hidenoaccess()
2530 CHECK_CONF(cmd, CONF_ANON|CONF_DIR); in set_hidenoaccess()
2532 bool = get_boolean(cmd, 1); in set_hidenoaccess()
2534 CONF_ERROR(cmd, "expected Boolean parameter"); in set_hidenoaccess()
2537 c = add_config_param(cmd->argv[0], 1, NULL); in set_hidenoaccess()
2542 return PR_HANDLED(cmd); in set_hidenoaccess()
2545 MODRET set_hideuser(cmd_rec *cmd) { in set_hideuser() argument
2550 CHECK_ARGS(cmd, 1); in set_hideuser()
2551 CHECK_CONF(cmd, CONF_ANON|CONF_DIR); in set_hideuser()
2553 user = cmd->argv[1]; in set_hideuser()
2559 c = add_config_param(cmd->argv[0], 2, NULL, NULL); in set_hideuser()
2565 return PR_HANDLED(cmd); in set_hideuser()
2568 MODRET set_hidegroup(cmd_rec *cmd) { in set_hidegroup() argument
2573 CHECK_ARGS(cmd, 1); in set_hidegroup()
2574 CHECK_CONF(cmd, CONF_ANON|CONF_DIR); in set_hidegroup()
2576 group = cmd->argv[1]; in set_hidegroup()
2582 c = add_config_param(cmd->argv[0], 2, NULL, NULL); in set_hidegroup()
2588 return PR_HANDLED(cmd); in set_hidegroup()
2591 MODRET add_groupowner(cmd_rec *cmd) { in add_groupowner() argument
2594 CHECK_ARGS(cmd, 1); in add_groupowner()
2595 CHECK_CONF(cmd, CONF_ANON|CONF_DIR|CONF_DYNDIR); in add_groupowner()
2597 c = add_config_param_str(cmd->argv[0], 1, cmd->argv[1]); in add_groupowner()
2600 return PR_HANDLED(cmd); in add_groupowner()
2603 MODRET add_userowner(cmd_rec *cmd) { in add_userowner() argument
2606 CHECK_ARGS(cmd, 1); in add_userowner()
2607 CHECK_CONF(cmd, CONF_ANON|CONF_DIR); in add_userowner()
2609 c = add_config_param_str(cmd->argv[0], 1, cmd->argv[1]); in add_userowner()
2612 return PR_HANDLED(cmd); in add_userowner()
2615 MODRET set_allowoverride(cmd_rec *cmd) { in set_allowoverride() argument
2620 int ctxt = (cmd->config && cmd->config->config_type != CONF_PARAM ? in set_allowoverride()
2621 cmd->config->config_type : cmd->server->config_type ? in set_allowoverride()
2622 cmd->server->config_type : CONF_ROOT); in set_allowoverride()
2627 if (cmd->argc-1 == 3) { in set_allowoverride()
2628 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "Please use mod_ifsession for " in set_allowoverride()
2632 CHECK_ARGS(cmd, 1); in set_allowoverride()
2633 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON|CONF_DIR); in set_allowoverride()
2635 bool = get_boolean(cmd, 1); in set_allowoverride()
2637 CONF_ERROR(cmd, "expected Boolean parameter"); in set_allowoverride()
2657 c = add_config_param(cmd->argv[0], 2, NULL, NULL); in set_allowoverride()
2664 return PR_HANDLED(cmd); in set_allowoverride()
2667 MODRET end_directory(cmd_rec *cmd) { in end_directory() argument
2670 if (cmd->argc > 1) { in end_directory()
2671 CONF_ERROR(cmd, "wrong number of parameters"); in end_directory()
2674 CHECK_CONF(cmd, CONF_DIR); in end_directory()
2679 pr_log_debug(DEBUG3, "%s: ignoring empty section", (char *) cmd->argv[0]); in end_directory()
2682 return PR_HANDLED(cmd); in end_directory()
2685 MODRET add_anonymous(cmd_rec *cmd) { in add_anonymous() argument
2689 CHECK_ARGS(cmd, 1); in add_anonymous()
2690 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in add_anonymous()
2692 dir = cmd->argv[1]; in add_anonymous()
2695 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "(", dir, ") absolute pathname " in add_anonymous()
2700 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "(", dir, ") wildcards not allowed " in add_anonymous()
2705 CONF_ERROR(cmd, "'/' not permitted for anonymous root directory"); in add_anonymous()
2709 dir = pstrcat(cmd->tmp_pool, dir, "/", NULL); in add_anonymous()
2713 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, cmd->argv[1], ": ", in add_anonymous()
2720 return PR_HANDLED(cmd); in add_anonymous()
2723 MODRET end_anonymous(cmd_rec *cmd) { in end_anonymous() argument
2726 if (cmd->argc > 1) { in end_anonymous()
2727 CONF_ERROR(cmd, "wrong number of parameters"); in end_anonymous()
2730 CHECK_CONF(cmd, CONF_ANON); in end_anonymous()
2735 pr_log_debug(DEBUG3, "%s: ignoring empty section", (char *) cmd->argv[0]); in end_anonymous()
2738 return PR_HANDLED(cmd); in end_anonymous()
2741 MODRET add_class(cmd_rec *cmd) { in add_class() argument
2742 CHECK_ARGS(cmd, 1); in add_class()
2743 CHECK_CONF(cmd, CONF_ROOT); in add_class()
2745 if (pr_class_open(main_server->pool, cmd->argv[1]) < 0) { in add_class()
2746 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error creating <Class ", in add_class()
2747 cmd->argv[1], ">: ", strerror(errno), NULL)); in add_class()
2750 return PR_HANDLED(cmd); in add_class()
2753 MODRET end_class(cmd_rec *cmd) { in end_class() argument
2754 if (cmd->argc > 1) { in end_class()
2755 CONF_ERROR(cmd, "wrong number of parameters"); in end_class()
2758 CHECK_CONF(cmd, CONF_CLASS); in end_class()
2764 return PR_HANDLED(cmd); in end_class()
2767 MODRET add_global(cmd_rec *cmd) { in add_global() argument
2770 if (cmd->argc-1 != 0) { in add_global()
2771 CONF_ERROR(cmd, "Too many parameters"); in add_global()
2774 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL); in add_global()
2776 c = pr_parser_config_ctxt_open(cmd->argv[0]); in add_global()
2779 return PR_HANDLED(cmd); in add_global()
2782 MODRET end_global(cmd_rec *cmd) { in end_global() argument
2785 if (cmd->argc > 1) { in end_global()
2786 CONF_ERROR(cmd, "wrong number of parameters"); in end_global()
2789 CHECK_CONF(cmd, CONF_GLOBAL); in end_global()
2794 pr_log_debug(DEBUG3, "%s: ignoring empty section", (char *) cmd->argv[0]); in end_global()
2797 return PR_HANDLED(cmd); in end_global()
2800 MODRET add_limit(cmd_rec *cmd) { in add_limit() argument
2809 if (cmd->argc < 2) { in add_limit()
2810 CONF_ERROR(cmd, "directive requires one or more commands"); in add_limit()
2813 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_DIR|CONF_ANON|CONF_DYNDIR|CONF_GLOBAL); in add_limit()
2817 cargc = cmd->argc; in add_limit()
2818 cargv = cmd->argv; in add_limit()
2825 str = pstrdup(cmd->tmp_pool, *((char **) cargv)); in add_limit()
2909 return PR_HANDLED(cmd); in add_limit()
2912 MODRET set_order(cmd_rec *cmd) { in set_order() argument
2917 if (cmd->argc != 2 && in set_order()
2918 cmd->argc != 3) { in set_order()
2919 CONF_ERROR(cmd, "wrong number of parameters"); in set_order()
2921 CHECK_CONF(cmd, CONF_LIMIT); in set_order()
2923 if (cmd->argc == 2) { in set_order()
2924 arg = cmd->argv[1]; in set_order()
2928 arg = pstrcat(cmd->tmp_pool, arg, (char *) cmd->argv[1], in set_order()
2929 (char *) cmd->argv[2], NULL); in set_order()
2939 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "'", arg, "': invalid argument", in set_order()
2943 c = add_config_param(cmd->argv[0], 1, NULL); in set_order()
2947 return PR_HANDLED(cmd); in set_order()
2950 MODRET set_allowdenyusergroupclass(cmd_rec *cmd) { in set_allowdenyusergroupclass() argument
2957 CHECK_CONF(cmd, CONF_LIMIT); in set_allowdenyusergroupclass()
2959 if (cmd->argc < 2) { in set_allowdenyusergroupclass()
2960 CONF_ERROR(cmd, "wrong number of parameters"); in set_allowdenyusergroupclass()
2966 if (strncmp(cmd->argv[0], "AllowClass", 11) == 0 || in set_allowdenyusergroupclass()
2967 strncmp(cmd->argv[0], "AllowUser", 10) == 0 || in set_allowdenyusergroupclass()
2968 strncmp(cmd->argv[0], "DenyClass", 10) == 0 || in set_allowdenyusergroupclass()
2969 strncmp(cmd->argv[0], "DenyUser", 9) == 0) { in set_allowdenyusergroupclass()
2977 if (cmd->argc > 2) { in set_allowdenyusergroupclass()
2981 if (strcasecmp(cmd->argv[1], "AND") == 0) { in set_allowdenyusergroupclass()
2983 argc = cmd->argc-2; in set_allowdenyusergroupclass()
2984 argv = cmd->argv; in set_allowdenyusergroupclass()
2986 } else if (strcasecmp(cmd->argv[1], "OR") == 0) { in set_allowdenyusergroupclass()
2988 argc = cmd->argc-2; in set_allowdenyusergroupclass()
2989 argv = cmd->argv+1; in set_allowdenyusergroupclass()
2991 } else if (strcasecmp(cmd->argv[1], "regex") == 0) { in set_allowdenyusergroupclass()
2996 if (cmd->argc != 3) { in set_allowdenyusergroupclass()
2997 CONF_ERROR(cmd, "wrong number of parameters"); in set_allowdenyusergroupclass()
3002 res = pr_regexp_compile_posix(pre, cmd->argv[2], REG_EXTENDED|REG_NOSUB); in set_allowdenyusergroupclass()
3009 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "'", (char *) cmd->argv[2], in set_allowdenyusergroupclass()
3013 c = add_config_param(cmd->argv[0], 2, NULL, NULL); in set_allowdenyusergroupclass()
3019 return PR_HANDLED(cmd); in set_allowdenyusergroupclass()
3021 CONF_ERROR(cmd, "The 'regex' parameter cannot be used on this system, " in set_allowdenyusergroupclass()
3026 argc = cmd->argc-1; in set_allowdenyusergroupclass()
3027 argv = cmd->argv; in set_allowdenyusergroupclass()
3031 argc = cmd->argc-1; in set_allowdenyusergroupclass()
3032 argv = cmd->argv; in set_allowdenyusergroupclass()
3035 acl = pr_expr_create(cmd->tmp_pool, &argc, (char **) argv); in set_allowdenyusergroupclass()
3037 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error creating expression: ", in set_allowdenyusergroupclass()
3041 c = add_config_param(cmd->argv[0], 0); in set_allowdenyusergroupclass()
3061 return PR_HANDLED(cmd); in set_allowdenyusergroupclass()
3064 MODRET set_allowdeny(cmd_rec *cmd) { in set_allowdeny() argument
3071 CHECK_CONF(cmd, CONF_LIMIT); in set_allowdeny()
3074 list = make_array(cmd->tmp_pool, cmd->argc, sizeof(pr_netacl_t *)); in set_allowdeny()
3075 argc = cmd->argc-1; in set_allowdeny()
3076 argv = cmd->argv; in set_allowdeny()
3078 c = add_config_param(cmd->argv[0], 0); in set_allowdeny()
3092 CONF_ERROR(cmd, "the ! negation operator cannot be used with ALL/NONE"); in set_allowdeny()
3107 char *s = pstrdup(cmd->tmp_pool, *argv); in set_allowdeny()
3123 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "bad ACL definition '", in set_allowdeny()
3128 pr_netacl_get_str(cmd->tmp_pool, acl)); in set_allowdeny()
3136 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "syntax: ", cmd->argv[0], in set_allowdeny()
3149 return PR_HANDLED(cmd); in set_allowdeny()
3152 MODRET set_denyall(cmd_rec *cmd) { in set_denyall() argument
3155 if (cmd->argc > 1) { in set_denyall()
3156 CONF_ERROR(cmd, "wrong number of parameters"); in set_denyall()
3159 CHECK_CONF(cmd, CONF_LIMIT|CONF_ANON|CONF_DIR|CONF_DYNDIR); in set_denyall()
3161 c = add_config_param(cmd->argv[0], 1, NULL); in set_denyall()
3165 return PR_HANDLED(cmd); in set_denyall()
3168 MODRET set_allowall(cmd_rec *cmd) { in set_allowall() argument
3171 if (cmd->argc > 1) { in set_allowall()
3172 CONF_ERROR(cmd, "wrong number of parameters"); in set_allowall()
3175 CHECK_CONF(cmd, CONF_LIMIT|CONF_ANON|CONF_DIR|CONF_DYNDIR); in set_allowall()
3177 c = add_config_param(cmd->argv[0], 1, NULL); in set_allowall()
3181 return PR_HANDLED(cmd); in set_allowall()
3184 MODRET set_authorder(cmd_rec *cmd) { in set_authorder() argument
3189 CHECK_ARGS(cmd, 1); in set_authorder()
3190 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_authorder()
3193 if (find_config(cmd->server->conf, CONF_PARAM, cmd->argv[0], FALSE)) { in set_authorder()
3194 CONF_ERROR(cmd, "AuthOrder has already been configured"); in set_authorder()
3197 c = add_config_param(cmd->argv[0], 1, NULL); in set_authorder()
3200 for (i = 1; i < cmd->argc; i++) { in set_authorder()
3201 *((char **) push_array(module_list)) = pstrdup(c->pool, cmd->argv[i]); in set_authorder()
3205 return PR_HANDLED(cmd); in set_authorder()
3208 MODRET end_limit(cmd_rec *cmd) { in end_limit() argument
3211 if (cmd->argc > 1) { in end_limit()
3212 CONF_ERROR(cmd, "wrong number of parameters"); in end_limit()
3215 CHECK_CONF(cmd, CONF_LIMIT); in end_limit()
3220 pr_log_debug(DEBUG3, "%s: ignoring empty section", (char *) cmd->argv[0]); in end_limit()
3223 return PR_HANDLED(cmd); in end_limit()
3226 MODRET set_ignorehidden(cmd_rec *cmd) { in set_ignorehidden() argument
3230 CHECK_ARGS(cmd, 1); in set_ignorehidden()
3231 CHECK_CONF(cmd, CONF_LIMIT); in set_ignorehidden()
3233 bool = get_boolean(cmd, 1); in set_ignorehidden()
3235 CONF_ERROR(cmd, "expected Boolean parameter"); in set_ignorehidden()
3238 c = add_config_param(cmd->argv[0], 1, NULL); in set_ignorehidden()
3242 return PR_HANDLED(cmd); in set_ignorehidden()
3246 MODRET set_displaychdir(cmd_rec *cmd) { in set_displaychdir() argument
3250 if (cmd->argc-1 < 1 || in set_displaychdir()
3251 cmd->argc-1 > 2) { in set_displaychdir()
3252 CONF_ERROR(cmd, "wrong number of parameters"); in set_displaychdir()
3255 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON|CONF_DIR); in set_displaychdir()
3257 if (cmd->argc-1 == 2) { in set_displaychdir()
3258 bool = get_boolean(cmd, 2); in set_displaychdir()
3260 CONF_ERROR(cmd, "expected Boolean parameter"); in set_displaychdir()
3264 c = add_config_param(cmd->argv[0], 2, NULL, NULL); in set_displaychdir()
3265 c->argv[0] = pstrdup(c->pool, cmd->argv[1]); in set_displaychdir()
3270 return PR_HANDLED(cmd); in set_displaychdir()
3273 MODRET set_displayconnect(cmd_rec *cmd) { in set_displayconnect() argument
3274 CHECK_ARGS(cmd, 1); in set_displayconnect()
3275 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_displayconnect()
3277 add_config_param_str(cmd->argv[0], 1, cmd->argv[1]); in set_displayconnect()
3278 return PR_HANDLED(cmd); in set_displayconnect()
3281 MODRET set_displayquit(cmd_rec *cmd) { in set_displayquit() argument
3284 CHECK_ARGS(cmd, 1); in set_displayquit()
3285 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL|CONF_ANON); in set_displayquit()
3287 c = add_config_param_str(cmd->argv[0], 1, cmd->argv[1]); in set_displayquit()
3290 return PR_HANDLED(cmd); in set_displayquit()
3293 MODRET add_virtualhost(cmd_rec *cmd) { in add_virtualhost() argument
3300 if (cmd->argc-1 < 1) { in add_virtualhost()
3301 CONF_ERROR(cmd, "wrong number of parameters"); in add_virtualhost()
3303 CHECK_CONF(cmd, CONF_ROOT); in add_virtualhost()
3305 name = cmd->argv[1]; in add_virtualhost()
3308 CONF_ERROR(cmd, "unable to create virtual server configuration"); in add_virtualhost()
3317 addr = pr_netaddr_get_addr2(cmd->tmp_pool, name, &addrs, addr_flags); in add_virtualhost()
3319 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error resolving '", name, "': ", in add_virtualhost()
3356 if (cmd->argc-1 > 1) { in add_virtualhost()
3359 for (i = 2; i < cmd->argc; i++) { in add_virtualhost()
3362 name = cmd->argv[i]; in add_virtualhost()
3363 addr = pr_netaddr_get_addr2(cmd->tmp_pool, name, &addrs, addr_flags); in add_virtualhost()
3365 CONF_ERROR(cmd, pstrcat(cmd->tmp_pool, "error resolving '", name, "': ", in add_virtualhost()
3401 return PR_HANDLED(cmd); in add_virtualhost()
3404 MODRET end_virtualhost(cmd_rec *cmd) { in end_virtualhost() argument
3410 if (cmd->argc > 1) { in end_virtualhost()
3411 CONF_ERROR(cmd, "wrong number of parameters"); in end_virtualhost()
3414 CHECK_CONF(cmd, CONF_VIRTUAL); in end_virtualhost()
3416 if (cmd->server->ServerAddress) { in end_virtualhost()
3417 address = cmd->server->ServerAddress; in end_virtualhost()
3420 address = pr_netaddr_get_localaddr_str(cmd->tmp_pool); in end_virtualhost()
3426 addr = pr_netaddr_get_addr2(cmd->tmp_pool, address, NULL, addr_flags); in end_virtualhost()
3443 if (s != cmd->server) { in end_virtualhost()
3452 pr_netaddr_get_localaddr_str(cmd->tmp_pool); in end_virtualhost()
3454 serv_addr = pr_netaddr_get_addr2(cmd->tmp_pool, serv_addrstr, NULL, in end_virtualhost()
3463 cmd->server->ServerPort == s->ServerPort) { in end_virtualhost()
3470 c = find_config(cmd->server->conf, CONF_PARAM, "ServerAlias", FALSE); in end_virtualhost()
3474 cmd->server->ServerName ? cmd->server->ServerName : "ProFTPD", in end_virtualhost()
3475 pr_netaddr_get_ipstr(addr), cmd->server->ServerPort, in end_virtualhost()
3478 if (xaset_remove(server_list, (xasetmember_t *) cmd->server) == 1) { in end_virtualhost()
3479 destroy_pool(cmd->server->pool); in end_virtualhost()
3490 CONF_ERROR(cmd, "must have matching <VirtualHost> directive"); in end_virtualhost()
3493 return PR_HANDLED(cmd); in end_virtualhost()
3497 MODRET regex_filters(cmd_rec *cmd) { in regex_filters() argument
3503 if (strcasecmp(cmd->argv[0], C_PASS) == 0) { in regex_filters()
3504 return PR_DECLINED(cmd); in regex_filters()
3510 cmd->arg != NULL && in regex_filters()
3511 pr_regexp_exec(allow_regex, cmd->arg, 0, NULL, 0, 0, 0) != 0) { in regex_filters()
3512 pr_log_debug(DEBUG2, "'%s %s' denied by AllowFilter", (char *) cmd->argv[0], in regex_filters()
3513 cmd->arg); in regex_filters()
3514 pr_response_add_err(R_550, _("%s: Forbidden command argument"), cmd->arg); in regex_filters()
3516 pr_cmd_set_errno(cmd, EACCES); in regex_filters()
3518 return PR_ERROR(cmd); in regex_filters()
3524 cmd->arg != NULL && in regex_filters()
3525 pr_regexp_exec(deny_regex, cmd->arg, 0, NULL, 0, 0, 0) == 0) { in regex_filters()
3526 pr_log_debug(DEBUG2, "'%s %s' denied by DenyFilter", (char *) cmd->argv[0], in regex_filters()
3527 cmd->arg); in regex_filters()
3528 pr_response_add_err(R_550, _("%s: Forbidden command argument"), cmd->arg); in regex_filters()
3530 pr_cmd_set_errno(cmd, EACCES); in regex_filters()
3532 return PR_ERROR(cmd); in regex_filters()
3535 return PR_DECLINED(cmd); in regex_filters()
3539 MODRET core_pre_any(cmd_rec *cmd) { in core_pre_any() argument
3544 cmd_delay = core_exceeded_cmd_rate(cmd); in core_pre_any()
3580 if (pr_cmd_cmp(cmd, PR_CMD_RNTO_ID) != 0 && in core_pre_any()
3581 pr_cmd_cmp(cmd, PR_CMD_HELP_ID) != 0 && in core_pre_any()
3582 pr_cmd_cmp(cmd, PR_CMD_NOOP_ID) != 0 && in core_pre_any()
3583 pr_cmd_cmp(cmd, PR_CMD_QUIT_ID) != 0 && in core_pre_any()
3584 pr_cmd_cmp(cmd, PR_CMD_STAT_ID) != 0) { in core_pre_any()
3591 if (pr_cmd_cmp(cmd, PR_CMD_CCC_ID) == 0 || in core_pre_any()
3592 pr_cmd_cmp(cmd, PR_CMD_CONF_ID) == 0 || in core_pre_any()
3593 pr_cmd_cmp(cmd, PR_CMD_ENC_ID) == 0 || in core_pre_any()
3594 pr_cmd_cmp(cmd, PR_CMD_MIC_ID) == 0 || in core_pre_any()
3595 pr_cmd_cmp(cmd, PR_CMD_PBSZ_ID) == 0 || in core_pre_any()
3596 pr_cmd_cmp(cmd, PR_CMD_PROT_ID) == 0) { in core_pre_any()
3604 (char *) cmd->argv[0]); in core_pre_any()
3607 pr_cmd_set_errno(cmd, EPERM); in core_pre_any()
3609 return PR_ERROR(cmd); in core_pre_any()
3614 return PR_DECLINED(cmd); in core_pre_any()
3617 MODRET core_quit(cmd_rec *cmd) { in core_quit() argument
3655 return PR_HANDLED(cmd); in core_quit()
3658 MODRET core_log_quit(cmd_rec *cmd) { in core_log_quit() argument
3667 return PR_HANDLED(cmd); in core_log_quit()
3670 MODRET core_pwd(cmd_rec *cmd) { in core_pwd() argument
3671 CHECK_CMD_ARGS(cmd, 1); in core_pwd()
3673 if (!dir_check(cmd->tmp_pool, cmd, cmd->group, session.vwd, NULL)) { in core_pwd()
3676 pr_response_add_err(R_550, "%s: %s", (char *) cmd->argv[0], in core_pwd()
3679 pr_cmd_set_errno(cmd, xerrno); in core_pwd()
3681 return PR_ERROR(cmd); in core_pwd()
3685 quote_dir(cmd->tmp_pool, pr_fs_encode_path(cmd->tmp_pool, session.vwd))); in core_pwd()
3687 return PR_HANDLED(cmd); in core_pwd()
3690 MODRET core_pasv(cmd_rec *cmd) { in core_pasv() argument
3700 pr_cmd_set_errno(cmd, EPERM); in core_pasv()
3702 return PR_ERROR(cmd); in core_pasv()
3705 CHECK_CMD_ARGS(cmd, 1); in core_pasv()
3710 if (!dir_check(cmd->tmp_pool, cmd, cmd->group, session.cwd, NULL)) { in core_pasv()
3714 pr_response_add_err(R_501, "%s: %s", (char *) cmd->argv[0], in core_pasv()
3717 pr_cmd_set_errno(cmd, xerrno); in core_pasv()
3719 return PR_ERROR(cmd); in core_pasv()
3758 bind_addr = pr_netaddr_v6tov4(cmd->pool, session.c->local_addr); in core_pasv()
3790 pr_cmd_set_errno(cmd, EINVAL); in core_pasv()
3792 return PR_ERROR(cmd); in core_pasv()
3807 pr_response_add_err(R_425, "%s: %s", (char *) cmd->argv[0], in core_pasv()
3810 pr_cmd_set_errno(cmd, xerrno); in core_pasv()
3812 return PR_ERROR(cmd); in core_pasv()
3876 return PR_HANDLED(cmd); in core_pasv()
3879 MODRET core_port(cmd_rec *cmd) { in core_port() argument
3896 pr_cmd_set_errno(cmd, EPERM); in core_port()
3898 return PR_ERROR(cmd); in core_port()
3901 CHECK_CMD_ARGS(cmd, 2); in core_port()
3906 if (!dir_check(cmd->tmp_pool, cmd, cmd->group, session.cwd, NULL)) { in core_port()
3910 pr_response_add_err(R_501, "%s: %s", (char *) cmd->argv[0], in core_port()
3913 pr_cmd_set_errno(cmd, xerrno); in core_port()
3915 return PR_ERROR(cmd); in core_port()
3934 pr_cmd_set_errno(cmd, EPERM); in core_port()
3936 return PR_ERROR(cmd); in core_port()
3940 port_info = cmd->argv[1]; in core_port()
3946 pr_cmd_set_errno(cmd, EPERM); in core_port()
3948 return PR_ERROR(cmd); in core_port()
3953 pr_log_debug(DEBUG2, "PORT '%s' has invalid value(s)", cmd->arg); in core_port()
3956 pr_cmd_set_errno(cmd, EPERM); in core_port()
3958 return PR_ERROR(cmd); in core_port()
3976 port_addr = pr_netaddr_get_addr(cmd->tmp_pool, buf, NULL); in core_port()
3982 pr_cmd_set_errno(cmd, EPERM); in core_port()
3984 return PR_ERROR(cmd); in core_port()
4025 port_addr = pr_netaddr_dup(cmd->tmp_pool, session.c->remote_addr); in core_port()
4058 if (pr_class_satisfied(cmd->tmp_pool, cls, port_addr) == TRUE) { in core_port()
4085 "Refused PORT %s (IPv4/IPv6 address mismatch)", cmd->arg); in core_port()
4088 pr_cmd_set_errno(cmd, EPERM); in core_port()
4090 return PR_ERROR(cmd); in core_port()
4097 cmd->arg); in core_port()
4100 pr_cmd_set_errno(cmd, EPERM); in core_port()
4102 return PR_ERROR(cmd); in core_port()
4114 "Refused PORT %s (port %d below 1024, possible bounce attack)", cmd->arg, in core_port()
4118 pr_cmd_set_errno(cmd, EPERM); in core_port()
4120 return PR_ERROR(cmd); in core_port()
4136 return PR_HANDLED(cmd); in core_port()
4139 MODRET core_eprt(cmd_rec *cmd) { in core_eprt() argument
4145 char delim = '\0', *argstr = pstrdup(cmd->tmp_pool, cmd->argv[1]); in core_eprt()
4153 pr_cmd_set_errno(cmd, EPERM); in core_eprt()
4155 return PR_ERROR(cmd); in core_eprt()
4158 CHECK_CMD_ARGS(cmd, 2); in core_eprt()
4163 if (!dir_check(cmd->tmp_pool, cmd, cmd->group, session.cwd, NULL)) { in core_eprt()
4167 pr_response_add_err(R_501, "%s: %s", (char *) cmd->argv[0], in core_eprt()
4170 pr_cmd_set_errno(cmd, xerrno); in core_eprt()
4172 return PR_ERROR(cmd); in core_eprt()
4194 pr_cmd_set_errno(cmd, EPERM); in core_eprt()
4196 return PR_ERROR(cmd); in core_eprt()
4233 pr_cmd_set_errno(cmd, EINVAL); in core_eprt()
4235 return PR_ERROR(cmd); in core_eprt()
4252 pr_cmd_set_errno(cmd, EPERM); in core_eprt()
4254 return PR_ERROR(cmd); in core_eprt()
4260 (char *) cmd->argv[1]); in core_eprt()
4263 pr_cmd_set_errno(cmd, EPERM); in core_eprt()
4265 return PR_ERROR(cmd); in core_eprt()
4291 pr_cmd_set_errno(cmd, EPERM); in core_eprt()
4293 return PR_ERROR(cmd); in core_eprt()
4310 pr_cmd_set_errno(cmd, EPERM); in core_eprt()
4312 return PR_ERROR(cmd); in core_eprt()
4332 (char *) cmd->argv[1]); in core_eprt()
4335 pr_cmd_set_errno(cmd, EPERM); in core_eprt()
4337 return PR_ERROR(cmd); in core_eprt()
4412 if (pr_class_satisfied(cmd->tmp_pool, cls, &na) == TRUE) { in core_eprt()
4431 cmd->arg); in core_eprt()
4434 pr_cmd_set_errno(cmd, EPERM); in core_eprt()
4436 return PR_ERROR(cmd); in core_eprt()
4448 "Refused EPRT %s (port %d below 1024, possible bounce attack)", cmd->arg, in core_eprt()
4452 pr_cmd_set_errno(cmd, EPERM); in core_eprt()
4454 return PR_ERROR(cmd); in core_eprt()
4484 return PR_HANDLED(cmd); in core_eprt()
4487 MODRET core_epsv(cmd_rec *cmd) { in core_epsv() argument
4495 CHECK_CMD_MIN_ARGS(cmd, 1); in core_epsv()
4500 if (!dir_check(cmd->tmp_pool, cmd, cmd->group, session.cwd, NULL)) { in core_epsv()
4504 pr_response_add_err(R_501, "%s: %s", (char *) cmd->argv[0], in core_epsv()
4507 pr_cmd_set_errno(cmd, xerrno); in core_epsv()
4509 return PR_ERROR(cmd); in core_epsv()
4512 if (cmd->argc-1 == 1) { in core_epsv()
4513 arg = pstrdup(cmd->tmp_pool, cmd->argv[1]); in core_epsv()
4520 pr_cmd_set_errno(cmd, EPERM); in core_epsv()
4522 return PR_HANDLED(cmd); in core_epsv()
4534 (char *) cmd->argv[0]); in core_epsv()
4536 pr_cmd_set_errno(cmd, EINVAL); in core_epsv()
4538 return PR_ERROR(cmd); in core_epsv()
4586 pr_cmd_set_errno(cmd, EINVAL); in core_epsv()
4588 return PR_ERROR(cmd); in core_epsv()
4604 bind_addr = pr_netaddr_v6tov4(cmd->pool, session.c->local_addr); in core_epsv()
4642 pr_cmd_set_errno(cmd, EINVAL); in core_epsv()
4644 return PR_ERROR(cmd); in core_epsv()
4659 pr_response_add_err(R_425, "%s: %s", (char *) cmd->argv[0], in core_epsv()
4662 pr_cmd_set_errno(cmd, xerrno); in core_epsv()
4664 return PR_ERROR(cmd); in core_epsv()
4697 return PR_HANDLED(cmd); in core_epsv()
4700 MODRET core_help(cmd_rec *cmd) { in core_help() argument
4701 if (cmd->argc == 1) { in core_help()
4702 pr_help_add_response(cmd, NULL); in core_help()
4707 for (cp = cmd->argv[1]; *cp; cp++) { in core_help()
4711 if (strcasecmp(cmd->argv[1], C_SITE) == 0) { in core_help()
4712 return pr_module_call(&site_module, site_dispatch, cmd); in core_help()
4715 if (pr_help_add_response(cmd, cmd->argv[1]) == 0) { in core_help()
4716 return PR_HANDLED(cmd); in core_help()
4720 (char *) cmd->argv[1]); in core_help()
4722 pr_cmd_set_errno(cmd, EINVAL); in core_help()
4724 return PR_ERROR(cmd); in core_help()
4727 return PR_HANDLED(cmd); in core_help()
4730 MODRET core_host(cmd_rec *cmd) { in core_host() argument
4737 if (cmd->argc != 2) { in core_host()
4738 pr_response_add_err(R_500, _("'%s' not understood"), (char *) cmd->argv[0]); in core_host()
4740 pr_cmd_set_errno(cmd, EINVAL); in core_host()
4742 return PR_ERROR(cmd); in core_host()
4748 (char *) cmd->argv[1]); in core_host()
4753 pr_cmd_set_errno(cmd, EPERM); in core_host()
4755 return PR_ERROR(cmd); in core_host()
4758 if (!dir_check(cmd->tmp_pool, cmd, cmd->group, session.cwd, NULL)) { in core_host()
4761 pr_response_add_err(R_504, "%s: %s", (char *) cmd->argv[1], in core_host()
4764 pr_cmd_set_errno(cmd, xerrno); in core_host()
4766 return PR_ERROR(cmd); in core_host()
4784 (char *) cmd->argv[1], session.rfc2228_mech); in core_host()
4788 pr_cmd_set_errno(cmd, EPERM); in core_host()
4790 return PR_ERROR(cmd); in core_host()
4793 host = cmd->argv[1]; in core_host()
4806 pr_cmd_set_errno(cmd, EINVAL); in core_host()
4808 return PR_ERROR(cmd); in core_host()
4811 host = pstrndup(cmd->tmp_pool, host + 1, hostlen - 2); in core_host()
4820 (char *) cmd->argv[1]); in core_host()
4822 pr_cmd_set_errno(cmd, EINVAL); in core_host()
4824 return PR_ERROR(cmd); in core_host()
4833 pr_cmd_set_errno(cmd, EINVAL); in core_host()
4835 return PR_ERROR(cmd); in core_host()
4850 (char *) cmd->argv[1]); in core_host()
4852 pr_cmd_set_errno(cmd, EPERM); in core_host()
4854 return PR_ERROR(cmd); in core_host()
4868 return PR_HANDLED(cmd); in core_host()
4884 pr_cmd_set_errno(cmd, EINVAL); in core_host()
4886 return PR_ERROR(cmd); in core_host()
4896 (char *) cmd->argv[1]); in core_host()
4898 pr_cmd_set_errno(cmd, EPERM); in core_host()
4900 return PR_ERROR(cmd); in core_host()
4914 return PR_HANDLED(cmd); in core_host()
4925 pr_cmd_set_errno(cmd, EINVAL); in core_host()
4927 return PR_ERROR(cmd); in core_host()
4937 (char *) cmd->argv[1]); in core_host()
4939 pr_cmd_set_errno(cmd, ENOENT); in core_host()
4941 return PR_ERROR(cmd); in core_host()
4958 (char *) cmd->argv[1]); in core_host()
4960 pr_cmd_set_errno(cmd, EPERM); in core_host()
4962 return PR_ERROR(cmd); in core_host()
5060 return PR_HANDLED(cmd); in core_host()
5063 MODRET core_post_host(cmd_rec *cmd) { in core_post_host() argument
5141 return PR_DECLINED(cmd); in core_post_host()
5144 MODRET core_clnt(cmd_rec *cmd) { in core_clnt() argument
5146 return PR_HANDLED(cmd); in core_clnt()
5149 MODRET core_syst(cmd_rec *cmd) { in core_syst() argument
5151 return PR_HANDLED(cmd); in core_syst()
5154 int core_chgrp(cmd_rec *cmd, const char *path, uid_t uid, gid_t gid) { in core_chgrp() argument
5157 cmd_name = cmd->argv[0]; in core_chgrp()
5158 pr_cmd_set_name(cmd, "SITE_CHGRP"); in core_chgrp()
5159 if (!dir_check(cmd->tmp_pool, cmd, G_WRITE, path, NULL)) { in core_chgrp()
5161 pr_cmd_set_name(cmd, cmd_name); in core_chgrp()
5166 pr_cmd_set_name(cmd, cmd_name); in core_chgrp()
5171 int core_chmod(cmd_rec *cmd, const char *path, mode_t mode) { in core_chmod() argument
5174 cmd_name = cmd->argv[0]; in core_chmod()
5175 pr_cmd_set_name(cmd, "SITE_CHMOD"); in core_chmod()
5176 if (!dir_check(cmd->tmp_pool, cmd, G_WRITE, path, NULL)) { in core_chmod()
5178 pr_cmd_set_name(cmd, cmd_name); in core_chmod()
5183 pr_cmd_set_name(cmd, cmd_name); in core_chmod()
5188 MODRET core_chdir(cmd_rec *cmd, char *ndir) { in core_chdir() argument
5205 dir = dir_realpath(cmd->tmp_pool, ndir); in core_chdir()
5213 allowed_access = dir_check_full(cmd->tmp_pool, cmd, cmd->group, dir, in core_chdir()
5230 cdir = palloc(cmd->tmp_pool, strlen(cdpath->argv[0]) + strlen(ndir) + 2); in core_chdir()
5235 dir = dir_realpath(cmd->tmp_pool, cdir); in core_chdir()
5238 dir_check_full(cmd->tmp_pool, cmd, cmd->group, dir, NULL) && in core_chdir()
5251 pr_cmd_set_errno(cmd, xerrno); in core_chdir()
5253 return PR_ERROR(cmd); in core_chdir()
5261 ndir = dir_canonical_vpath(cmd->tmp_pool, ndir); in core_chdir()
5262 dir = dir_realpath(cmd->tmp_pool, ndir); in core_chdir()
5271 allowed_access = dir_check_full(cmd->tmp_pool, cmd, cmd->group, dir, in core_chdir()
5286 cdir = palloc(cmd->tmp_pool, strlen(cdpath->argv[0]) + strlen(ndir) + 2); in core_chdir()
5291 ndir = dir_canonical_vpath(cmd->tmp_pool, cdir); in core_chdir()
5292 dir = dir_realpath(cmd->tmp_pool, ndir); in core_chdir()
5295 dir_check_full(cmd->tmp_pool, cmd, cmd->group, dir, NULL) && in core_chdir()
5308 pr_cmd_set_errno(cmd, xerrno); in core_chdir()
5310 return PR_ERROR(cmd); in core_chdir()
5334 c = find_config(cmd->server->conf, CONF_PARAM, "DisplayChdir", FALSE); in core_chdir()
5348 c = find_config(cmd->server->conf, CONF_USERDATA, session.cwd, FALSE); in core_chdir()
5351 c = pr_config_add_set(&cmd->server->conf, session.cwd, 0); in core_chdir()
5378 pr_response_add(R_250, _("%s command successful"), (char *) cmd->argv[0]); in core_chdir()
5379 return PR_HANDLED(cmd); in core_chdir()
5382 MODRET core_rmd(cmd_rec *cmd) { in core_rmd() argument
5387 CHECK_CMD_MIN_ARGS(cmd, 2); in core_rmd()
5389 decoded_path = pr_fs_decode_path2(cmd->tmp_pool, cmd->arg, in core_rmd()
5394 pr_log_debug(DEBUG8, "'%s' failed to decode properly: %s", cmd->arg, in core_rmd()
5397 cmd->arg); in core_rmd()
5399 pr_cmd_set_errno(cmd, xerrno); in core_rmd()
5401 return PR_ERROR(cmd); in core_rmd()
5413 (char *) cmd->argv[0], dir); in core_rmd()
5414 pr_response_add_err(R_550, _("%s: Forbidden filename"), cmd->arg); in core_rmd()
5416 pr_cmd_set_errno(cmd, EPERM); in core_rmd()
5418 return PR_ERROR(cmd); in core_rmd()
5422 (char *) cmd->argv[0], dir); in core_rmd()
5423 pr_response_add_err(R_550, _("%s: Forbidden filename"), cmd->arg); in core_rmd()
5425 pr_cmd_set_errno(cmd, EPERM); in core_rmd()
5427 return PR_ERROR(cmd); in core_rmd()
5430 dir = dir_canonical_path(cmd->tmp_pool, dir); in core_rmd()
5434 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_rmd()
5436 pr_cmd_set_errno(cmd, xerrno); in core_rmd()
5438 return PR_ERROR(cmd); in core_rmd()
5441 if (!dir_check_canon(cmd->tmp_pool, cmd, cmd->group, dir, NULL)) { in core_rmd()
5444 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_rmd()
5446 pr_cmd_set_errno(cmd, xerrno); in core_rmd()
5448 return PR_ERROR(cmd); in core_rmd()
5451 res = pr_fsio_rmdir_with_error(cmd->pool, dir, &err); in core_rmd()
5456 pr_error_set_why(err, pstrcat(cmd->pool, "remove directory '", dir, "'", in core_rmd()
5460 "error removing directory '%s': %s", (char *) cmd->argv[0], session.user, in core_rmd()
5461 pr_uid2str(cmd->tmp_pool, session.uid), in core_rmd()
5462 pr_gid2str(cmd->tmp_pool, session.gid), dir, strerror(xerrno)); in core_rmd()
5474 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_rmd()
5476 pr_cmd_set_errno(cmd, xerrno); in core_rmd()
5478 return PR_ERROR(cmd); in core_rmd()
5481 pr_response_add(R_250, _("%s command successful"), (char *) cmd->argv[0]); in core_rmd()
5482 return PR_HANDLED(cmd); in core_rmd()
5485 MODRET core_mkd(cmd_rec *cmd) { in core_mkd() argument
5489 CHECK_CMD_MIN_ARGS(cmd, 2); in core_mkd()
5494 if (strchr(cmd->arg, '*')) { in core_mkd()
5495 pr_response_add_err(R_550, _("%s: Invalid directory name"), cmd->arg); in core_mkd()
5497 pr_cmd_set_errno(cmd, EINVAL); in core_mkd()
5499 return PR_ERROR(cmd); in core_mkd()
5502 decoded_path = pr_fs_decode_path2(cmd->tmp_pool, cmd->arg, in core_mkd()
5507 pr_log_debug(DEBUG8, "'%s' failed to decode properly: %s", cmd->arg, in core_mkd()
5510 cmd->arg); in core_mkd()
5512 pr_cmd_set_errno(cmd, xerrno); in core_mkd()
5514 return PR_ERROR(cmd); in core_mkd()
5526 (char *) cmd->argv[0], dir); in core_mkd()
5527 pr_response_add_err(R_550, _("%s: Forbidden filename"), cmd->arg); in core_mkd()
5529 pr_cmd_set_errno(cmd, EPERM); in core_mkd()
5531 return PR_ERROR(cmd); in core_mkd()
5535 (char *) cmd->argv[0], dir); in core_mkd()
5536 pr_response_add_err(R_550, _("%s: Forbidden filename"), cmd->arg); in core_mkd()
5538 pr_cmd_set_errno(cmd, EPERM); in core_mkd()
5540 return PR_ERROR(cmd); in core_mkd()
5543 dir = dir_canonical_path(cmd->tmp_pool, dir); in core_mkd()
5547 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_mkd()
5549 pr_cmd_set_errno(cmd, xerrno); in core_mkd()
5551 return PR_ERROR(cmd); in core_mkd()
5554 if (!dir_check_canon(cmd->tmp_pool, cmd, cmd->group, dir, NULL)) { in core_mkd()
5558 (char *) cmd->argv[0]); in core_mkd()
5559 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_mkd()
5561 pr_cmd_set_errno(cmd, xerrno); in core_mkd()
5563 return PR_ERROR(cmd); in core_mkd()
5566 if (pr_fsio_smkdir(cmd->tmp_pool, dir, 0777, session.fsuid, in core_mkd()
5571 "error making directory '%s': %s", (char *) cmd->argv[0], session.user, in core_mkd()
5572 pr_uid2str(cmd->tmp_pool, session.uid), in core_mkd()
5573 pr_gid2str(cmd->tmp_pool, session.gid), dir, strerror(xerrno)); in core_mkd()
5575 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_mkd()
5577 pr_cmd_set_errno(cmd, xerrno); in core_mkd()
5579 return PR_ERROR(cmd); in core_mkd()
5583 quote_dir(cmd->tmp_pool, dir)); in core_mkd()
5585 return PR_HANDLED(cmd); in core_mkd()
5588 MODRET core_cwd(cmd_rec *cmd) { in core_cwd() argument
5590 CHECK_CMD_MIN_ARGS(cmd, 2); in core_cwd()
5592 decoded_path = pr_fs_decode_path2(cmd->tmp_pool, cmd->arg, in core_cwd()
5597 pr_log_debug(DEBUG8, "'%s' failed to decode properly: %s", cmd->arg, in core_cwd()
5600 cmd->arg); in core_cwd()
5602 pr_cmd_set_errno(cmd, xerrno); in core_cwd()
5604 return PR_ERROR(cmd); in core_cwd()
5607 return core_chdir(cmd, decoded_path); in core_cwd()
5610 MODRET core_cdup(cmd_rec *cmd) { in core_cdup() argument
5611 CHECK_CMD_ARGS(cmd, 1); in core_cdup()
5612 return core_chdir(cmd, ".."); in core_cdup()
5616 MODRET core_mdtm(cmd_rec *cmd) { in core_mdtm() argument
5620 CHECK_CMD_MIN_ARGS(cmd, 2); in core_mdtm()
5622 decoded_path = pr_fs_decode_path2(cmd->tmp_pool, cmd->arg, in core_mdtm()
5627 pr_log_debug(DEBUG8, "'%s' failed to decode properly: %s", cmd->arg, in core_mdtm()
5630 cmd->arg); in core_mdtm()
5632 pr_cmd_set_errno(cmd, xerrno); in core_mdtm()
5634 return PR_ERROR(cmd); in core_mdtm()
5640 path = dir_realpath(cmd->tmp_pool, decoded_path); in core_mdtm()
5642 !dir_check(cmd->tmp_pool, cmd, cmd->group, path, NULL) || in core_mdtm()
5646 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_mdtm()
5648 pr_cmd_set_errno(cmd, xerrno); in core_mdtm()
5650 return PR_ERROR(cmd); in core_mdtm()
5654 pr_response_add_err(R_550, _("%s: not a plain file"), cmd->arg); in core_mdtm()
5656 pr_cmd_set_errno(cmd, EINVAL); in core_mdtm()
5658 return PR_ERROR(cmd); in core_mdtm()
5666 tm = pr_gmtime(cmd->tmp_pool, &st.st_mtime); in core_mdtm()
5680 return PR_HANDLED(cmd); in core_mdtm()
5683 MODRET core_size(cmd_rec *cmd) { in core_size() argument
5687 CHECK_CMD_MIN_ARGS(cmd, 2); in core_size()
5704 pr_log_debug(DEBUG5, "%s not allowed in ASCII mode", (char *) cmd->argv[0]); in core_size()
5706 (char *) cmd->argv[0]); in core_size()
5708 pr_cmd_set_errno(cmd, EPERM); in core_size()
5710 return PR_ERROR(cmd); in core_size()
5714 decoded_path = pr_fs_decode_path2(cmd->tmp_pool, cmd->arg, in core_size()
5719 pr_log_debug(DEBUG8, "'%s' failed to decode properly: %s", cmd->arg, in core_size()
5722 cmd->arg); in core_size()
5724 pr_cmd_set_errno(cmd, xerrno); in core_size()
5726 return PR_ERROR(cmd); in core_size()
5730 path = dir_realpath(cmd->tmp_pool, decoded_path); in core_size()
5736 !dir_check(cmd->tmp_pool, cmd, cmd->group, path, NULL) || in core_size()
5740 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_size()
5742 pr_cmd_set_errno(cmd, xerrno); in core_size()
5744 return PR_ERROR(cmd); in core_size()
5748 pr_response_add_err(R_550, _("%s: not a regular file"), cmd->arg); in core_size()
5750 pr_cmd_set_errno(cmd, EINVAL); in core_size()
5752 return PR_ERROR(cmd); in core_size()
5759 return PR_HANDLED(cmd); in core_size()
5762 MODRET core_dele(cmd_rec *cmd) { in core_dele() argument
5768 CHECK_CMD_MIN_ARGS(cmd, 2); in core_dele()
5770 decoded_path = pr_fs_decode_path2(cmd->tmp_pool, cmd->arg, in core_dele()
5775 pr_log_debug(DEBUG8, "'%s' failed to decode properly: %s", cmd->arg, in core_dele()
5778 cmd->arg); in core_dele()
5780 pr_cmd_set_errno(cmd, xerrno); in core_dele()
5782 return PR_ERROR(cmd); in core_dele()
5794 (char *) cmd->argv[0], path); in core_dele()
5795 pr_response_add_err(R_550, _("%s: Forbidden filename"), cmd->arg); in core_dele()
5797 pr_cmd_set_errno(cmd, EPERM); in core_dele()
5799 return PR_ERROR(cmd); in core_dele()
5803 (char *) cmd->argv[0], path); in core_dele()
5804 pr_response_add_err(R_550, _("%s: Forbidden filename"), cmd->arg); in core_dele()
5806 pr_cmd_set_errno(cmd, EPERM); in core_dele()
5808 return PR_ERROR(cmd); in core_dele()
5812 path = dir_canonical_path(cmd->tmp_pool, path); in core_dele()
5816 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_dele()
5818 pr_cmd_set_errno(cmd, xerrno); in core_dele()
5820 return PR_ERROR(cmd); in core_dele()
5823 if (!dir_check(cmd->tmp_pool, cmd, cmd->group, path, NULL)) { in core_dele()
5827 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_dele()
5829 pr_cmd_set_errno(cmd, xerrno); in core_dele()
5831 return PR_ERROR(cmd); in core_dele()
5840 res = pr_fsio_lstat_with_error(cmd->tmp_pool, path, &st, &err); in core_dele()
5845 pr_error_set_why(err, pstrcat(cmd->pool, "check file '", path, "'", NULL)); in core_dele()
5856 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_dele()
5858 pr_cmd_set_errno(cmd, xerrno); in core_dele()
5860 return PR_ERROR(cmd); in core_dele()
5871 "error deleting '%s': %s", (char *) cmd->argv[0], session.user, in core_dele()
5872 pr_uid2str(cmd->tmp_pool, session.uid), in core_dele()
5873 pr_gid2str(cmd->tmp_pool, session.gid), path, strerror(xerrno)); in core_dele()
5876 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_dele()
5878 pr_cmd_set_errno(cmd, xerrno); in core_dele()
5880 return PR_ERROR(cmd); in core_dele()
5884 res = pr_fsio_unlink_with_error(cmd->pool, path, &err); in core_dele()
5889 pr_error_set_why(err, pstrcat(cmd->pool, "delete file '", path, "'", NULL)); in core_dele()
5892 "error deleting '%s': %s", (char *) cmd->argv[0], session.user, in core_dele()
5893 pr_uid2str(cmd->tmp_pool, session.uid), in core_dele()
5894 pr_gid2str(cmd->tmp_pool, session.gid), path, strerror(xerrno)); in core_dele()
5905 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_dele()
5907 pr_cmd_set_errno(cmd, xerrno); in core_dele()
5909 return PR_ERROR(cmd); in core_dele()
5912 fullpath = dir_abs_path(cmd->tmp_pool, path, TRUE); in core_dele()
5925 pr_response_add(R_250, _("%s command successful"), (char *) cmd->argv[0]); in core_dele()
5926 return PR_HANDLED(cmd); in core_dele()
5929 MODRET core_rnto(cmd_rec *cmd) { in core_rnto() argument
5936 CHECK_CMD_MIN_ARGS(cmd, 2); in core_rnto()
5946 pr_cmd_set_errno(cmd, EPERM); in core_rnto()
5948 return PR_ERROR(cmd); in core_rnto()
5951 decoded_path = pr_fs_decode_path2(cmd->tmp_pool, cmd->arg, in core_rnto()
5956 pr_log_debug(DEBUG8, "'%s' failed to decode properly: %s", cmd->arg, in core_rnto()
5959 cmd->arg); in core_rnto()
5961 pr_cmd_set_errno(cmd, xerrno); in core_rnto()
5963 return PR_ERROR(cmd); in core_rnto()
5975 (char *) cmd->argv[0], path); in core_rnto()
5976 pr_response_add_err(R_550, _("%s: Forbidden filename"), cmd->arg); in core_rnto()
5978 pr_cmd_set_errno(cmd, EPERM); in core_rnto()
5980 return PR_ERROR(cmd); in core_rnto()
5984 (char *) cmd->argv[0], path); in core_rnto()
5985 pr_response_add_err(R_550, _("%s: Forbidden filename"), cmd->arg); in core_rnto()
5987 pr_cmd_set_errno(cmd, EPERM); in core_rnto()
5989 return PR_ERROR(cmd); in core_rnto()
5992 path = dir_canonical_path(cmd->tmp_pool, path); in core_rnto()
6003 pr_response_add_err(R_550, _("%s: Rename permission denied"), cmd->arg); in core_rnto()
6005 pr_cmd_set_errno(cmd, EACCES); in core_rnto()
6007 return PR_ERROR(cmd); in core_rnto()
6011 !dir_check_canon(cmd->tmp_pool, cmd, cmd->group, path, NULL)) { in core_rnto()
6012 pr_response_add_err(R_550, _("%s: %s"), cmd->arg, strerror(EPERM)); in core_rnto()
6014 pr_cmd_set_errno(cmd, EPERM); in core_rnto()
6016 return PR_ERROR(cmd); in core_rnto()
6019 res = pr_fsio_rename_with_error(cmd->pool, session.xfer.path, path, &err); in core_rnto()
6024 pr_error_set_why(err, pstrcat(cmd->pool, "rename '", session.xfer.path, in core_rnto()
6039 (char *) cmd->argv[0], session.user, in core_rnto()
6040 pr_uid2str(cmd->tmp_pool, session.uid), in core_rnto()
6041 pr_gid2str(cmd->tmp_pool, session.gid), session.xfer.path, path, in core_rnto()
6058 pr_response_add_err(R_550, _("%s: %s"), cmd->arg, strerror(xerrno)); in core_rnto()
6060 pr_cmd_set_errno(cmd, xerrno); in core_rnto()
6062 return PR_ERROR(cmd); in core_rnto()
6067 "error renaming '%s' to '%s': %s", (char *) cmd->argv[0], session.user, in core_rnto()
6068 pr_uid2str(cmd->tmp_pool, session.uid), in core_rnto()
6069 pr_gid2str(cmd->tmp_pool, session.gid), session.xfer.path, path, in core_rnto()
6078 pr_response_add_err(R_550, _("%s: %s"), cmd->arg, strerror(xerrno)); in core_rnto()
6080 pr_cmd_set_errno(cmd, xerrno); in core_rnto()
6082 return PR_ERROR(cmd); in core_rnto()
6092 "error copying '%s' to '%s': %s", (char *) cmd->argv[0], session.user, in core_rnto()
6093 pr_uid2str(cmd->tmp_pool, session.uid), in core_rnto()
6094 pr_gid2str(cmd->tmp_pool, session.gid), session.xfer.path, path, in core_rnto()
6097 pr_response_add_err(R_550, _("Rename %s: %s"), cmd->arg, in core_rnto()
6100 pr_cmd_set_errno(cmd, xerrno); in core_rnto()
6102 return PR_ERROR(cmd); in core_rnto()
6106 res = pr_fsio_unlink_with_error(cmd->pool, session.xfer.path, &err); in core_rnto()
6111 pr_error_set_why(err, pstrcat(cmd->pool, "delete file '", in core_rnto()
6130 return PR_HANDLED(cmd); in core_rnto()
6133 MODRET core_rnto_cleanup(cmd_rec *cmd) { in core_rnto_cleanup() argument
6140 return PR_DECLINED(cmd); in core_rnto_cleanup()
6143 MODRET core_rnfr(cmd_rec *cmd) { in core_rnfr() argument
6147 CHECK_CMD_MIN_ARGS(cmd, 2); in core_rnfr()
6149 decoded_path = pr_fs_decode_path2(cmd->tmp_pool, cmd->arg, in core_rnfr()
6154 pr_log_debug(DEBUG8, "'%s' failed to decode properly: %s", cmd->arg, in core_rnfr()
6157 cmd->arg); in core_rnfr()
6159 pr_cmd_set_errno(cmd, xerrno); in core_rnfr()
6161 return PR_ERROR(cmd); in core_rnfr()
6173 (char *) cmd->argv[0], path); in core_rnfr()
6174 pr_response_add_err(R_550, _("%s: Forbidden filename"), cmd->arg); in core_rnfr()
6176 pr_cmd_set_errno(cmd, EPERM); in core_rnfr()
6178 return PR_ERROR(cmd); in core_rnfr()
6182 (char *) cmd->argv[0], path); in core_rnfr()
6183 pr_response_add_err(R_550, _("%s: Forbidden filename"), cmd->arg); in core_rnfr()
6185 pr_cmd_set_errno(cmd, EPERM); in core_rnfr()
6187 return PR_ERROR(cmd); in core_rnfr()
6191 path = dir_canonical_path(cmd->tmp_pool, path); in core_rnfr()
6194 !dir_check(cmd->tmp_pool, cmd, cmd->group, path, NULL) || in core_rnfr()
6195 !exists2(cmd->tmp_pool, path)) { in core_rnfr()
6198 pr_response_add_err(R_550, "%s: %s", cmd->arg, strerror(xerrno)); in core_rnfr()
6200 pr_cmd_set_errno(cmd, xerrno); in core_rnfr()
6202 return PR_ERROR(cmd); in core_rnfr()
6221 return PR_HANDLED(cmd); in core_rnfr()
6224 MODRET core_noop(cmd_rec *cmd) { in core_noop() argument
6225 if (!dir_check(cmd->tmp_pool, cmd, cmd->group, session.vwd, NULL)) { in core_noop()
6230 pr_cmd_set_errno(cmd, xerrno); in core_noop()
6232 return PR_ERROR(cmd); in core_noop()
6236 return PR_HANDLED(cmd); in core_noop()
6243 MODRET core_feat(cmd_rec *cmd) { in core_feat() argument
6248 CHECK_CMD_ARGS(cmd, 1); in core_feat()
6250 if (!dir_check(cmd->tmp_pool, cmd, cmd->group, session.vwd, NULL)) { in core_feat()
6254 (char *) cmd->argv[0]); in core_feat()
6255 pr_response_add_err(R_550, "%s: %s", (char *) cmd->argv[0], in core_feat()
6258 pr_cmd_set_errno(cmd, xerrno); in core_feat()
6260 return PR_ERROR(cmd); in core_feat()
6266 return PR_HANDLED(cmd); in core_feat()
6269 feats = make_array(cmd->tmp_pool, 0, sizeof(char **)); in core_feat()
6273 *((char **) push_array(feats)) = pstrdup(cmd->tmp_pool, feat); in core_feat()
6286 return PR_HANDLED(cmd); in core_feat()
6289 MODRET core_opts(cmd_rec *cmd) { in core_opts() argument
6295 CHECK_CMD_MIN_ARGS(cmd, 2); in core_opts()
6300 if ((cmd->argc-1) > PR_OPTS_MAX_PARAM_COUNT) { in core_opts()
6304 "OPTS command with too many parameters (%d), rejecting", cmd->argc-1); in core_opts()
6305 pr_response_add_err(R_550, "%s: %s", (char *) cmd->argv[0], in core_opts()
6308 pr_cmd_set_errno(cmd, xerrno); in core_opts()
6310 return PR_ERROR(cmd); in core_opts()
6313 subcmd = pr_cmd_alloc(cmd->tmp_pool, cmd->argc-1, NULL); in core_opts()
6314 subcmd->argv[0] = pstrcat(cmd->tmp_pool, "OPTS_", cmd->argv[1], NULL); in core_opts()
6315 subcmd->group = cmd->group; in core_opts()
6317 if (!dir_check(cmd->tmp_pool, subcmd, subcmd->group, session.vwd, NULL)) { in core_opts()
6321 (char *) cmd->argv[1]); in core_opts()
6322 pr_response_add_err(R_550, "%s %s: %s", (char *) cmd->argv[0], in core_opts()
6323 (char *) cmd->argv[1], strerror(xerrno)); in core_opts()
6325 pr_cmd_set_errno(cmd, xerrno); in core_opts()
6327 return PR_ERROR(cmd); in core_opts()
6330 for (i = 2; i < cmd->argc; i++) { in core_opts()
6331 subcmd->argv[i-1] = cmd->argv[i]; in core_opts()
6333 arg = pstrcat(cmd->tmp_pool, arg, *arg ? " " : "", cmd->argv[i], NULL); in core_opts()
6340 return PR_ERROR(cmd); in core_opts()
6343 return PR_HANDLED(cmd); in core_opts()
6346 MODRET core_post_pass(cmd_rec *cmd) { in core_post_pass() argument
6486 return PR_HANDLED(cmd); in core_post_pass()
6492 MODRET set_deferwelcome(cmd_rec *cmd) { in set_deferwelcome() argument
6496 CHECK_ARGS(cmd, 1); in set_deferwelcome()
6497 CHECK_CONF(cmd, CONF_ROOT|CONF_VIRTUAL|CONF_GLOBAL); in set_deferwelcome()
6499 bool = get_boolean(cmd, 1); in set_deferwelcome()
6501 CONF_ERROR(cmd, "expected Boolean parameter"); in set_deferwelcome()
6504 c = add_config_param(cmd->argv[0], 1, NULL); in set_deferwelcome()
6508 return PR_HANDLED(cmd); in set_deferwelcome()