]> git.cworth.org Git - fips/blobdiff - execute.c
Fix glwrap.c to workaround 'const' changes in OpenGL headers.
[fips] / execute.c
index 3ed645a554a20dcedc4564ecb3e537ca2b4ef1ea..68a60bfedf9f918cdb553f60c4a8150bbdec4946 100644 (file)
--- a/execute.c
+++ b/execute.c
  * THE SOFTWARE.
  */
 
-#include "config.h"
+#include "fips.h"
 
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <string.h>
 #include <errno.h>
 
 #include <unistd.h>
@@ -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);