So we don't always have to give full paths. realpath(x,NULL) mallocs memory, but these paths shouldn't get called from the API so not freeing should be ok.
Signed-off-by: Serge Hallyn <serge.hal...@ubuntu.com> --- src/lxc/arguments.c | 9 ++++++++- src/lxc/lxc_execute.c | 10 +++++++--- src/lxc/lxc_start.c | 9 +++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/lxc/arguments.c b/src/lxc/arguments.c index adcf8fe..65b2284 100644 --- a/src/lxc/arguments.c +++ b/src/lxc/arguments.c @@ -155,6 +155,7 @@ See the %s man page for further information.\n\n", static int lxc_arguments_lxcpath_add(struct lxc_arguments *args, const char *lxcpath) { + char *resolved_path = NULL; if (args->lxcpath_additional != -1 && args->lxcpath_cnt > args->lxcpath_additional) { fprintf(stderr, "This command only accepts %d -P,--lxcpath arguments\n", @@ -168,7 +169,13 @@ static int lxc_arguments_lxcpath_add(struct lxc_arguments *args, lxc_error(args, "no memory"); return -ENOMEM; } - args->lxcpath[args->lxcpath_cnt++] = lxcpath; + resolved_path = realpath(lxcpath, NULL); + if (!resolved_path) { + perror("realpath"); + fprintf(stderr, "Error resolving lxcpath %s", lxcpath); + return -1; + } + args->lxcpath[args->lxcpath_cnt++] = resolved_path; return 0; } diff --git a/src/lxc/lxc_execute.c b/src/lxc/lxc_execute.c index 6a54bf6..083b5db 100644 --- a/src/lxc/lxc_execute.c +++ b/src/lxc/lxc_execute.c @@ -105,9 +105,13 @@ int main(int argc, char *argv[]) return -1; /* rcfile is specified in the cli option */ - if (my_args.rcfile) - rcfile = (char *)my_args.rcfile; - else { + if (my_args.rcfile) { + rcfile = realpath((char *)my_args.rcfile, NULL); + if (!rcfile) { + SYSERROR("Failed to resolve file path: %s", my_args.rcfile); + return -1; + } + } else { int rc; rc = asprintf(&rcfile, "%s/%s/config", my_args.lxcpath[0], my_args.name); diff --git a/src/lxc/lxc_start.c b/src/lxc/lxc_start.c index add2542..7eea26a 100644 --- a/src/lxc/lxc_start.c +++ b/src/lxc/lxc_start.c @@ -173,6 +173,15 @@ int main(int argc, char *argv[]) const char *lxcpath = my_args.lxcpath[0]; + if (my_args.rcfile) { + char *r = realpath(my_args.rcfile, NULL); + if (!r) { + SYSERROR("Failure resolving path: %s", my_args.rcfile); + exit(1); + } + my_args.rcfile = r; + } + /* * rcfile possibilities: * 1. rcfile from random path specified in cli option -- 1.8.1.2 ------------------------------------------------------------------------------ November Webinars for C, C++, Fortran Developers Accelerate application performance with scalable programming models. Explore techniques for threading, error checking, porting, and tuning. Get the most from the latest Intel processors and coprocessors. See abstracts and register http://pubads.g.doubleclick.net/gampad/clk?id=60136231&iu=/4140/ostg.clktrk _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel