Commit 20cfa342 by Stéphane Graber

Use on_path to find init.lxc

parent 320ab1d6
...@@ -3197,10 +3197,23 @@ int lxc_map_ids(struct lxc_list *idmap, pid_t pid) ...@@ -3197,10 +3197,23 @@ int lxc_map_ids(struct lxc_list *idmap, pid_t pid)
{ {
struct lxc_list *iterator; struct lxc_list *iterator;
struct id_map *map; struct id_map *map;
int ret = 0; int ret = 0, use_shadow = 0;
enum idtype type; enum idtype type;
char *buf = NULL, *pos; char *buf = NULL, *pos, *cmdpath = NULL;
int use_shadow = (on_path("newuidmap") && on_path("newgidmap"));
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()) { if (!use_shadow && geteuid()) {
ERROR("Missing newuidmap/newgidmap"); ERROR("Missing newuidmap/newgidmap");
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "conf.h" #include "conf.h"
#include "log.h" #include "log.h"
#include "start.h" #include "start.h"
#include "utils.h"
lxc_log_define(lxc_execute, lxc_start); lxc_log_define(lxc_execute, lxc_start);
...@@ -43,9 +44,27 @@ struct execute_args { ...@@ -43,9 +44,27 @@ struct execute_args {
*/ */
static char *choose_init(void) static char *choose_init(void)
{ {
char *retv = malloc(PATH_MAX); char *retv = NULL;
int ret; int ret, env_set = 0;
struct stat mystat; 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) if (!retv)
return NULL; return NULL;
...@@ -54,6 +73,7 @@ static char *choose_init(void) ...@@ -54,6 +73,7 @@ static char *choose_init(void)
ERROR("pathname too long"); ERROR("pathname too long");
goto out1; goto out1;
} }
ret = stat(retv, &mystat); ret = stat(retv, &mystat);
if (ret == 0) if (ret == 0)
return retv; return retv;
......
...@@ -1274,7 +1274,7 @@ int detect_ramfs_rootfs(void) ...@@ -1274,7 +1274,7 @@ int detect_ramfs_rootfs(void)
return 0; return 0;
} }
bool on_path(char *cmd) { char *on_path(char *cmd) {
char *path = NULL; char *path = NULL;
char *entry = NULL; char *entry = NULL;
char *saveptr = NULL; char *saveptr = NULL;
...@@ -1283,11 +1283,11 @@ bool on_path(char *cmd) { ...@@ -1283,11 +1283,11 @@ bool on_path(char *cmd) {
path = getenv("PATH"); path = getenv("PATH");
if (!path) if (!path)
return false; return NULL;
path = strdup(path); path = strdup(path);
if (!path) if (!path)
return false; return NULL;
entry = strtok_r(path, ":", &saveptr); entry = strtok_r(path, ":", &saveptr);
while (entry) { while (entry) {
...@@ -1298,7 +1298,7 @@ bool on_path(char *cmd) { ...@@ -1298,7 +1298,7 @@ bool on_path(char *cmd) {
if (access(cmdpath, X_OK) == 0) { if (access(cmdpath, X_OK) == 0) {
free(path); free(path);
return true; return strdup(cmdpath);
} }
next_loop: next_loop:
...@@ -1306,5 +1306,5 @@ next_loop: ...@@ -1306,5 +1306,5 @@ next_loop:
} }
free(path); free(path);
return false; return NULL;
} }
...@@ -279,4 +279,4 @@ uint64_t fnv_64a_buf(void *buf, size_t len, uint64_t hval); ...@@ -279,4 +279,4 @@ uint64_t fnv_64a_buf(void *buf, size_t len, uint64_t hval);
int detect_shared_rootfs(void); int detect_shared_rootfs(void);
int detect_ramfs_rootfs(void); int detect_ramfs_rootfs(void);
bool on_path(char *cmd); char *on_path(char *cmd);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment