aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/jexec/jexec.c
diff options
context:
space:
mode:
authorJesús Daniel Colmenares Oviedo <dtxdf@FreeBSD.org>2026-01-15 05:25:25 +0000
committerJesús Daniel Colmenares Oviedo <dtxdf@FreeBSD.org>2026-01-15 05:33:25 +0000
commit5810786791d61aa085170afd5a7d449dbd1ec7c6 (patch)
tree600304e92d47971583175afded28639384063ca6 /usr.sbin/jexec/jexec.c
parent008e5703e184cb5fe2079cfbdef5091add2ab3e1 (diff)
Diffstat (limited to 'usr.sbin/jexec/jexec.c')
-rw-r--r--usr.sbin/jexec/jexec.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/usr.sbin/jexec/jexec.c b/usr.sbin/jexec/jexec.c
index a1e443c5ba04..03be63cf8799 100644
--- a/usr.sbin/jexec/jexec.c
+++ b/usr.sbin/jexec/jexec.c
@@ -59,21 +59,29 @@ main(int argc, char *argv[])
int jid;
login_cap_t *lcap = NULL;
int ch, clean, dflag, uflag, Uflag;
+ int env_argc = argc;
+ char **env_argv = argv;
char *cleanenv;
const struct passwd *pwd = NULL;
const char *username, *shell, *term;
const char *workdir;
+ const char *jexec_args = "d:e:lnu:U:";
ch = clean = dflag = uflag = Uflag = 0;
username = NULL;
workdir = "/";
- while ((ch = getopt(argc, argv, "d:lnu:U:")) != -1) {
+ while ((ch = getopt(argc, argv, jexec_args)) != -1) {
switch (ch) {
case 'd':
workdir = optarg;
dflag = 1;
break;
+ case 'e':
+ /* Used later. */
+ if (strchr(optarg, '=') == NULL)
+ errx(1, "%s: Invalid environment variable.", optarg);
+ break;
case 'l':
clean = 1;
break;
@@ -140,6 +148,19 @@ main(int argc, char *argv[])
endpwent();
}
+ optreset = 1;
+ optind = 1;
+
+ /* Custom environment */
+ while ((ch = getopt(env_argc, env_argv, jexec_args)) != -1) {
+ switch (ch) {
+ case 'e':
+ if (putenv(optarg) == -1)
+ err(1, "putenv");
+ break;
+ }
+ }
+
/* Run the specified command, or the shell */
if (argc > 1) {
if (execvp(argv[1], argv + 1) < 0)
@@ -192,7 +213,7 @@ usage(void)
{
fprintf(stderr, "%s\n",
- "usage: jexec [-l] [-d working-directory] [-u username | -U username] jail\n"
- " [command ...]");
+ "usage: jexec [-l] [-d working-directory] [[-e name=value] ...]\n"
+ " [-u username | -U username] jail [command ...]");
exit(1);
}