aboutsummaryrefslogtreecommitdiffstats
path: root/guts/execve.c
blob: fafc154e96ab4836975020381cfec0a1e006f1c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/* 
 * Copyright (c) 2008-2010 Wind River Systems; see
 * guts/COPYRIGHT for information.
 *
 * static int
 * wrap_execve(const char *file, char *const *argv, char *const *envp) {
 *	int rc = -1;
 */
	char * const *new_environ;
	/* note:  we don't canonicalize this, because we are intentionally
	 * NOT redirecting execs into the chroot environment.  If you try
	 * to execute /bin/sh, you get the actual /bin/sh, not
	 * <CHROOT>/bin/sh.  This allows use of basic utilities.  This
	 * design will likely be revisited.
	 */
        if (antimagic == 0) {
                pseudo_client_op(OP_EXEC, PSA_EXEC, -1, -1, file, 0);
        }

	if (!pseudo_get_value("PSEUDO_RELOADED"))
		new_environ = pseudo_setupenvp(envp);
	else {
		new_environ = pseudo_setupenvp(envp);
		new_environ = pseudo_dropenvp(new_environ);
	}

	/* if exec() fails, we may end up taking signals unexpectedly...
	 * not much we can do about that.
	 */
	sigprocmask(SIG_SETMASK, &pseudo_saved_sigmask, NULL);
	rc = real_execve(file, argv, new_environ);

/*	return rc;
 * }
 */