mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-22 10:48:02 +00:00
rtld: add direct-exec option -o
allowing to set any known LD_ parameter for the current rtld invocation, but without polluting the activated' binary environment. In other words, the set parameter is not exported into the environment. Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D44988
This commit is contained in:
parent
2965ae5914
commit
d1cd0cc32b
|
@ -26,7 +26,7 @@
|
||||||
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd October 29, 2023
|
.Dd April 28, 2024
|
||||||
.Dt RTLD 1
|
.Dt RTLD 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -352,6 +352,7 @@ The syntax of the direct invocation is
|
||||||
.Op Fl b Ar exe
|
.Op Fl b Ar exe
|
||||||
.Op Fl d
|
.Op Fl d
|
||||||
.Op Fl f Ar fd
|
.Op Fl f Ar fd
|
||||||
|
.Op Fl o Ar OPT=NAME
|
||||||
.Op Fl p
|
.Op Fl p
|
||||||
.Op Fl u
|
.Op Fl u
|
||||||
.Op Fl v
|
.Op Fl v
|
||||||
|
@ -387,6 +388,23 @@ If this option is specified,
|
||||||
is only used to provide the
|
is only used to provide the
|
||||||
.Va argv[0]
|
.Va argv[0]
|
||||||
value to the program.
|
value to the program.
|
||||||
|
.It Fl o Ar OPT=VALUE
|
||||||
|
Set the
|
||||||
|
.Ar OPT
|
||||||
|
configuration variable to the value
|
||||||
|
.Ar VALUE .
|
||||||
|
The possible variable names are listed above as
|
||||||
|
.Ev LD_
|
||||||
|
prefixed environment variables, but here are referenced without the
|
||||||
|
.Ev LD_
|
||||||
|
prefix.
|
||||||
|
A configuration variable set this way does not leak into
|
||||||
|
the activated image's environment.
|
||||||
|
.Pp
|
||||||
|
The option can be repeated as many times as needed to set
|
||||||
|
all configuration parameters.
|
||||||
|
The parameters set using this option have priority over
|
||||||
|
the same parameters assigned via environment.
|
||||||
.It Fl p
|
.It Fl p
|
||||||
If the
|
If the
|
||||||
.Pa image_path
|
.Pa image_path
|
||||||
|
|
|
@ -6157,6 +6157,35 @@ parse_args(char* argv[], int argc, bool *use_pathp, int *fdp,
|
||||||
*fdp = fd;
|
*fdp = fd;
|
||||||
seen_f = true;
|
seen_f = true;
|
||||||
break;
|
break;
|
||||||
|
} else if (opt == 'o') {
|
||||||
|
struct ld_env_var_desc *l;
|
||||||
|
char *n, *v;
|
||||||
|
u_int ll;
|
||||||
|
|
||||||
|
if (j != arglen - 1) {
|
||||||
|
_rtld_error("Invalid options: %s", arg);
|
||||||
|
rtld_die();
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
n = argv[i];
|
||||||
|
v = strchr(n, '=');
|
||||||
|
if (v == NULL) {
|
||||||
|
_rtld_error("No '=' in -o parameter");
|
||||||
|
rtld_die();
|
||||||
|
}
|
||||||
|
for (ll = 0; ll < nitems(ld_env_vars); ll++) {
|
||||||
|
l = &ld_env_vars[ll];
|
||||||
|
if (v - n == (ptrdiff_t)strlen(l->n) &&
|
||||||
|
strncmp(n, l->n, v - n) == 0) {
|
||||||
|
l->val = v + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ll == nitems(ld_env_vars)) {
|
||||||
|
_rtld_error("Unknown LD_ option %s",
|
||||||
|
n);
|
||||||
|
rtld_die();
|
||||||
|
}
|
||||||
} else if (opt == 'p') {
|
} else if (opt == 'p') {
|
||||||
*use_pathp = true;
|
*use_pathp = true;
|
||||||
} else if (opt == 'u') {
|
} else if (opt == 'u') {
|
||||||
|
@ -6240,6 +6269,7 @@ print_usage(const char *argv0)
|
||||||
" -b <exe> Execute <exe> instead of <binary>, arg0 is <binary>\n"
|
" -b <exe> Execute <exe> instead of <binary>, arg0 is <binary>\n"
|
||||||
" -d Ignore lack of exec permissions for the binary\n"
|
" -d Ignore lack of exec permissions for the binary\n"
|
||||||
" -f <FD> Execute <FD> instead of searching for <binary>\n"
|
" -f <FD> Execute <FD> instead of searching for <binary>\n"
|
||||||
|
" -o <OPT>=<VAL> Set LD_<OPT> to <VAL>, without polluting env\n"
|
||||||
" -p Search in PATH for named binary\n"
|
" -p Search in PATH for named binary\n"
|
||||||
" -u Ignore LD_ environment variables\n"
|
" -u Ignore LD_ environment variables\n"
|
||||||
" -v Display identification information\n"
|
" -v Display identification information\n"
|
||||||
|
|
Loading…
Reference in a new issue