MCPcopy Create free account
hub / github.com/apache/httpd / invoke_cmd

Function invoke_cmd

server/config.c:853–1051  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

851#define AP_MAX_ARGC 64
852
853static const char *invoke_cmd(const command_rec *cmd, cmd_parms *parms,
854 void *mconfig, const char *args)
855{
856 int override_list_ok = 0;
857 char *w, *w2, *w3;
858 const char *errmsg = NULL;
859
860 /* Have we been provided a list of acceptable directives? */
861 if (parms->override_list != NULL) {
862 if (apr_table_get(parms->override_list, cmd->name) != NULL) {
863 override_list_ok = 1;
864 }
865 }
866
867 if ((parms->override & cmd->req_override) == 0 && !override_list_ok) {
868 if (parms->override & NONFATAL_OVERRIDE) {
869 ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, parms->temp_pool,
870 APLOGNO(02295)
871 "%s in .htaccess forbidden by AllowOverride",
872 cmd->name);
873 return NULL;
874 }
875 else if (parms->directive && parms->directive->parent) {
876 return apr_pstrcat(parms->pool, cmd->name, " not allowed in ",
877 parms->directive->parent->directive, ">",
878 " context", NULL);
879 }
880 else {
881 return apr_pstrcat(parms->pool, cmd->name,
882 " not allowed here", NULL);
883 }
884 }
885
886 parms->info = cmd->cmd_data;
887 parms->cmd = cmd;
888
889 switch (cmd->args_how) {
890 case RAW_ARGS:
891#ifdef RESOLVE_ENV_PER_TOKEN
892 args = ap_resolve_env(parms->pool,args);
893#endif
894 return cmd->AP_RAW_ARGS(parms, mconfig, args);
895
896 case TAKE_ARGV:
897 {
898 char *argv[AP_MAX_ARGC];
899 int argc = 0;
900
901 do {
902 w = ap_getword_conf(parms->pool, &args);
903 if (*w == '\0' && *args == '\0') {
904 break;
905 }
906 argv[argc] = w;
907 argc++;
908 } while (argc < AP_MAX_ARGC && *args != '\0');
909
910 return cmd->AP_TAKE_ARGV(parms, mconfig, argc, argv);

Callers 2

ap_walk_config_subFunction · 0.85
execute_nowFunction · 0.85

Calls 3

ap_resolve_envFunction · 0.85
ap_getword_confFunction · 0.85
ap_cstr_casecmpFunction · 0.85

Tested by

no test coverage detected