Date: Sat, 6 Jul 2013 22:47:58 +0200 From: Pawel Jakub Dawidek <pjd@FreeBSD.org> To: Jilles Tjoelker <jilles@stack.nl> Cc: arch@FreeBSD.org Subject: Re: General purpose library for name/value pairs. Message-ID: <20130706204758.GG25842@garage.freebsd.pl> In-Reply-To: <20130705205856.GA19346@stack.nl> References: <20130704215329.GG1402@garage.freebsd.pl> <20130705205856.GA19346@stack.nl>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
On Fri, Jul 05, 2013 at 10:58:56PM +0200, Jilles Tjoelker wrote:
> On Thu, Jul 04, 2013 at 11:53:30PM +0200, Pawel Jakub Dawidek wrote:
> > The library allows to send and receive descriptors, of course only over
> > UNIX domain sockets:
>
> > nvlist_t *nvl;
> > int fd;
> >
> > fd = open("/etc/passwd", O_RDONLY);
> > if (fd < 0)
> > err(1, "open(/etc/passwd) failed");
> >
> > nvl = nvlist_create(0);
> > nvlist_add_string(nvl, "filename", "/etc/passwd");
> > nvlist_move_descriptor(nvl, "fd", fd);
> > if (nvlist_send(sock, nvl) < 0)
> > err(1, "nvlist_send() failed");
> > nvlist_destroy(nvl);
>
> > Also note that I used nvlist_move_descriptor() function and not
> > nvlist_add_descriptor(). The former will allow nvlist to consume the
> > given descriptor, so we don't have to close it, the latter will dup(2)
> > the given descriptor and then add it to the nvlist.
>
> The library should use fcntl(fd, F_DUPFD_CLOEXEC, 0) instead of dup(fd)
> so it does not pass the fd in case another thread forks. This is
> available in sufficiently recent head, stable/9 and stable/8.
>
> (On the other hand, if the application provides a file descriptor, I
> think it is not necessary to set the close-on-exec flag because only the
> creator of the file descriptor can do so in a race-free manner.)
>
> The recvmsg() call should use the MSG_CMSG_CLOEXEC flag for the same
> reason. This is currently only available in head. It is probably best to
> fcntl(fd, F_SETFD, 1) if MSG_CMSG_CLOEXEC is not available so that
> people do not write applications that assume close-on-exec is clear.
I fully agree and implemented what you have suggested.
Thanks!
--
Pawel Jakub Dawidek http://www.wheelsystems.com
FreeBSD committer http://www.FreeBSD.org
Am I Evil? Yes, I Am! http://mobter.com
[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.20 (FreeBSD)
iEYEARECAAYFAlHYgn4ACgkQForvXbEpPzS39gCcDAOWBYaxdJlMOO7QgJh7sGR7
CSgAnRLBhO/ww9+//jpX45PTuUV8UMHA
=J0Ln
-----END PGP SIGNATURE-----
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130706204758.GG25842>
