]> www.infradead.org Git - users/mchehab/rasdaemon.git/commitdiff
trigger: parse only once TRIGGER_DIR env variable
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Mon, 15 Jul 2024 11:40:37 +0000 (13:40 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 16 Jul 2024 05:44:01 +0000 (07:44 +0200)
Instead of parsing TRIGGER_DIR every time a new event happens,
store the trigger full path, simplifying the logic and avoiding
memory leaks.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
ras-mc-handler.c
trigger.c
trigger.h

index 26ff0be1e9aed04437cca942695a2bc6384964ec..7bc6c91e3529e3d0a28a27dc5fa12993f649c8c9 100644 (file)
@@ -40,7 +40,9 @@ void mc_event_trigger_setup(void)
 
        trigger = getenv("MC_CE_TRIGGER");
        if (trigger && strcmp(trigger, "")) {
-               if (trigger_check(trigger) < 0) {
+               mc_ce_trigger = trigger_check(trigger);
+
+               if (!mc_ce_trigger) {
                        log(ALL, LOG_ERR,
                            "Cannot access mc_event ce trigger `%s`\n",
                            trigger);
@@ -48,13 +50,14 @@ void mc_event_trigger_setup(void)
                        log(ALL, LOG_INFO,
                            "Setup mc_event ce trigger `%s`\n",
                            trigger);
-                       mc_ce_trigger = trigger;
                }
        }
 
        trigger = getenv("MC_UE_TRIGGER");
        if (trigger && strcmp(trigger, "")) {
-               if (trigger_check(trigger) < 0) {
+               mc_ue_trigger = trigger_check(trigger);
+
+               if (!mc_ue_trigger) {
                        log(ALL, LOG_ERR,
                            "Cannot access mc_event ue trigger `%s`\n",
                            trigger);
@@ -62,7 +65,6 @@ void mc_event_trigger_setup(void)
                        log(ALL, LOG_INFO,
                            "Setup mc_event ue trigger `%s`\n",
                            trigger);
-                       mc_ue_trigger = trigger;
                }
        }
 }
@@ -73,9 +75,6 @@ static void run_mc_trigger(struct ras_mc_event *ev, const char *mc_trigger)
        int ei = 0;
        int i;
 
-       if (!strcmp(mc_trigger, ""))
-               return;
-
        if (asprintf(&env[ei++], "PATH=%s", getenv("PATH") ?: "/sbin:/usr/sbin:/bin:/usr/bin") < 0)
                goto free;
        if (asprintf(&env[ei++], "TIMESTAMP=%s", ev->timestamp) < 0)
index 0d91e05d435fb03fa2d4c15a89b3875f130dd6a5..0ee1a5e348f42798b33c5a7270246200eb609f53 100644 (file)
--- a/trigger.c
+++ b/trigger.c
@@ -9,15 +9,10 @@
 void run_trigger(const char *trigger, char *argv[], char **env, const char *reporter)
 {
        pid_t child;
-       char *path;
        int status;
-       char *trigger_dir = getenv("TRIGGER_DIR");
 
        log(SYSLOG, LOG_INFO, "Running trigger `%s' (reporter: %s)\n", trigger, reporter);
 
-       if (asprintf(&path, "%s/%s", trigger_dir, trigger) < 0)
-               return;
-
        child = fork();
        if (child < 0) {
                log(SYSLOG, LOG_ERR, "Cannot create process for trigger");
@@ -25,7 +20,7 @@ void run_trigger(const char *trigger, char *argv[], char **env, const char *repo
        }
 
        if (child == 0) {
-               execve(path, argv, env);
+               execve(trigger, argv, env);
                _exit(127);
        } else {
                waitpid(child, &status, 0);
@@ -39,7 +34,7 @@ void run_trigger(const char *trigger, char *argv[], char **env, const char *repo
        }
 }
 
-int trigger_check(const char *s)
+const char *trigger_check(const char *s)
 {
        char *name;
        int rc;
@@ -47,14 +42,14 @@ int trigger_check(const char *s)
 
        if (trigger_dir) {
                if (asprintf(&name, "%s/%s", trigger_dir, s) < 0)
-                       return -1;
-       } else
-               name = s;
+                       return NULL;
+                s = name;
+       }
 
-       rc = access(name, R_OK|X_OK);
+       rc = access(s, R_OK|X_OK);
 
-       if (trigger_dir)
-               free(name);
+       if (!rc)
+               return(s);
 
-       return rc;
+       return NULL;
 }
index ccd1a9bd0f9f8ac7329812fc9bb2187bda6f2dbc..aea29b5fd4e87753b8bedbff1ec457178216cef3 100644 (file)
--- a/trigger.h
+++ b/trigger.h
@@ -6,7 +6,7 @@ struct event_trigger {
         void (*setup)(void);
 };
 
-int trigger_check(const char *s);
+const char *trigger_check(const char *s);
 void run_trigger(const char *trigger, char *argv[], char **env, const char* reporter);
 
 #endif