Skip to content

Commit

Permalink
Use on_path to find init.lxc
Browse files Browse the repository at this point in the history
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
  • Loading branch information
stgraber committed Apr 1, 2014
1 parent 320ab1d commit 20cfa34
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 11 deletions.
19 changes: 16 additions & 3 deletions src/lxc/conf.c
Expand Up @@ -3197,10 +3197,23 @@ int lxc_map_ids(struct lxc_list *idmap, pid_t pid)
{
struct lxc_list *iterator;
struct id_map *map;
int ret = 0;
int ret = 0, use_shadow = 0;
enum idtype type;
char *buf = NULL, *pos;
int use_shadow = (on_path("newuidmap") && on_path("newgidmap"));
char *buf = NULL, *pos, *cmdpath = NULL;

cmdpath = on_path("newuidmap");
if (cmdpath) {
use_shadow = 1;
free(cmdpath);
}

if (!use_shadow) {
cmdpath = on_path("newgidmap");
if (cmdpath) {
use_shadow = 1;
free(cmdpath);
}
}

if (!use_shadow && geteuid()) {
ERROR("Missing newuidmap/newgidmap");
Expand Down
24 changes: 22 additions & 2 deletions src/lxc/execute.c
Expand Up @@ -30,6 +30,7 @@
#include "conf.h"
#include "log.h"
#include "start.h"
#include "utils.h"

lxc_log_define(lxc_execute, lxc_start);

Expand All @@ -43,9 +44,27 @@ struct execute_args {
*/
static char *choose_init(void)
{
char *retv = malloc(PATH_MAX);
int ret;
char *retv = NULL;
int ret, env_set = 0;
struct stat mystat;

if (!getenv("PATH")) {
if (setenv("PATH", "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 0))
SYSERROR("Failed to setenv");
env_set = 1;
}

retv = on_path("init.lxc");

if (env_set) {
if (unsetenv("PATH"))
SYSERROR("Failed to unsetenv");
}

if (retv)
return retv;

retv = malloc(PATH_MAX);
if (!retv)
return NULL;

Expand All @@ -54,6 +73,7 @@ static char *choose_init(void)
ERROR("pathname too long");
goto out1;
}

ret = stat(retv, &mystat);
if (ret == 0)
return retv;
Expand Down
10 changes: 5 additions & 5 deletions src/lxc/utils.c
Expand Up @@ -1274,7 +1274,7 @@ int detect_ramfs_rootfs(void)
return 0;
}

bool on_path(char *cmd) {
char *on_path(char *cmd) {
char *path = NULL;
char *entry = NULL;
char *saveptr = NULL;
Expand All @@ -1283,11 +1283,11 @@ bool on_path(char *cmd) {

path = getenv("PATH");
if (!path)
return false;
return NULL;

path = strdup(path);
if (!path)
return false;
return NULL;

entry = strtok_r(path, ":", &saveptr);
while (entry) {
Expand All @@ -1298,13 +1298,13 @@ bool on_path(char *cmd) {

if (access(cmdpath, X_OK) == 0) {
free(path);
return true;
return strdup(cmdpath);
}

next_loop:
entry = strtok_r(NULL, ":", &saveptr);
}

free(path);
return false;
return NULL;
}
2 changes: 1 addition & 1 deletion src/lxc/utils.h
Expand Up @@ -279,4 +279,4 @@ uint64_t fnv_64a_buf(void *buf, size_t len, uint64_t hval);

int detect_shared_rootfs(void);
int detect_ramfs_rootfs(void);
bool on_path(char *cmd);
char *on_path(char *cmd);

0 comments on commit 20cfa34

Please sign in to comment.