From 5b7c745ceb37fd22f7a918858ee813d348f970d1 Mon Sep 17 00:00:00 2001 From: Fedor Date: Fri, 25 Dec 2009 01:36:37 -0500 Subject: [PATCH] Hotplug2: process rules on "remove" events --- release/src/router/hotplug2/hotplug2.c | 4 ++-- release/src/router/hotplug2/rules.c | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/release/src/router/hotplug2/hotplug2.c b/release/src/router/hotplug2/hotplug2.c index 6a91ca4091..b78c27cfac 100644 --- a/release/src/router/hotplug2/hotplug2.c +++ b/release/src/router/hotplug2/hotplug2.c @@ -549,7 +549,7 @@ end_rules: if (cur_seqnum > highest_seqnum) highest_seqnum = cur_seqnum; - if (tmpevent->action == ACTION_ADD && (!dumb || modalias != NULL)) { + if (tmpevent->action == ACTION_REMOVE || (!dumb || modalias != NULL)) { /* * We have more children than we want. Wait until SIGCHLD handler reduces * their numbers. @@ -573,7 +573,7 @@ end_rules: #ifdef HAVE_RULES if (!dumb) perform_action(dup_hotplug2_event(tmpevent), rules); - else + else if (tmpevent->action == ACTION_ADD) #endif perform_dumb_action(dup_hotplug2_event(tmpevent), modalias); exit(0); diff --git a/release/src/router/hotplug2/rules.c b/release/src/router/hotplug2/rules.c index 1d192f988c..e1e211e996 100644 --- a/release/src/router/hotplug2/rules.c +++ b/release/src/router/hotplug2/rules.c @@ -315,12 +315,22 @@ static int rule_condition_eval(struct hotplug2_event_t *event, struct condition_ } int rule_execute(struct hotplug2_event_t *event, struct rule_t *rule) { - int i, last_rv; + int i, last_rv, remove; + remove = 0; for (i = 0; i < rule->conditions_c; i++) { if (rule_condition_eval(event, &(rule->conditions[i])) != EVAL_MATCH) return 0; + /* Only process "remove" events if "ACTION == remove" + * condition is explicitly specified. + */ + if ((event->action == ACTION_REMOVE) && + (rule->conditions[i].type == COND_MATCH_CMP) && + (!strcmp(rule->conditions[i].key, "ACTION"))) + remove = 1; } + if ((event->action == ACTION_REMOVE) && !remove) + return 0; last_rv = 0; -- 2.11.4.GIT