From f2570c1b7f5813e087c867cf002f36f0c09b5cfa Mon Sep 17 00:00:00 2001 From: Vilbrekin Date: Sat, 25 Aug 2012 19:14:00 +0200 Subject: [PATCH] Replace hard-code with new ScriptsInterpreter configuration property. This new setting allows choosing a custom script interpreter used for the various tinc callbacks. If none is specified, the script itself is called as executable (as before). This is particularly useful when storing tinc configuration and script on a mount point with no-exec attribute. --- src/process.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/process.c b/src/process.c index 41a1468d..a6822268 100644 --- a/src/process.c +++ b/src/process.c @@ -358,6 +358,7 @@ bool execute_script(const char *name, char **envp) { int status, len; char *scriptname; int i; + char *aInterpreter = NULL; #ifndef HAVE_MINGW len = xasprintf(&scriptname, "\"%s/%s\"", confbase, name); @@ -376,17 +377,21 @@ bool execute_script(const char *name, char **envp) { free(scriptname); return true; } - else +#endif + + // Custom scripts interpreter + if(get_config_string(lookup_config(config_tree, "ScriptsInterpreter"), &aInterpreter)) { - // Ugly hard-code allowing execution of scripts on android without execution flag (such as on /sdcard) + // Force custom scripts interpreter allowing execution of scripts on android without execution flag (such as on /sdcard) free(scriptname); - len = xasprintf(&scriptname, "/system/bin/sh \"%s/%s\"", confbase, name); + len = xasprintf(&scriptname, "%s \"%s/%s\"", aInterpreter, confbase, name); if(len < 0) { + free(aInterpreter); return false; } } -#endif + free(aInterpreter); ifdebug(STATUS) logger(LOG_INFO, "Executing script %s", name); -- 2.39.5