X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=execute.c;h=68a60bfedf9f918cdb553f60c4a8150bbdec4946;hb=11b56832eafd3a37e7a9f92bc0f19fbdc187ffac;hp=3ed645a554a20dcedc4564ecb3e537ca2b4ef1ea;hpb=802014dde0c3b25a48a4c6e5b09d20f52fb94324;p=fips diff --git a/execute.c b/execute.c index 3ed645a..68a60bf 100644 --- a/execute.c +++ b/execute.c @@ -19,12 +19,8 @@ * THE SOFTWARE. */ -#include "config.h" +#include "fips.h" -#include -#include - -#include #include #include @@ -81,20 +77,20 @@ get_bin_name (void *ctx) * of the filename being linked to). Go figure. */ int name_len = PATH_MAX + 1; - name = talloc_size (ctx, name_len - 1); + name = talloc_size (ctx, name_len); if (name == NULL) { fprintf (stderr, "Out of memory.\n"); exit (1); } - name_len = readlink (link, name, name_len); + name_len = readlink (link, name, name_len - 1); if (name_len < 0) { fprintf (stderr, "Failed to readlink %s: %s\n", link, strerror (errno)); exit (1); } - name[name_len + 1] = '\0'; + name[name_len] = '\0'; return name; } @@ -301,10 +297,21 @@ fork_exec_with_fips_preload_and_wait (char * const argv[]) if (pid == 0) { void *ctx = talloc_new (NULL); char *lib_path; + char *ld_preload_value; lib_path = find_libfips_path (ctx, argv[0]); - setenv ("LD_PRELOAD", lib_path, 1); + ld_preload_value = getenv ("LD_PRELOAD"); + + if (ld_preload_value) { + ld_preload_value = talloc_asprintf(ctx, "%s:%s", + ld_preload_value, + lib_path); + } else { + ld_preload_value = lib_path; + } + + setenv ("LD_PRELOAD", ld_preload_value, 1); talloc_free (ctx);