diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-base-manager.c | 8 | ||||
-rw-r--r-- | src/mm-filter.c | 39 | ||||
-rw-r--r-- | src/mm-filter.h | 9 |
3 files changed, 48 insertions, 8 deletions
diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c index cb328d04..02a1106a 100644 --- a/src/mm-base-manager.c +++ b/src/mm-base-manager.c @@ -1127,13 +1127,7 @@ initable_init (GInitable *initable, #endif /* Create filter */ - priv->filter = mm_filter_new (MM_FILTER_RULE_VIRTUAL | - MM_FILTER_RULE_NET | - MM_FILTER_RULE_CDC_WDM | - MM_FILTER_RULE_TTY | - MM_FILTER_RULE_TTY_BLACKLIST | - MM_FILTER_RULE_TTY_MANUAL_SCAN_ONLY | - MM_FILTER_RULE_TTY_PLATFORM_DRIVER); + priv->filter = mm_filter_new (MM_FILTER_RULE_ALL); /* Create plugin manager */ priv->plugin_manager = mm_plugin_manager_new (priv->plugin_dir, error); diff --git a/src/mm-filter.c b/src/mm-filter.c index 4f9e4c79..ee82c1dc 100644 --- a/src/mm-filter.c +++ b/src/mm-filter.c @@ -106,6 +106,43 @@ mm_filter_port (MMFilter *self, } /*****************************************************************************/ +/* Use filter rule names as environment variables to control them on startup: + * - MM_FILTER_RULE_XXX=1 to explicitly enable the rule. + * - MM_FILTER_RULE_XXX=0 to explicitly disable the rule. + */ + +static MMFilterRule +filter_rule_env_process (MMFilterRule enabled_rules) +{ + MMFilterRule updated_rules = enabled_rules; + GFlagsClass *flags_class; + guint i; + + flags_class = g_type_class_ref (MM_TYPE_FILTER_RULE); + + for (i = 0; (1 << i) & MM_FILTER_RULE_ALL; i++) { + GFlagsValue *flags_value; + const gchar *env_value; + + flags_value = g_flags_get_first_value (flags_class, (1 << i)); + g_assert (flags_value); + + env_value = g_getenv (flags_value->value_name); + if (!env_value) + continue; + + if (g_str_equal (env_value, "0")) + updated_rules &= ~(1 << i); + else if (g_str_equal (env_value, "1")) + updated_rules |= (1 << i); + } + + g_type_class_unref (flags_class); + + return updated_rules; +} + +/*****************************************************************************/ MMFilter * mm_filter_new (MMFilterRule enabled_rules) @@ -113,7 +150,7 @@ mm_filter_new (MMFilterRule enabled_rules) MMFilter *self; self = g_object_new (MM_TYPE_FILTER, - MM_FILTER_ENABLED_RULES, enabled_rules, + MM_FILTER_ENABLED_RULES, filter_rule_env_process (enabled_rules), NULL); #define RULE_ENABLED_STR(flag) ((self->priv->enabled_rules & flag) ? "yes" : "no") diff --git a/src/mm-filter.h b/src/mm-filter.h index 80a31594..bde394c6 100644 --- a/src/mm-filter.h +++ b/src/mm-filter.h @@ -54,6 +54,15 @@ typedef enum { /*< underscore_name=mm_filter_rule >*/ MM_FILTER_RULE_TTY_PLATFORM_DRIVER = 1 << 6, } MMFilterRule; +#define MM_FILTER_RULE_ALL \ + (MM_FILTER_RULE_VIRTUAL | \ + MM_FILTER_RULE_NET | \ + MM_FILTER_RULE_CDC_WDM | \ + MM_FILTER_RULE_TTY | \ + MM_FILTER_RULE_TTY_BLACKLIST | \ + MM_FILTER_RULE_TTY_MANUAL_SCAN_ONLY | \ + MM_FILTER_RULE_TTY_PLATFORM_DRIVER) + MMFilter *mm_filter_new (MMFilterRule enabled_rules); gboolean mm_filter_port (MMFilter *self, |