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);
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);
log(ALL, LOG_INFO,
"Setup mc_event ue trigger `%s`\n",
trigger);
- mc_ue_trigger = 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)
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");
}
if (child == 0) {
- execve(path, argv, env);
+ execve(trigger, argv, env);
_exit(127);
} else {
waitpid(child, &status, 0);
}
}
-int trigger_check(const char *s)
+const char *trigger_check(const char *s)
{
char *name;
int rc;
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;
}
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