Deleted Added
sdiff udiff text old ( 223327 ) new ( 223351 )
full compact
1/*-
2 * Copyright (c) 2011 James Gritton
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: projects/jailconf/usr.sbin/jail/command.c 223351 2011-06-20 23:04:13Z jamie $");
29
30#include <sys/types.h>
31#include <sys/event.h>
32#include <sys/mount.h>
33#include <sys/stat.h>
34#include <sys/sysctl.h>
35#include <sys/user.h>
36#include <sys/wait.h>

--- 205 unchanged lines hidden (view full) ---

242 */
243int
244run_command(struct cfjail *j)
245{
246 const struct passwd *pwd;
247 const struct cfstring *comstring, *s;
248 login_cap_t *lcap;
249 char **argv;
250 char *cs, *comcs, *devpath;
251 const char *jidstr, *conslog, *path, *ruleset, *term, *username;
252 enum intparam comparam;
253 size_t comlen;
254 pid_t pid;
255 int argc, bg, clean, consfd, down, fib, i, injail, sjuser, timeout;
256#if defined(INET) || defined(INET6)
257 char *addr;
258#endif
259
260 static char *cleanenv;
261
262 /* Perform some operations that aren't actually commands */
263 comparam = *j->comparam;
264 down = j->flags & (JF_STOP | JF_FAILED);
265 switch (comparam) {
266 case IP_STOP_TIMEOUT:

--- 26 unchanged lines hidden (view full) ---

293 }
294 /*
295 * Collect exec arguments. Internal commands for network and
296 * mounting build their own argument lists.
297 */
298 comstring = j->comstring;
299 bg = 0;
300 switch (comparam) {
301#ifdef INET
302 case IP__IP4_IFADDR:
303 argv = alloca(8 * sizeof(char *));
304 *(const char **)&argv[0] = _PATH_IFCONFIG;
305 if ((cs = strchr(comstring->s, '|'))) {
306 argv[1] = alloca(cs - comstring->s + 1);
307 strlcpy(argv[1], comstring->s, cs - comstring->s + 1);
308 addr = cs + 1;
309 } else {

--- 15 unchanged lines hidden (view full) ---

325 argc = 6;
326 } else {
327 argv[3] = addr;
328 argc = 4;
329 }
330 *(const char **)&argv[argc] = down ? "-alias" : "alias";
331 argv[argc + 1] = NULL;
332 break;
333#endif
334
335#ifdef INET6
336 case IP__IP6_IFADDR:
337 argv = alloca(8 * sizeof(char *));
338 *(const char **)&argv[0] = _PATH_IFCONFIG;
339 if ((cs = strchr(comstring->s, '|'))) {
340 argv[1] = alloca(cs - comstring->s + 1);
341 strlcpy(argv[1], comstring->s, cs - comstring->s + 1);

--- 518 unchanged lines hidden ---