Print this page
OS-4716 lxbrand native system(3C) broken
Reviewed by: jerry.jelinek@joyent.com
Reviewed by: patrick.mooney@joyent.com

*** 20,29 **** --- 20,30 ---- */ /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. + * Copyright 2016 Joyent, Inc. */ /* Copyright (c) 1988 AT&T */ /* All Rights Reserved */
*** 41,50 **** --- 42,52 ---- #include <pthread.h> #include <errno.h> #include <synch.h> #include <spawn.h> #include <paths.h> + #include <zone.h> #include "libc.h" extern const char **_environ; extern int __xpg4; /* defined in _xpg4.c; 0 if not xpg4-compiled program */
*** 123,137 **** pid_t w; int status; int error; sigset_t mask; struct stat64 buf; ! const char *shpath = _PATH_BSHELL; char *argv[4]; posix_spawnattr_t attr; static const char *shell = "sh"; if (cmd == NULL) { if (stat64(shpath, &buf) != 0) { return (0); } else if (getuid() == buf.st_uid) { /* exec for user */ --- 125,146 ---- pid_t w; int status; int error; sigset_t mask; struct stat64 buf; ! char shpath[MAXPATHLEN]; ! const char *zroot = zone_get_nroot(); char *argv[4]; posix_spawnattr_t attr; static const char *shell = "sh"; + /* + * If executing in brand use native root. + */ + (void) snprintf(shpath, sizeof (shpath), "%s%s", + zroot != NULL ? zroot : "", _PATH_BSHELL); + if (cmd == NULL) { if (stat64(shpath, &buf) != 0) { return (0); } else if (getuid() == buf.st_uid) { /* exec for user */