[lxc-devel] [PATCH] Fix lxc-create -h with absolute template path
Stéphane Graber
stgraber at ubuntu.com
Wed Jan 28 08:38:52 UTC 2015
Close #421
Signed-off-by: Stéphane Graber <stgraber 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
More information about the lxc-devel
mailing list