* THE SOFTWARE.
*/
-#include "config.h"
+#include "fips.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <string.h>
#include <errno.h>
#include <unistd.h>
* 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;
}
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);