conf: adapt idmap helpers

- mapped_hostid_entry() - idmap_add() Closes #2033. Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
parent 2b33c8bf
...@@ -3722,8 +3722,8 @@ static int run_userns_fn(void *data) ...@@ -3722,8 +3722,8 @@ static int run_userns_fn(void *data)
return d->fn(d->arg); return d->fn(d->arg);
} }
static struct id_map *mapped_hostid_entry(struct lxc_conf *conf, unsigned id, static struct id_map *find_mapped_hostid_entry(struct lxc_conf *conf,
enum idtype idtype) unsigned id, enum idtype idtype)
{ {
struct lxc_list *it; struct lxc_list *it;
struct id_map *map; struct id_map *map;
...@@ -3740,14 +3740,6 @@ static struct id_map *mapped_hostid_entry(struct lxc_conf *conf, unsigned id, ...@@ -3740,14 +3740,6 @@ static struct id_map *mapped_hostid_entry(struct lxc_conf *conf, unsigned id,
} }
} }
if (!retmap)
return NULL;
retmap = malloc(sizeof(*retmap));
if (!retmap)
return NULL;
memcpy(retmap, map, sizeof(*retmap));
return retmap; return retmap;
} }
...@@ -3755,27 +3747,28 @@ static struct id_map *mapped_hostid_entry(struct lxc_conf *conf, unsigned id, ...@@ -3755,27 +3747,28 @@ static struct id_map *mapped_hostid_entry(struct lxc_conf *conf, unsigned id,
* Allocate a new {g,u}id mapping for the given {g,u}id. Re-use an already * Allocate a new {g,u}id mapping for the given {g,u}id. Re-use an already
* existing one or establish a new one. * existing one or establish a new one.
*/ */
static struct id_map *idmap_add(struct lxc_conf *conf, uid_t id, enum idtype type) static struct id_map *mapped_hostid_add(struct lxc_conf *conf, uid_t id, enum idtype type)
{ {
int hostid_mapped; int hostid_mapped;
struct id_map *entry = NULL; struct id_map *entry = NULL, *tmp = NULL;
entry = malloc(sizeof(*entry));
if (!entry)
return NULL;
/* Reuse existing mapping. */ /* Reuse existing mapping. */
entry = mapped_hostid_entry(conf, id, type); tmp = find_mapped_hostid_entry(conf, id, type);
if (entry) if (tmp)
return entry; return memcpy(entry, tmp, sizeof(*entry));
/* Find new mapping. */ /* Find new mapping. */
hostid_mapped = find_unmapped_nsid(conf, type); hostid_mapped = find_unmapped_nsid(conf, type);
if (hostid_mapped < 0) { if (hostid_mapped < 0) {
DEBUG("failed to find free mapping for id %d", id); DEBUG("Failed to find free mapping for id %d", id);
free(entry);
return NULL; return NULL;
} }
entry = malloc(sizeof(*entry));
if (!entry)
return NULL;
entry->idtype = type; entry->idtype = type;
entry->nsid = hostid_mapped; entry->nsid = hostid_mapped;
entry->hostid = (unsigned long)id; entry->hostid = (unsigned long)id;
...@@ -3884,10 +3877,10 @@ int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data, ...@@ -3884,10 +3877,10 @@ int userns_exec_1(struct lxc_conf *conf, int (*fn)(void *), void *data,
/* Check whether the {g,u}id of the user has a mapping. */ /* Check whether the {g,u}id of the user has a mapping. */
if (!host_uid_map) if (!host_uid_map)
host_uid_map = idmap_add(conf, euid, ID_TYPE_UID); host_uid_map = mapped_hostid_add(conf, euid, ID_TYPE_UID);
if (!host_gid_map) if (!host_gid_map)
host_gid_map = idmap_add(conf, egid, ID_TYPE_GID); host_gid_map = mapped_hostid_add(conf, egid, ID_TYPE_GID);
if (!host_uid_map) { if (!host_uid_map) {
DEBUG("failed to find mapping for uid %d", euid); DEBUG("failed to find mapping for uid %d", euid);
...@@ -4095,12 +4088,12 @@ int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), void *data, ...@@ -4095,12 +4088,12 @@ int userns_exec_full(struct lxc_conf *conf, int (*fn)(void *), void *data,
/* Check whether the {g,u}id of the user has a mapping. */ /* Check whether the {g,u}id of the user has a mapping. */
if (!host_uid_map) if (!host_uid_map)
host_uid_map = idmap_add(conf, euid, ID_TYPE_UID); host_uid_map = mapped_hostid_add(conf, euid, ID_TYPE_UID);
else else
host_uid_map = container_root_uid; host_uid_map = container_root_uid;
if (!host_gid_map) if (!host_gid_map)
host_gid_map = idmap_add(conf, egid, ID_TYPE_GID); host_gid_map = mapped_hostid_add(conf, egid, ID_TYPE_GID);
else else
host_gid_map = container_root_gid; host_gid_map = container_root_gid;
......
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