Env variables (setting/clearing)
This commit is contained in:
parent
fd98f4009e
commit
aebc3dba41
13
cmdline.c
13
cmdline.c
@ -282,6 +282,7 @@ bool cmdlineParse(int argc, char *argv[], struct nsjconf_t * nsjconf)
|
||||
};
|
||||
/* *INDENT-OFF* */
|
||||
|
||||
TAILQ_INIT(&nsjconf->envs);
|
||||
TAILQ_INIT(&nsjconf->pids);
|
||||
TAILQ_INIT(&nsjconf->mountpts);
|
||||
|
||||
@ -312,6 +313,7 @@ bool cmdlineParse(int argc, char *argv[], struct nsjconf_t * nsjconf)
|
||||
{{"daemon", no_argument, NULL, 'd'}, "Daemonize after start? (default: false)"},
|
||||
{{"verbose", no_argument, NULL, 'v'}, "Verbose output (default: false)"},
|
||||
{{"keep_env", no_argument, NULL, 'e'}, "Should all environment variables be passed to the child? (default: false)"},
|
||||
{{"env", required_argument, NULL, 'E'}, "Environment variable (can be used multiple times)"},
|
||||
{{"keep_caps", no_argument, NULL, 0x0501}, "Don't drop capabilities (DANGEROUS) (default: false)"},
|
||||
{{"silent", no_argument, NULL, 0x0502}, "Redirect child's fd:0/1/2 to /dev/null (default: false)"},
|
||||
{{"disable_sandbox", no_argument, NULL, 0x0503}, "Don't enable the seccomp-bpf sandboxing (default: false)"},
|
||||
@ -351,8 +353,8 @@ bool cmdlineParse(int argc, char *argv[], struct nsjconf_t * nsjconf)
|
||||
|
||||
int opt_index = 0;
|
||||
for (;;) {
|
||||
int c =
|
||||
getopt_long(argc, argv, "H:D:c:p:i:u:g:l:t:M:Ndveh?R:B:T:I:", opts, &opt_index);
|
||||
int c = getopt_long(argc, argv, "H:D:c:p:i:u:g:l:t:M:Ndveh?E:R:B:T:I:", opts,
|
||||
&opt_index);
|
||||
if (c == -1) {
|
||||
break;
|
||||
}
|
||||
@ -477,6 +479,13 @@ bool cmdlineParse(int argc, char *argv[], struct nsjconf_t * nsjconf)
|
||||
case 0x0603:
|
||||
nsjconf->mount_proc = false;
|
||||
break;
|
||||
case 'E':
|
||||
{
|
||||
struct charptr_t *p = util_malloc(sizeof(struct charptr_t));
|
||||
p->val = optarg;
|
||||
TAILQ_INSERT_TAIL(&nsjconf->envs, p, pointers);
|
||||
}
|
||||
break;
|
||||
case 'R':
|
||||
{
|
||||
struct mounts_t *p = util_malloc(sizeof(struct mounts_t));
|
||||
|
6
common.h
6
common.h
@ -55,6 +55,11 @@ enum mode_t {
|
||||
MODE_STANDALONE_RERUN
|
||||
};
|
||||
|
||||
struct charptr_t {
|
||||
char *val;
|
||||
TAILQ_ENTRY(charptr_t) pointers;
|
||||
};
|
||||
|
||||
struct nsjconf_t {
|
||||
const char *hostname;
|
||||
const char *cwd;
|
||||
@ -93,6 +98,7 @@ struct nsjconf_t {
|
||||
unsigned int max_conns_per_ip;
|
||||
size_t tmpfs_size;
|
||||
bool mount_proc;
|
||||
TAILQ_HEAD(envlist, charptr_t) envs;
|
||||
TAILQ_HEAD(pidslist, pids_t) pids;
|
||||
TAILQ_HEAD(mountptslist, mounts_t) mountpts;
|
||||
};
|
||||
|
11
subproc.c
11
subproc.c
@ -76,16 +76,19 @@ static int subprocNewProc(struct nsjconf_t *nsjconf, int fd_in, int fd_out, int
|
||||
exit(1);
|
||||
}
|
||||
|
||||
char *const *env = { NULL };
|
||||
if (nsjconf->keep_env == true) {
|
||||
env = environ;
|
||||
if (nsjconf->keep_env == false) {
|
||||
clearenv();
|
||||
}
|
||||
struct charptr_t *p;
|
||||
TAILQ_FOREACH(p, &nsjconf->envs, pointers) {
|
||||
putenv(p->val);
|
||||
}
|
||||
|
||||
LOG_D("Trying to execve('%s')", nsjconf->argv[0]);
|
||||
for (int i = 0; nsjconf->argv[i]; i++) {
|
||||
LOG_D(" Arg[%d]: '%s'", i, nsjconf->argv[i]);
|
||||
}
|
||||
execve(nsjconf->argv[0], &nsjconf->argv[0], env);
|
||||
execv(nsjconf->argv[0], &nsjconf->argv[0]);
|
||||
|
||||
PLOG_E("execve('%s') failed", nsjconf->argv[0]);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user