[lxc-devel] [PATCH] Fix lxc-create -h with absolute template path

Serge Hallyn serge.hallyn at ubuntu.com
Wed Jan 28 10:56:37 UTC 2015


Quoting Stéphane Graber (stgraber at ubuntu.com):
> Close #421
> 
> Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>

Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>

> ---
>  src/lxc/lxc_create.c   |  8 +-------
>  src/lxc/lxccontainer.c | 34 ----------------------------------
>  src/lxc/utils.c        | 34 ++++++++++++++++++++++++++++++++++
>  src/lxc/utils.h        |  1 +
>  4 files changed, 36 insertions(+), 41 deletions(-)
> 
> diff --git a/src/lxc/lxc_create.c b/src/lxc/lxc_create.c
> index 2cc866a..8f46db9 100644
> --- a/src/lxc/lxc_create.c
> +++ b/src/lxc/lxc_create.c
> @@ -101,8 +101,6 @@ static const struct option my_longopts[] = {
>  
>  static void create_helpfn(const struct lxc_arguments *args) {
>  	char *argv[3], *path;
> -	size_t len;
> -	int ret;
>  	pid_t pid;
>  
>  	if (!args->template)
> @@ -114,11 +112,7 @@ static void create_helpfn(const struct lxc_arguments *args) {
>  		return;
>  	}
>  
> -	len = strlen(LXCTEMPLATEDIR) + strlen(args->template) + strlen("/lxc-") + 1;
> -	path = alloca(len);
> -	ret = snprintf(path, len,  "%s/lxc-%s", LXCTEMPLATEDIR, args->template);
> -	if (ret < 0 || ret >= len)
> -		return;
> +	path = get_template_path(args->template);
>  
>  	argv[0] = path;
>  	argv[1] = "-h";
> diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
> index 2b3e28c..4da1627 100644
> --- a/src/lxc/lxccontainer.c
> +++ b/src/lxc/lxccontainer.c
> @@ -841,40 +841,6 @@ static struct bdev *do_bdev_create(struct lxc_container *c, const char *type,
>  	return bdev;
>  }
>  
> -/*
> - * Given the '-t' template option to lxc-create, figure out what to
> - * do.  If the template is a full executable path, use that.  If it
> - * is something like 'sshd', then return $templatepath/lxc-sshd.
> - * On success return the template, on error return NULL.
> - */
> -static char *get_template_path(const char *t)
> -{
> -	int ret, len;
> -	char *tpath;
> -
> -	if (t[0] == '/' && access(t, X_OK) == 0) {
> -		tpath = strdup(t);
> -		return tpath;
> -	}
> -
> -	len = strlen(LXCTEMPLATEDIR) + strlen(t) + strlen("/lxc-") + 1;
> -	tpath = malloc(len);
> -	if (!tpath)
> -		return NULL;
> -	ret = snprintf(tpath, len, "%s/lxc-%s", LXCTEMPLATEDIR, t);
> -	if (ret < 0 || ret >= len) {
> -		free(tpath);
> -		return NULL;
> -	}
> -	if (access(tpath, X_OK) < 0) {
> -		SYSERROR("bad template: %s", t);
> -		free(tpath);
> -		return NULL;
> -	}
> -
> -	return tpath;
> -}
> -
>  static char *lxcbasename(char *path)
>  {
>  	char *p = path + strlen(path) - 1;
> diff --git a/src/lxc/utils.c b/src/lxc/utils.c
> index 23b1b11..93de1c3 100644
> --- a/src/lxc/utils.c
> +++ b/src/lxc/utils.c
> @@ -1506,3 +1506,37 @@ int is_dir(const char *path)
>  		return 1;
>  	return 0;
>  }
> +
> +/*
> + * Given the '-t' template option to lxc-create, figure out what to
> + * do.  If the template is a full executable path, use that.  If it
> + * is something like 'sshd', then return $templatepath/lxc-sshd.
> + * On success return the template, on error return NULL.
> + */
> +char *get_template_path(const char *t)
> +{
> +	int ret, len;
> +	char *tpath;
> +
> +	if (t[0] == '/' && access(t, X_OK) == 0) {
> +		tpath = strdup(t);
> +		return tpath;
> +	}
> +
> +	len = strlen(LXCTEMPLATEDIR) + strlen(t) + strlen("/lxc-") + 1;
> +	tpath = malloc(len);
> +	if (!tpath)
> +		return NULL;
> +	ret = snprintf(tpath, len, "%s/lxc-%s", LXCTEMPLATEDIR, t);
> +	if (ret < 0 || ret >= len) {
> +		free(tpath);
> +		return NULL;
> +	}
> +	if (access(tpath, X_OK) < 0) {
> +		SYSERROR("bad template: %s", t);
> +		free(tpath);
> +		return NULL;
> +	}
> +
> +	return tpath;
> +}
> diff --git a/src/lxc/utils.h b/src/lxc/utils.h
> index ae2c851..b23cd8e 100644
> --- a/src/lxc/utils.h
> +++ b/src/lxc/utils.h
> @@ -285,3 +285,4 @@ char *choose_init(const char *rootfs);
>  int print_to_file(const char *file, const char *content);
>  bool switch_to_ns(pid_t pid, const char *ns);
>  int is_dir(const char *path);
> +char *get_template_path(const char *t);
> -- 
> 1.9.1
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel


More information about the lxc-devel mailing list