From 0ba807b478bc05e678f4772464ca2a0f2b64a12b Mon Sep 17 00:00:00 2001 From: Nedko Arnaudov Date: Fri, 20 May 2011 01:02:37 +0300 Subject: [PATCH] ladishd: don't override existing LD_PRELOAD valgrind for example uses LD_PRELOAD as well. --- daemon/loader.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/daemon/loader.c b/daemon/loader.c index ad9b9831..c869d991 100644 --- a/daemon/loader.c +++ b/daemon/loader.c @@ -2,7 +2,7 @@ /* * LADI Session Handler (ladish) * - * Copyright (C) 2008, 2009, 2010 Nedko Arnaudov + * Copyright (C) 2008, 2009, 2010, 2011 Nedko Arnaudov * Copyright (C) 2008 Juuso Alasuutari * Copyright (C) 2002 Robert Ham * @@ -38,6 +38,7 @@ #include "loader.h" #include "../proxies/conf_proxy.h" #include "conf.h" +#include "../common/catdup.h" #define XTERM_COMMAND_EXTENSION "&& sh || sh" @@ -483,6 +484,35 @@ loader_run(void) loader_childs_bury(); } +static void set_ldpreload(void) +{ + const char * old; + char * new; + + old = getenv("LD_PRELOAD"); + if (old != NULL) + { + new = catdup3("libalsapid.so", " ", old); + if (new == NULL) + { + fprintf(stderr, "Memory allocation failure. Cannot hook libalsapid.so through LD_PRELOAD.\n"); + return; + } + } + else + { + new = "libalsapid.so"; + } + + printf("LD_PRELOAD set to \"%s\"\n", new); + setenv("LD_PRELOAD", new, 1); + + if (old) + { + free(new); + } +} + bool loader_execute( const char * vgraph_name, @@ -600,7 +630,7 @@ loader_execute( dup2(stderr_pipe[1], fileno(stderr)); } - putenv("LD_PRELOAD=libalsapid.so"); + set_ldpreload(); loader_exec_program(commandline, working_dir, run_in_terminal, vgraph_name, project_name, app_name);