diff options
Diffstat (limited to 'lib/rpmscript.c')
-rw-r--r-- | lib/rpmscript.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/lib/rpmscript.c b/lib/rpmscript.c index 57c24c674..f8c5fc74a 100644 --- a/lib/rpmscript.c +++ b/lib/rpmscript.c @@ -14,6 +14,8 @@ #include "rpmio/rpmlua.h" #include "lib/rpmscript.h" +#include "lib/rpmplugins.h" /* rpm plugins hooks */ + #include "debug.h" struct rpmScript_s { @@ -91,7 +93,7 @@ static rpmRC runLuaScript(int selinux, ARGV_const_t prefixes, static const char * const SCRIPT_PATH = "PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin"; -static void doScriptExec(int selinux, ARGV_const_t argv, ARGV_const_t prefixes, +static void doScriptExec(rpmPlugins plugins, int selinux, ARGV_const_t argv, ARGV_const_t prefixes, FD_t scriptFd, FD_t out) { int pipes[2]; @@ -169,7 +171,10 @@ static void doScriptExec(int selinux, ARGV_const_t argv, ARGV_const_t prefixes, } if (xx == 0) { - xx = execv(argv[0], argv); + /* Run script setup hook for all plugins */ + if (rpmpluginsCallScriptSetup(plugins, argv[0]) != RPMRC_FAIL) { + xx = execv(argv[0], argv); + } } } _exit(127); /* exit 127 for compatibility with bash(1) */ @@ -202,7 +207,7 @@ exit: /** * Run an external script. */ -static rpmRC runExtScript(int selinux, ARGV_const_t prefixes, +static rpmRC runExtScript(rpmPlugins plugins, int selinux, ARGV_const_t prefixes, const char *sname, rpmlogLvl lvl, FD_t scriptFd, ARGV_t * argvp, const char *script, int arg1, int arg2) { @@ -258,7 +263,7 @@ static rpmRC runExtScript(int selinux, ARGV_const_t prefixes, } else if (pid == 0) {/* Child */ rpmlog(RPMLOG_DEBUG, "%s: execv(%s) pid %d\n", sname, *argvp[0], (unsigned)getpid()); - doScriptExec(selinux, *argvp, prefixes, scriptFd, out); + doScriptExec(plugins, selinux, *argvp, prefixes, scriptFd, out); } do { @@ -297,7 +302,7 @@ exit: } rpmRC rpmScriptRun(rpmScript script, int arg1, int arg2, FD_t scriptFd, - ARGV_const_t prefixes, int warn_only, int selinux) + ARGV_const_t prefixes, int warn_only, int selinux, rpmPlugins plugins) { ARGV_t args = NULL; rpmlogLvl lvl = warn_only ? RPMLOG_WARNING : RPMLOG_ERR; @@ -315,7 +320,7 @@ rpmRC rpmScriptRun(rpmScript script, int arg1, int arg2, FD_t scriptFd, if (rstreq(args[0], "<lua>")) { rc = runLuaScript(selinux, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2); } else { - rc = runExtScript(selinux, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2); + rc = runExtScript(plugins, selinux, prefixes, script->descr, lvl, scriptFd, &args, script->body, arg1, arg2); } argvFree(args); |