pack: fakechroot: Honor $LD_LIBRARY_PATH.

Until now, when using the "fakechroot" engine, $LD_LIBRARY_PATH would
always be ignored.  However, it's useful in some cases to allow users to
specify LD_LIBRARY_PATH, so honor it.

* gnu/packages/aux-files/run-in-namespace.c (concat_paths): New function.
(exec_with_loader): Concatenante $LD_LIBRARY_PATH to the relocated
AUDIT_LIBRARY_PATH.
This commit is contained in:
Ludovic Courtès 2020-08-27 15:08:05 +02:00 committed by Ludovic Courtès
parent 8df6900dff
commit 28dce8f02d
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -405,6 +405,23 @@ relocated_search_path (const char *path[], const char *store)
return new_path;
}
/* Concatenate PATH1 and PATH2 with a colon in between. The result is
potentially malloc'd. */
static char *
concat_paths (const char *path1, const char *path2)
{
if (path1[0] == '\0')
return (char *) path2;
else
{
char *result = xmalloc (strlen (path1) + strlen (path2) + 2);
strcpy (result, path1);
strcat (result, ":");
strcat (result, path2);
return result;
}
}
/* Execute the wrapped program by invoking the loader (ld.so) directly,
passing it the audit module and preloading libfakechroot.so. */
static void
@ -421,9 +438,12 @@ exec_with_loader (const char *store, int argc, char *argv[])
loader_argv[2] = concat (store,
LOADER_AUDIT_MODULE + sizeof original_store);
/* The audit module depends on libc.so and libgcc_s.so. */
/* The audit module depends on libc.so and libgcc_s.so so honor
AUDIT_LIBRARY_PATH. Additionally, honor $LD_LIBRARY_PATH if set. */
loader_argv[3] = "--library-path";
loader_argv[4] = relocated_search_path (audit_library_path, store);
loader_argv[4] =
concat_paths (getenv ("LD_LIBRARY_PATH") ?: "",
relocated_search_path (audit_library_path, store));
loader_argv[5] = "--preload";
loader_argv[6] = concat (store,