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
--bygAmIonOAIqBxQB Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable 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: >=20 > > nvlist_t *nvl; > > int fd; > >=20 > > fd =3D open("/etc/passwd", O_RDONLY); > > if (fd < 0) > > err(1, "open(/etc/passwd) failed"); > >=20 > > nvl =3D 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); >=20 > > 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. >=20 > 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. >=20 > (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.) >=20 > 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! --=20 Pawel Jakub Dawidek http://www.wheelsystems.com FreeBSD committer http://www.FreeBSD.org Am I Evil? Yes, I Am! http://mobter.com --bygAmIonOAIqBxQB Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.20 (FreeBSD) iEYEARECAAYFAlHYgn4ACgkQForvXbEpPzS39gCcDAOWBYaxdJlMOO7QgJh7sGR7 CSgAnRLBhO/ww9+//jpX45PTuUV8UMHA =J0Ln -----END PGP SIGNATURE----- --bygAmIonOAIqBxQB--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130706204758.GG25842>