[libvirt] [PATCH v2 3/8] LXC: sort the uidmap/gidmap of domain
Daniel P. Berrange
berrange at redhat.com
Fri May 10 10:27:55 UTC 2013
On Fri, May 10, 2013 at 05:58:12PM +0800, Gao feng wrote:
> Make sure the mapping line contains the root user of container
> is the first element of idmap array. So we can get the real
> user id on host for the container easily.
>
> This patch also check the map information, User must map
> the root user of container to any user of host.
>
> Signed-off-by: Gao feng <gaofeng at cn.fujitsu.com>
> ---
> src/conf/domain_conf.c | 25 ++++++++++++++++++++++++-
> 1 file changed, 24 insertions(+), 1 deletion(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 46be458..5bc4b8c 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -9815,7 +9815,8 @@ virDomainIdmapDefParseXML(const xmlNodePtr *node,
> ssize_t num)
> {
> int i;
> - struct idmap *idmap = NULL;
> + struct idmap *idmap = NULL, map;
> + int index = -1;
> xmlNodePtr save_ctxt = ctxt->node;
>
> if (VIR_ALLOC_N(idmap, num) < 0) {
> @@ -9828,7 +9829,29 @@ virDomainIdmapDefParseXML(const xmlNodePtr *node,
> virXPathUInt("string(./@start)", ctxt, &idmap[i].start);
> virXPathUInt("string(./@target)", ctxt, &idmap[i].target);
> virXPathUInt("string(./@count)", ctxt, &idmap[i].count);
> +
> + if (idmap[i].start == 0) {
> + index = i;
> + map.start = idmap[i].start;
> + map.target = idmap[i].target;
> + map.count = idmap[i].count;
> + }
> + }
> + /* Make sure the mapping line contains the root user of container
> + * is the first element of idmap array. So we can get the real
> + * user id on host for the container easily. */
> + if (index != -1) {
> + idmap[index] = idmap[0];
> + idmap[0] = map;
IMHO it would be better to just use qsort() with 'start' as the sort
key to ensure the entire array is sorted, not merely the first
element.
> + } else {
> + /* Root user of container isn't mapped to any user of host,
> + * return error. */
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> + _("You must map the root user of container"));
> + VIR_FREE(idmap);
> + idmap = NULL;
> }
> +
> error:
> ctxt->node = save_ctxt;
> return idmap;
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list