diff options
-rw-r--r-- | apps/app_agent_pool.c | 14 | ||||
-rw-r--r-- | apps/app_skel.c | 18 | ||||
-rw-r--r-- | apps/confbridge/conf_config_parser.c | 20 | ||||
-rw-r--r-- | channels/chan_motif.c | 4 | ||||
-rw-r--r-- | main/cdr.c | 28 | ||||
-rw-r--r-- | main/cel.c | 21 | ||||
-rw-r--r-- | main/features_config.c | 22 | ||||
-rw-r--r-- | main/named_acl.c | 4 | ||||
-rw-r--r-- | main/stasis.c | 8 | ||||
-rw-r--r-- | main/udptl.c | 4 | ||||
-rw-r--r-- | res/ari/config.c | 8 | ||||
-rw-r--r-- | res/res_hep.c | 4 | ||||
-rw-r--r-- | res/res_parking.c | 8 | ||||
-rw-r--r-- | res/res_pjsip_notify.c | 8 | ||||
-rw-r--r-- | res/res_statsd.c | 4 | ||||
-rw-r--r-- | res/res_xmpp.c | 8 | ||||
-rw-r--r-- | tests/test_config.c | 14 |
17 files changed, 124 insertions, 73 deletions
diff --git a/apps/app_agent_pool.c b/apps/app_agent_pool.c index a637bbe5f..ef8b95ec8 100644 --- a/apps/app_agent_pool.c +++ b/apps/app_agent_pool.c @@ -457,11 +457,17 @@ struct agents_cfg { struct ao2_container *agents; }; +static const char *agent_type_blacklist[] = { + "general", + "agents", + NULL, +}; + static struct aco_type agent_type = { .type = ACO_ITEM, .name = "agent-id", - .category_match = ACO_BLACKLIST, - .category = "^(general|agents)$", + .category_match = ACO_BLACKLIST_ARRAY, + .category = (const char *)agent_type_blacklist, .item_alloc = agent_cfg_alloc, .item_find = agent_cfg_find, .item_offset = offsetof(struct agents_cfg, agents), @@ -473,8 +479,8 @@ static struct aco_type *agent_types[] = ACO_TYPES(&agent_type); static struct aco_type general_type = { .type = ACO_GLOBAL, .name = "global", - .category_match = ACO_WHITELIST, - .category = "^general$", + .category_match = ACO_WHITELIST_EXACT, + .category = "general", }; static struct aco_file agents_conf = { diff --git a/apps/app_skel.c b/apps/app_skel.c index 12afdc726..20e6abfcc 100644 --- a/apps/app_skel.c +++ b/apps/app_skel.c @@ -244,8 +244,8 @@ static struct aco_type global_option = { .type = ACO_GLOBAL, .name = "globals", .item_offset = offsetof(struct skel_config, global), - .category_match = ACO_WHITELIST, - .category = "^general$", + .category_match = ACO_WHITELIST_EXACT, + .category = "general", }; struct aco_type *global_options[] = ACO_TYPES(&global_option); @@ -255,18 +255,24 @@ static struct aco_type sound_option = { .type = ACO_GLOBAL, .name = "sounds", .item_offset = offsetof(struct skel_config, global), - .category_match = ACO_WHITELIST, - .category = "^sounds$", + .category_match = ACO_WHITELIST_EXACT, + .category = "sounds", }; struct aco_type *sound_options[] = ACO_TYPES(&sound_option); +static const char *level_categories[] = { + "general", + "sounds", + NULL, +}; + /*! \brief An aco_type structure to link the everything but the "general" and "sounds" categories to the skel_level type */ static struct aco_type level_option = { .type = ACO_ITEM, .name = "level", - .category_match = ACO_BLACKLIST, - .category = "^(general|sounds)$", + .category_match = ACO_BLACKLIST_ARRAY, + .category = (const char *)level_categories, .item_alloc = skel_level_alloc, .item_find = skel_level_find, .item_offset = offsetof(struct skel_config, levels), diff --git a/apps/confbridge/conf_config_parser.c b/apps/confbridge/conf_config_parser.c index 2de1ec238..16d393526 100644 --- a/apps/confbridge/conf_config_parser.c +++ b/apps/confbridge/conf_config_parser.c @@ -377,7 +377,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") regardless if this limit is reached or not. </para></description> </configOption> - <configOption name="^sound_"> + <configOption name="sound_"> <synopsis>Override the various conference bridge sound files</synopsis> <description><para> All sounds in the conference are customizable using the bridge profile options below. @@ -592,8 +592,8 @@ static void *bridge_profile_find(struct ao2_container *container, const char *ca static struct aco_type bridge_type = { .type = ACO_ITEM, .name = "bridge_profile", - .category_match = ACO_BLACKLIST, - .category = "^general$", + .category_match = ACO_BLACKLIST_EXACT, + .category = "general", .matchfield = "type", .matchvalue = "bridge", .item_alloc = bridge_profile_alloc, @@ -629,8 +629,8 @@ static void *user_profile_find(struct ao2_container *container, const char *cate static struct aco_type user_type = { .type = ACO_ITEM, .name = "user_profile", - .category_match = ACO_BLACKLIST, - .category = "^general$", + .category_match = ACO_BLACKLIST_EXACT, + .category = "general", .matchfield = "type", .matchvalue = "user", .item_alloc = user_profile_alloc, @@ -660,8 +660,8 @@ static void *menu_find(struct ao2_container *container, const char *category) static struct aco_type menu_type = { .type = ACO_ITEM, .name = "menu", - .category_match = ACO_BLACKLIST, - .category = "^general$", + .category_match = ACO_BLACKLIST_EXACT, + .category = "general", .matchfield = "type", .matchvalue = "menu", .item_alloc = menu_alloc, @@ -678,8 +678,8 @@ static struct aco_type *user_types[] = ACO_TYPES(&user_type); static struct aco_type general_type = { .type = ACO_GLOBAL, .name = "global", - .category_match = ACO_WHITELIST, - .category = "^general$", + .category_match = ACO_WHITELIST_EXACT, + .category = "general", }; static struct aco_file confbridge_conf = { @@ -2149,7 +2149,7 @@ int conf_load_config(void) aco_option_register(&cfg_info, "record_file", ACO_EXACT, bridge_types, NULL, OPT_CHAR_ARRAY_T, 0, CHARFLDSET(struct bridge_profile, rec_file)); aco_option_register(&cfg_info, "regcontext", ACO_EXACT, bridge_types, NULL, OPT_CHAR_ARRAY_T, 0, CHARFLDSET(struct bridge_profile, regcontext)); aco_option_register(&cfg_info, "language", ACO_EXACT, bridge_types, "en", OPT_CHAR_ARRAY_T, 0, CHARFLDSET(struct bridge_profile, language)); - aco_option_register_custom(&cfg_info, "^sound_", ACO_REGEX, bridge_types, NULL, sound_option_handler, 0); + aco_option_register_custom(&cfg_info, "sound_", ACO_PREFIX, bridge_types, NULL, sound_option_handler, 0); /* This option should only be used with the CONFBRIDGE dialplan function */ aco_option_register_custom(&cfg_info, "template", ACO_EXACT, bridge_types, NULL, bridge_template_handler, 0); diff --git a/channels/chan_motif.c b/channels/chan_motif.c index 314103765..939380771 100644 --- a/channels/chan_motif.c +++ b/channels/chan_motif.c @@ -543,8 +543,8 @@ static int jingle_endpoint_cmp(void *obj, void *arg, int flags) static struct aco_type endpoint_option = { .type = ACO_ITEM, .name = "endpoint", - .category_match = ACO_BLACKLIST, - .category = "^general$", + .category_match = ACO_BLACKLIST_EXACT, + .category = "general", .item_alloc = jingle_endpoint_alloc, .item_find = jingle_endpoint_find, .item_offset = offsetof(struct jingle_config, endpoints), diff --git a/main/cdr.c b/main/cdr.c index 7f010f0df..0b571fe0e 100644 --- a/main/cdr.c +++ b/main/cdr.c @@ -241,8 +241,29 @@ static struct aco_type general_option = { .type = ACO_GLOBAL, .name = "general", .item_offset = offsetof(struct module_config, general), - .category = "^general$", - .category_match = ACO_WHITELIST, + .category = "general", + .category_match = ACO_WHITELIST_EXACT, +}; + +/*! Config sections used by existing modules. Do not add to this list. */ +static const char *ignore_categories[] = { + "csv", + "custom", + "manager", + "odbc", + "pgsql", + "radius", + "sqlite", + "tds", + "mysql", + NULL, +}; + +static struct aco_type ignore_option = { + .type = ACO_IGNORE, + .name = "modules", + .category = (const char*)ignore_categories, + .category_match = ACO_WHITELIST_ARRAY, }; static void *module_config_alloc(void); @@ -252,8 +273,7 @@ static void module_config_post_apply(void); /*! \brief The file definition */ static struct aco_file module_file_conf = { .filename = "cdr.conf", - .skip_category = "(^csv$|^custom$|^manager$|^odbc$|^pgsql$|^radius$|^sqlite$|^tds$|^mysql$)", - .types = ACO_TYPES(&general_option), + .types = ACO_TYPES(&general_option, &ignore_option), }; CONFIG_INFO_CORE("cdr", cfg_info, module_configs, module_config_alloc, diff --git a/main/cel.c b/main/cel.c index 0cdf1be00..d46f185cf 100644 --- a/main/cel.c +++ b/main/cel.c @@ -244,15 +244,28 @@ static struct aco_type general_option = { .type = ACO_GLOBAL, .name = "general", .item_offset = offsetof(struct cel_config, general), - .category_match = ACO_WHITELIST, - .category = "^general$", + .category_match = ACO_WHITELIST_EXACT, + .category = "general", +}; + +/*! Config sections used by existing modules. Do not add to this list. */ +static const char *ignore_categories[] = { + "manager", + "radius", + NULL, +}; + +static struct aco_type ignore_option = { + .type = ACO_IGNORE, + .name = "modules", + .category = (const char*)ignore_categories, + .category_match = ACO_WHITELIST_ARRAY, }; /*! \brief The config file to be processed for the module. */ static struct aco_file cel_conf = { .filename = "cel.conf", /*!< The name of the config file */ - .types = ACO_TYPES(&general_option), /*!< The mapping object types to be processed */ - .skip_category = "(^manager$|^radius$)", /*!< Config sections used by existing modules. Do not add to this list. */ + .types = ACO_TYPES(&general_option, &ignore_option), /*!< The mapping object types to be processed */ }; static int cel_pre_apply_config(void); diff --git a/main/features_config.c b/main/features_config.c index 2689687cc..e2d405740 100644 --- a/main/features_config.c +++ b/main/features_config.c @@ -219,7 +219,7 @@ The <replaceable>DYNAMIC_FEATURES</replaceable> is a <literal>#</literal> separated list of either applicationmap item names or featuregroup names.</para> </description> - <configOption name="^.*$" regex="true"> + <configOption name=""> <synopsis>A custom feature to invoke during a bridged call</synopsis> <description> <para>Each item listed here is a comma-separated list of parameters that determine @@ -272,7 +272,7 @@ DTMF sequence used to invoke an applicationmap item to be overridden with a different sequence.</para> </description> - <configOption name="^.*$" regex="true"> + <configOption name=""> <synopsis>Applicationmap item to place in the feature group</synopsis> <description> <para>Each item here must be a name of an item in the applicationmap. The @@ -578,24 +578,24 @@ struct features_config { static struct aco_type global_option = { .type = ACO_GLOBAL, .name = "globals", - .category_match = ACO_WHITELIST, - .category = "^general$", + .category_match = ACO_WHITELIST_EXACT, + .category = "general", .item_offset = offsetof(struct features_config, global), }; static struct aco_type featuremap_option = { .type = ACO_GLOBAL, .name = "featuremap", - .category_match = ACO_WHITELIST, - .category = "^featuremap$", + .category_match = ACO_WHITELIST_EXACT, + .category = "featuremap", .item_offset = offsetof(struct features_config, featuremap), }; static struct aco_type applicationmap_option = { .type = ACO_GLOBAL, .name = "applicationmap", - .category_match = ACO_WHITELIST, - .category = "^applicationmap$", + .category_match = ACO_WHITELIST_EXACT, + .category = "applicationmap", .item_offset = offsetof(struct features_config, applicationmap), }; @@ -1851,13 +1851,13 @@ static int load_config(void) aco_option_register_custom(&cfg_info, "automixmon", ACO_EXACT, featuremap_options, DEFAULT_FEATUREMAP_AUTOMIXMON, featuremap_handler, 0); - aco_option_register_custom(&cfg_info, "^.*$", ACO_REGEX, applicationmap_options, + aco_option_register_custom(&cfg_info, "", ACO_PREFIX, applicationmap_options, "", applicationmap_handler, 0); - aco_option_register_custom(&cfg_info, "^.*$", ACO_REGEX, featuregroup_options, + aco_option_register_custom(&cfg_info, "", ACO_PREFIX, featuregroup_options, "", featuregroup_handler, 0); - aco_option_register_custom_nodoc(&cfg_info, "^.*$", ACO_REGEX, parkinglot_options, + aco_option_register_custom_nodoc(&cfg_info, "", ACO_PREFIX, parkinglot_options, "", unsupported_handler, 0); if (aco_process_config(&cfg_info, 0) == ACO_PROCESS_ERROR) { diff --git a/main/named_acl.c b/main/named_acl.c index 3b81c8c38..47787e921 100644 --- a/main/named_acl.c +++ b/main/named_acl.c @@ -82,8 +82,8 @@ static void *named_acl_find(struct ao2_container *container, const char *cat); static struct aco_type named_acl_type = { .type = ACO_ITEM, /*!< named_acls are items stored in containers, not individual global objects */ .name = "named_acl", - .category_match = ACO_BLACKLIST, - .category = "^general$", /*!< Match everything but "general" */ + .category_match = ACO_BLACKLIST_EXACT, + .category = "general", /*!< Match everything but "general" */ .item_alloc = named_acl_alloc, /*!< A callback to allocate a new named_acl based on category */ .item_find = named_acl_find, /*!< A callback to find a named_acl in some container of named_acls */ .item_offset = offsetof(struct named_acl_config, named_acl_list), /*!< Could leave this out since 0 */ diff --git a/main/stasis.c b/main/stasis.c index 63d17dfaf..d9785ce73 100644 --- a/main/stasis.c +++ b/main/stasis.c @@ -1436,8 +1436,8 @@ static struct aco_type threadpool_option = { .type = ACO_GLOBAL, .name = "threadpool", .item_offset = offsetof(struct stasis_config, threadpool_options), - .category = "^threadpool$", - .category_match = ACO_WHITELIST, + .category = "threadpool", + .category_match = ACO_WHITELIST_EXACT, }; static struct aco_type *threadpool_options[] = ACO_TYPES(&threadpool_option); @@ -1447,8 +1447,8 @@ static struct aco_type declined_option = { .type = ACO_GLOBAL, .name = "declined_message_types", .item_offset = offsetof(struct stasis_config, declined_message_types), - .category_match = ACO_WHITELIST, - .category = "^declined_message_types$", + .category_match = ACO_WHITELIST_EXACT, + .category = "declined_message_types", }; struct aco_type *declined_options[] = ACO_TYPES(&declined_option); diff --git a/main/udptl.c b/main/udptl.c index 44e9eb9bb..83989f738 100644 --- a/main/udptl.c +++ b/main/udptl.c @@ -239,9 +239,9 @@ static int udptl_pre_apply_config(void); static struct aco_type general_option = { .type = ACO_GLOBAL, .name = "global", - .category_match = ACO_WHITELIST, + .category_match = ACO_WHITELIST_EXACT, .item_offset = offsetof(struct udptl_config, general), - .category = "^general$", + .category = "general", }; static struct aco_type *general_options[] = ACO_TYPES(&general_option); diff --git a/res/ari/config.c b/res/ari/config.c index 2d3a80d0b..275f41d96 100644 --- a/res/ari/config.c +++ b/res/ari/config.c @@ -39,8 +39,8 @@ static struct aco_type general_option = { .type = ACO_GLOBAL, .name = "general", .item_offset = offsetof(struct ast_ari_conf, general), - .category = "^general$", - .category_match = ACO_WHITELIST, + .category = "general", + .category_match = ACO_WHITELIST_EXACT, }; static struct aco_type *general_options[] = ACO_TYPES(&general_option); @@ -156,8 +156,8 @@ static void *user_find(struct ao2_container *tmp_container, const char *cat) static struct aco_type user_option = { .type = ACO_ITEM, .name = "user", - .category_match = ACO_BLACKLIST, - .category = "^general$", + .category_match = ACO_BLACKLIST_EXACT, + .category = "general", .matchfield = "type", .matchvalue = "user", .item_alloc = user_alloc, diff --git a/res/res_hep.c b/res/res_hep.c index 3b953b7c1..a91b7ec77 100644 --- a/res/res_hep.c +++ b/res/res_hep.c @@ -260,8 +260,8 @@ static struct aco_type global_option = { .type = ACO_GLOBAL, .name = "general", .item_offset = offsetof(struct module_config, general), - .category_match = ACO_WHITELIST, - .category = "^general$", + .category_match = ACO_WHITELIST_EXACT, + .category = "general", }; struct aco_type *global_options[] = ACO_TYPES(&global_option); diff --git a/res/res_parking.c b/res/res_parking.c index 593134b60..ddf801245 100644 --- a/res/res_parking.c +++ b/res/res_parking.c @@ -291,8 +291,8 @@ static struct aco_type global_option = { .type = ACO_GLOBAL, .name = "globals", .item_offset = offsetof(struct parking_config, global), - .category_match = ACO_WHITELIST, - .category = "^general$", + .category_match = ACO_WHITELIST_EXACT, + .category = "general", }; struct aco_type *global_options[] = ACO_TYPES(&global_option); @@ -300,8 +300,8 @@ struct aco_type *global_options[] = ACO_TYPES(&global_option); static struct aco_type parking_lot_type = { .type = ACO_ITEM, .name = "parking_lot", - .category_match = ACO_BLACKLIST, - .category = "^(general)$", + .category_match = ACO_BLACKLIST_EXACT, + .category = "general", .item_alloc = parking_lot_cfg_alloc, .item_find = named_item_find, .item_offset = offsetof(struct parking_config, parking_lots), diff --git a/res/res_pjsip_notify.c b/res/res_pjsip_notify.c index 8258b3857..fdc7ecf54 100644 --- a/res/res_pjsip_notify.c +++ b/res/res_pjsip_notify.c @@ -82,7 +82,7 @@ order; any other header is treated as part of the SIP request.</para> </description> - <configOption name="^.*$"> + <configOption name=""> <synopsis>A key/value pair to add to a NOTIFY request.</synopsis> <description> <para>If the key is <literal>Content</literal>, @@ -234,8 +234,8 @@ static void *notify_cfg_alloc(void) static struct aco_type notify_option = { .type = ACO_ITEM, .name = "notify", - .category_match = ACO_BLACKLIST, - .category = "^general$", + .category_match = ACO_BLACKLIST_EXACT, + .category = "general", .item_offset = offsetof(struct notify_cfg, notify_options), .item_alloc = notify_option_alloc, .item_find = notify_option_find @@ -993,7 +993,7 @@ static int load_module(void) return AST_MODULE_LOAD_DECLINE; } - aco_option_register_custom(¬ify_cfg, "^.*$", ACO_REGEX, notify_options, + aco_option_register_custom(¬ify_cfg, "", ACO_PREFIX, notify_options, "", notify_option_handler, 0); if (aco_process_config(¬ify_cfg, 0)) { diff --git a/res/res_statsd.c b/res/res_statsd.c index b8e4d0475..67166e820 100644 --- a/res/res_statsd.c +++ b/res/res_statsd.c @@ -233,8 +233,8 @@ static struct aco_type global_option = { .type = ACO_GLOBAL, .name = "global", .item_offset = offsetof(struct conf, global), - .category = "^general$", - .category_match = ACO_WHITELIST + .category = "general", + .category_match = ACO_WHITELIST_EXACT, }; static struct aco_type *global_options[] = ACO_TYPES(&global_option); diff --git a/res/res_xmpp.c b/res/res_xmpp.c index 1b0ae427b..41f89961c 100644 --- a/res/res_xmpp.c +++ b/res/res_xmpp.c @@ -822,8 +822,8 @@ static struct aco_type global_option = { .type = ACO_GLOBAL, .name = "global", .item_offset = offsetof(struct xmpp_config, global), - .category_match = ACO_WHITELIST, - .category = "^general$", + .category_match = ACO_WHITELIST_EXACT, + .category = "general", }; struct aco_type *global_options[] = ACO_TYPES(&global_option); @@ -831,8 +831,8 @@ struct aco_type *global_options[] = ACO_TYPES(&global_option); static struct aco_type client_option = { .type = ACO_ITEM, .name = "client", - .category_match = ACO_BLACKLIST, - .category = "^(general)$", + .category_match = ACO_BLACKLIST_EXACT, + .category = "general", .item_alloc = ast_xmpp_client_config_alloc, .item_find = xmpp_config_find, .item_prelink = xmpp_config_prelink, diff --git a/tests/test_config.c b/tests/test_config.c index c58bdc70d..a2ff328ff 100644 --- a/tests/test_config.c +++ b/tests/test_config.c @@ -1458,13 +1458,19 @@ static struct aco_type global = { static struct aco_type global_defaults = { .type = ACO_GLOBAL, .item_offset = offsetof(struct test_config, global_defaults), - .category_match = ACO_WHITELIST, - .category = "^global_defaults$", + .category_match = ACO_WHITELIST_EXACT, + .category = "global_defaults", +}; +static const char *item_blacklist[] = { + "global", + "global_defaults", + NULL, }; + static struct aco_type item = { .type = ACO_ITEM, - .category_match = ACO_BLACKLIST, - .category = "^(global|global_defaults)$", + .category_match = ACO_BLACKLIST_ARRAY, + .category = (const char *)item_blacklist, .item_alloc = test_item_alloc, .item_find = test_item_find, .item_offset = offsetof(struct test_config, items), |