On Thu, Sep 26, 2019 at 04:22:31PM -0500, Eric Blake wrote: > On 9/26/19 11:40 AM, Richard W.M. Jones wrote: > >This adds new APIs for running a local NBD server and connecting to it > >using systemd socket activation (instead of stdin/stdout). > > > >This includes interop tests against nbdkit and qemu-nbd which I > >believe are the only NBD servers supporting socket activation. (If we > >find others then we can add more interop tests in future.) > > > >The upstream spec for systemd socket activation is here: > >http://0pointer.de/blog/projects/socket-activation.html > >--- > > >+ > >+ /* Use /tmp instead of TMPDIR because we must ensure the path is > >+ * short enough to store in the sockaddr_un. On some platforms this > >+ * may cause problems so we may need to revisit it. XXX > >+ */ > >+ h->sa_tmpdir = strdup ("/tmp/libnbdXXXXXX"); > >+ h->sa_sockpath = strdup ("/tmp/libnbdXXXXXX/sock"); > >+ if (h->sa_tmpdir == NULL || h->sa_sockpath == NULL) { > >+ SET_NEXT_STATE (%.DEAD); > >+ set_error (errno, "strdup"); > >+ return 0; > >+ } > >+ > >+ if (mkdtemp (h->sa_tmpdir) == NULL) { > >+ SET_NEXT_STATE (%.DEAD); > >+ set_error (errno, "mkdtemp"); > >+ return 0; > >+ } > >+ len = strlen (h->sa_tmpdir); > >+ memcpy (h->sa_sockpath, h->sa_tmpdir, len); > >+ > >+ s = socket (AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0); > >+ if (s == -1) { > >+ SET_NEXT_STATE (%.DEAD); > >+ set_error (errno, "socket"); > >+ return 0; > >+ } > >+ > >+ addr.sun_family = AF_UNIX; > >+ memcpy (addr.sun_path, h->sa_sockpath, strlen (h->sa_sockpath) + 1); > > What if we used the abstract socket namespace instead? Then we > don't have to worry about mkdtmp or cleanup of the socket file. > True, that may only work on Linux, but we could add an API to query > if we support socket activation (true on Linux, false on BSD)...
AIUI the abstract socket space is not secure because anyone who can list it (‘lsof -U’) could connect to the socket. We'd have to add a way for nbdkit to check the connecting process has the same UID using SO_PEERCRED. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-p2v converts physical machines to virtual machines. Boot with a live CD or over the network (PXE) and turn machines into KVM guests. http://libguestfs.org/virt-v2v _______________________________________________ Libguestfs mailing list [email protected] https://www.redhat.com/mailman/listinfo/libguestfs
