[Devel] [PATCH 1/6] host uid and gid parameters
Kir Kolyshkin
kir at openvz.org
Mon Mar 11 11:20:18 PDT 2013
Looks good in general. See questions below.
On 03/11/2013 04:01 AM, Glauber Costa wrote:
> When running with an upstream Linux kernel that supports user namespaces,
> we will run the container using an unprivileged user in the system. That
> can be any user, and it serves as base to a 1:1 mapping between users in
> the container and users in the host.
>
> By default, the value 100000 will be used for both uid and gid.
>
> Signed-off-by: Glauber Costa <glommer at parallels.com>
> ---
> include/res.h | 8 ++++++++
> include/vzctl_param.h | 3 +++
> src/lib/config.c | 32 ++++++++++++++++++++++++++++++++
> 3 files changed, 43 insertions(+)
>
> diff --git a/include/res.h b/include/res.h
> index e07060d..548cde7 100644
> --- a/include/res.h
> +++ b/include/res.h
> @@ -47,6 +47,12 @@ struct env_param {
> };
> typedef struct env_param env_param_t;
>
> +/*
> + * When running upstream kernels, we will need host-side UID and GID. Those
> + * are configurable, but if none is specified, those are used.
> + */
> +#define VZ_DEFAULT_UID 100000
> +#define VZ_DEFAULT_GID 100000
> typedef struct {
> list_head_t userpw;
> list_head_t nameserver;
> @@ -56,6 +62,8 @@ typedef struct {
> int onboot;
> unsigned long *bootorder;
> int wait;
> + unsigned long local_uid;
> + unsigned long local_gid;
> } misc_param;
>
> struct mod_action;
> diff --git a/include/vzctl_param.h b/include/vzctl_param.h
> index 3034a13..e583540 100644
> --- a/include/vzctl_param.h
> +++ b/include/vzctl_param.h
> @@ -149,5 +149,8 @@
> #define PARAM_MOUNT_OPTS 396
>
>
> +#define PARAM_LOCAL_UID 397
> +#define PARAM_LOCAL_GID 398
> +
> #define PARAM_LINE "e:p:f:t:i:l:k:a:b:n:x:h"
> #endif
> diff --git a/src/lib/config.c b/src/lib/config.c
> index cf5f352..c357107 100644
> --- a/src/lib/config.c
> +++ b/src/lib/config.c
> @@ -128,6 +128,10 @@ static vps_config config[] = {
> {"CONFIGFILE", NULL, PARAM_CONFIG},
> {"ORIGIN_SAMPLE",NULL,PARAM_CONFIG_SAMPLE},
> {"DISABLED", NULL, PARAM_DISABLED},
> +#ifdef HAVE_UPSTREAM
> +{"LOCAL_UID", NULL, PARAM_LOCAL_UID},
> +{"LOCAL_GID", NULL, PARAM_LOCAL_GID},
> +#endif
> /* quota */
> {"DISK_QUOTA", NULL, PARAM_DISK_QUOTA},
> {"DISKSPACE", NULL, PARAM_DISKSPACE},
> @@ -1363,6 +1367,12 @@ static int store_misc(vps_param *old_p, vps_param *vps_p, vps_config *conf,
> ret = conf_store_strlist(conf_h, conf->name,
> &misc->searchdomain, 0);
> break;
> + case PARAM_LOCAL_UID:
> + ret = conf_store_ulong(conf_h, conf->name, (unsigned long *)&misc->local_uid);
> + break;
> + case PARAM_LOCAL_GID:
> + ret = conf_store_ulong(conf_h, conf->name, (unsigned long *)&misc->local_gid);
> + break;
> }
> return ret;
> }
> @@ -1996,6 +2006,24 @@ static int parse(envid_t veid, vps_param *vps_p, char *val, int id)
> case PARAM_IPTABLES:
> ret = parse_iptables(&vps_p->res.env, val);
> break;
> +
> + case PARAM_LOCAL_UID:
> + ret = parse_ul(val, &vps_p->res.misc.local_uid);
1 Are we OK with the fact that the biggest number returned from
parse_ul() is LONG_MAX and not ULONG_MAX?
2 We use conf_parse_ulong() and pointer to unsigned long in similar
places in order to detect situations such as unset value or the value
set twice in config. If you don't want that, I guess it's fine to use
parse_ul() directly...
> + if (ret != 0)
> + break;
> +
> + if (vps_p->res.misc.local_uid == 0)
> + vps_p->res.misc.local_uid = VZ_DEFAULT_UID;
So here you deliberately disable possibility to use 0 as an offset,
making 0 mean "use default". RIght?
> + break;
> +
> + case PARAM_LOCAL_GID:
> + ret = parse_ul(val, &vps_p->res.misc.local_gid);
> + if (ret != 0)
> + break;
> +
> + if (vps_p->res.misc.local_gid == 0)
> + vps_p->res.misc.local_gid = VZ_DEFAULT_GID;
> + break;
> case PARAM_LOCKEDPAGES:
> case PARAM_PRIVVMPAGES:
> case PARAM_SHMPAGES:
> @@ -2565,6 +2593,8 @@ vps_param *init_vps_param()
> param->res.meminfo.mode = -1;
> param->res.io.ioprio = -1;
> param->opt.mode = -1;
> + param->res.misc.local_uid = VZ_DEFAULT_UID;
> + param->res.misc.local_gid = VZ_DEFAULT_GID;
>
> return param;
> }
> @@ -2865,6 +2895,8 @@ static void merge_misc(misc_param *dst, misc_param *src)
> MERGE_STR(hostname)
> MERGE_STR(description)
> MERGE_INT(onboot)
> + MERGE_INT(local_uid)
> + MERGE_INT(local_gid)
> MERGE_P(bootorder)
> MERGE_INT(wait)
> }
More information about the Devel
mailing list