Quoting Christian Brauner (christianvanbrau...@gmail.com): > On Mon, Nov 02, 2015 at 03:52:25PM +0100, Christian Brauner wrote: > > On Mon, Nov 02, 2015 at 02:38:16PM +0000, Serge Hallyn wrote: > > > Quoting Christian Brauner (christianvanbrau...@gmail.com): > > > > This functions updates absolute paths for overlay upper- and workdirs > > > > so users > > > > can simply clone and start new containers without worrying about > > > > absolute paths > > > > in lxc.mount.entry overlay entries. > > > > > > > > Signed-off-by: Christian Brauner <christianvanbrau...@gmail.com> > > > > --- > > > > src/lxc/confile.c | 102 > > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > > > src/lxc/confile.h | 3 ++ > > > > 2 files changed, 105 insertions(+) > > > > > > > > diff --git a/src/lxc/confile.c b/src/lxc/confile.c > > > > index f7d6814..47b0b8b 100644 > > > > --- a/src/lxc/confile.c > > > > +++ b/src/lxc/confile.c > > > > @@ -2598,6 +2598,108 @@ void clear_unexp_config_line(struct lxc_conf > > > > *conf, const char *key, bool rm_sub > > > > } > > > > } > > > > > > > > +bool clone_update_unexp_ovl_paths(struct lxc_conf *conf, const char > > > > *oldpath, > > > > + const char *newpath, const char > > > > *oldname, > > > > + const char *newname, const char > > > > *ovldir) > > > > +{ > > > > + const char *key = "lxc.mount.entry"; > > > > + int ret; > > > > + char *lstart = conf->unexpanded_config; > > > > + char *lend; > > > > + char *p; > > > > + char *q; > > > > + size_t newdirlen = strlen(ovldir) + strlen(newpath) + > > > > strlen(newname) + 2; > > > > + size_t olddirlen = strlen(ovldir) + strlen(oldpath) + > > > > strlen(oldname) + 2; > > > > + char *olddir = alloca(olddirlen + 1); > > > > + char *newdir = alloca(newdirlen + 1); > > > > + > > > > + ret = snprintf(olddir, olddirlen + 1, "%s=%s/%s", ovldir, > > > > oldpath, oldname); > > > > + if (ret < 0 || ret >= olddirlen + 1) { > > > > + ERROR("Bug in %s", __func__); > > > > + return false; > > > > + } > > > > + ret = snprintf(newdir, newdirlen + 1, "%s=%s/%s", ovldir, > > > > newpath, newname); > > > > + if (ret < 0 || ret >= newdirlen + 1) { > > > > + ERROR("Bug in %s", __func__); > > > > + return false; > > > > + } > > > > + if (!conf->unexpanded_config) > > > > + return true; > > > > + while (*lstart) { > > > > + lend = strchr(lstart, '\n'); > > > > + if (!lend) > > > > + lend = lstart + strlen(lstart); > > > > + else > > > > + lend++; > > > > + if (strncmp(lstart, key, strlen(key)) != 0) { > > > > + lstart = lend; > > > > + continue; > > > > + } > > > > + p = strchr(lstart + strlen(key), '='); > > > > + if (!p) { > > > > + lstart = lend; > > > > + continue; > > > > + } > > > > + p++; > > > > + while (isblank(*p)) > > > > + p++; > > > > + if (p >= lend) > > > > + continue; > > > > + /* Whenever an lxc.mount.entry entry is found in a > > > > line we check > > > > + * if the substring " overlay" or the substring " > > > > aufs" is > > > > + * present before doing any further work. We check for > > > > " > > > > + * overlay" and " aufs" since both substrings need to > > > > have at > > > > + * least one space before them in a valid overlay > > > > + * lxc.mount.entry (/A B overlay). When the space > > > > before is > > > > + * missing it is very likely that these substrings are > > > > part of a > > > > + * path or something else. */ > > > > + if (!strstr(p, " overlay") && !strstr(p, " aufs")) { > > > > + lstart = lend; > > > > + continue; > > > > + } > > > > + if (!(q = strstr(p, olddir))) { > > > > + lstart = lend; > > > > + continue; > > > > + } > > > > > > You're still not doing anything to ensure that 'overlays'/'aufs' and the > > > olddir are actually occurring on this same line. So they could be showing > > > up in a comment or just later line. > > I don't think this is the case. At the beginning of the while() we search for > a > newline character and make lend point to the character immediately after it. > > lend = strchr(lstart, '\n'); > if (!lend) > lend = lstart + strlen(lstart); > else > lend++; > > Then we check > > if (!strstr(p, " overlay") && !strstr(p, " aufs"))
strstr will not constrain it's search to values under lend (unless you set *lend = '\0') -serge _______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel