On Fri, 2014-08-08 at 21:15 -0400, S.Çağlar Onur wrote: > Hey Serge, > > On Fri, Aug 8, 2014 at 8:28 PM, Serge Hallyn <serge.hal...@ubuntu.com> wrote: > > The container command socket is an abstract unix socket containing > > the lxcpath and container name. Those can be too long. In that case, > > use the hash of the lxcpath and lxcname. Continue to use the path and > > name if possible to avoid any back compat issues. > > Last time I tried this [1] I ended up breaking list_active_containers > as it parses /proc/unix/net, do we still have that problem?
lxc-test-list at least passes with these two patches. > [1] > https://lists.linuxcontainers.org/pipermail/lxc-devel/2014-February/008145.html > > Cheers, > > > Signed-off-by: Serge Hallyn <serge.hal...@ubuntu.com> > > --- > > src/lxc/commands.c | 32 +++++++++++++++++++++++++++----- > > 1 file changed, 27 insertions(+), 5 deletions(-) > > > > diff --git a/src/lxc/commands.c b/src/lxc/commands.c > > index 458d41e..f46efc5 100644 > > --- a/src/lxc/commands.c > > +++ b/src/lxc/commands.c > > @@ -28,6 +28,7 @@ > > #include <fcntl.h> > > #include <poll.h> > > #include <sys/socket.h> > > +#include <inttypes.h> > > #include <sys/un.h> > > #include <sys/param.h> > > #include <malloc.h> > > @@ -74,24 +75,45 @@ > > lxc_log_define(lxc_commands, lxc); > > > > static int fill_sock_name(char *path, int len, const char *name, > > - const char *inpath) > > + const char *lxcpath) > > { > > - const char *lxcpath = NULL; > > + char *tmppath; > > + size_t tmplen; > > + uint64_t hash; > > int ret; > > > > - if (!inpath) { > > + if (!lxcpath) { > > lxcpath = lxc_global_config_value("lxc.lxcpath"); > > if (!lxcpath) { > > ERROR("Out of memory getting lxcpath"); > > return -1; > > } > > } > > - ret = snprintf(path, len, "%s/%s/command", lxcpath ? lxcpath : > > inpath, name); > > + > > + ret = snprintf(path, len, "%s/%s/command", lxcpath, name); > > > > + if (ret < 0) { > > + ERROR("Error writing to command sock path"); > > + return -1; > > + } > > + if (ret < len) > > + return 0; > > + > > + /* ret >= len; lxcpath or name is too long. hash both */ > > + tmplen = strlen(name) + strlen(lxcpath) + 2; > > + tmppath = alloca(tmplen); > > + ret = snprintf(tmppath, tmplen, "%s/%s", lxcpath, name); > > + if (ret < 0 || ret >= tmplen) { > > + ERROR("memory error"); > > + return -1; > > + } > > + hash = fnv_64a_buf(tmppath, ret, FNV1A_64_INIT); > > + ret = snprintf(path, len, "lxc/%016" PRIx64 "/cmd_sock", hash); > > if (ret < 0 || ret >= len) { > > - ERROR("Name too long"); > > + ERROR("Command socket name too long"); > > return -1; > > } > > + > > return 0; > > } > > > > -- > > 2.1.0.rc1 > > > > _______________________________________________ > > lxc-devel mailing list > > lxc-devel@lists.linuxcontainers.org > > http://lists.linuxcontainers.org/listinfo/lxc-devel > > > _______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel