From: Christian Brauner Date: Tue, 2 Jan 2018 22:27:55 +0000 (+0100) Subject: conf{ile}: detect ns{g,u}id mapping for root X-Git-Tag: lxc-2.0.10~436 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4f5119635097bc0c961983bc401d70b61625e59c;p=thirdparty%2Flxc.git conf{ile}: detect ns{g,u}id mapping for root Closes #2033. Signed-off-by: Christian Brauner --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index f9debf71e..e4411d9b9 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -2325,6 +2325,8 @@ struct lxc_conf *lxc_conf_init(void) lxc_list_init(&new->caps); lxc_list_init(&new->keepcaps); lxc_list_init(&new->id_map); + new->root_nsuid_map = NULL; + new->root_nsgid_map = NULL; lxc_list_init(&new->includes); lxc_list_init(&new->aliens); lxc_list_init(&new->environment); diff --git a/src/lxc/conf.h b/src/lxc/conf.h index aa819da4d..306056105 100644 --- a/src/lxc/conf.h +++ b/src/lxc/conf.h @@ -209,7 +209,15 @@ struct lxc_conf { signed long personality; struct utsname *utsname; struct lxc_list cgroup; - struct lxc_list id_map; + struct { + struct lxc_list id_map; + /* Pointer to the idmap entry for the container's root uid in + * the id_map list. Do not free! */ + struct id_map *root_nsuid_map; + /* Pointer to the idmap entry for the container's root gid in + * the id_map list. Do not free! */ + struct id_map *root_nsgid_map; + }; struct lxc_list network; int auto_mounts; struct lxc_list mount_list; diff --git a/src/lxc/confile.c b/src/lxc/confile.c index 211b7b6fa..77f06edc7 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -1858,7 +1858,7 @@ static int set_config_idmaps(const char *key, const char *value, if (ret < 0) goto on_error; - INFO("read uid map: type %c nsid %lu hostid %lu range %lu", type, nsid, hostid, range); + INFO("Read uid map: type %c nsid %lu hostid %lu range %lu", type, nsid, hostid, range); if (type == 'u') idmap->idtype = ID_TYPE_UID; else if (type == 'g') @@ -1871,6 +1871,16 @@ static int set_config_idmaps(const char *key, const char *value, idmap->range = range; idmaplist->elem = idmap; lxc_list_add_tail(&lxc_conf->id_map, idmaplist); + + if (!lxc_conf->root_nsuid_map && idmap->idtype == ID_TYPE_UID) + if (idmap->nsid == 0) + lxc_conf->root_nsuid_map = idmap; + + + if (!lxc_conf->root_nsuid_map && idmap->idtype == ID_TYPE_GID) + if (idmap->nsid == 0) + lxc_conf->root_nsgid_map = idmap; + idmap = NULL; return 0;