aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-base-manager.c8
-rw-r--r--src/mm-filter.c39
-rw-r--r--src/mm-filter.h9
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,