* [PATCH] Create more sockets with SOCK_CLOEXEC [BZ #15722]
@ 2017-04-18 18:41 Florian Weimer
2017-04-18 19:53 ` Adhemerval Zanella
2017-04-19 15:19 ` Joseph Myers
0 siblings, 2 replies; 6+ messages in thread
From: Florian Weimer @ 2017-04-18 18:41 UTC (permalink / raw)
To: libc-alpha
2017-04-18 Florian Weimer <fweimer@redhat.com>
[BZ #15722]
* resolv/res_hconf.c (_res_hconf_reorder_addrs): Create socket
with SOCK_CLOEXEC.
* resolv/res_send.c (send_vc, reopen): Likewise.
* sysdeps/posix/getaddrinfo.c (getaddrinfo): Likewise.
* sysdeps/unix/sysv/linux/check_native.c (__check_native):
Likewise.
* sysdeps/unix/sysv/linux/ifaddrs.c (__netlink_open): Likewise.
* inet/rexec.c (rexec_af): Add comment.
* inet/rcmd.c (rresvport_af): Likewise.
diff --git a/inet/rcmd.c b/inet/rcmd.c
index b7cc7a8..e43d4af 100644
--- a/inet/rcmd.c
+++ b/inet/rcmd.c
@@ -383,6 +383,7 @@ rresvport_af (int *alport, sa_family_t family)
__set_errno (EAFNOSUPPORT);
return -1;
}
+ /* NB: No SOCK_CLOXEC for backwards compatibility. */
s = __socket(family, SOCK_STREAM, 0);
if (s < 0)
return -1;
diff --git a/inet/rexec.c b/inet/rexec.c
index 43fb67b..82e15ae 100644
--- a/inet/rexec.c
+++ b/inet/rexec.c
@@ -86,6 +86,7 @@ rexec_af (char **ahost, int rport, const char *name, const char *pass,
}
ruserpass(res0->ai_canonname, &name, &pass);
retry:
+ /* NB: No SOCK_CLOXEC for backwards compatibility. */
s = __socket(res0->ai_family, res0->ai_socktype, 0);
if (s < 0) {
perror("rexec: socket");
diff --git a/nis/nis_findserv.c b/nis/nis_findserv.c
index 77f3c7c..8e01164 100644
--- a/nis/nis_findserv.c
+++ b/nis/nis_findserv.c
@@ -142,7 +142,7 @@ __nis_findfastest_with_timeout (dir_binding *bind,
}
/* Create RPC handle */
- sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ sock = socket (AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_UDP);
clnt = clntudp_create (&saved_sin, NIS_PROG, NIS_VERSION, *timeout, &sock);
if (clnt == NULL)
{
diff --git a/resolv/res_hconf.c b/resolv/res_hconf.c
index d0d116d..8fc06e9 100644
--- a/resolv/res_hconf.c
+++ b/resolv/res_hconf.c
@@ -388,7 +388,7 @@ _res_hconf_reorder_addrs (struct hostent *hp)
/* Initialize interface table. */
/* The SIOCGIFNETMASK ioctl will only work on an AF_INET socket. */
- sd = __socket (AF_INET, SOCK_DGRAM, 0);
+ sd = __socket (AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
if (sd < 0)
return;
diff --git a/resolv/res_send.c b/resolv/res_send.c
index ffb9a6a..3de0b3e 100644
--- a/resolv/res_send.c
+++ b/resolv/res_send.c
@@ -692,7 +692,8 @@ send_vc(res_state statp,
if (statp->_vcsock >= 0)
__res_iclose(statp, false);
- statp->_vcsock = socket(nsap->sa_family, SOCK_STREAM, 0);
+ statp->_vcsock = socket
+ (nsap->sa_family, SOCK_STREAM | SOCK_CLOEXEC, 0);
if (statp->_vcsock < 0) {
*terrno = errno;
Perror(statp, stderr, "socket(vc)", errno);
@@ -902,14 +903,16 @@ reopen (res_state statp, int *terrno, int ns)
/* only try IPv6 if IPv6 NS and if not failed before */
if (nsap->sa_family == AF_INET6 && !statp->ipv6_unavail) {
- EXT(statp).nssocks[ns]
- = socket(PF_INET6, SOCK_DGRAM|SOCK_NONBLOCK, 0);
+ EXT(statp).nssocks[ns] = socket
+ (PF_INET6,
+ SOCK_DGRAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0);
if (EXT(statp).nssocks[ns] < 0)
statp->ipv6_unavail = errno == EAFNOSUPPORT;
slen = sizeof (struct sockaddr_in6);
} else if (nsap->sa_family == AF_INET) {
- EXT(statp).nssocks[ns]
- = socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, 0);
+ EXT(statp).nssocks[ns] = socket
+ (PF_INET,
+ SOCK_DGRAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0);
slen = sizeof (struct sockaddr_in);
}
if (EXT(statp).nssocks[ns] < 0) {
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
index eed7264..a55cc39 100644
--- a/sysdeps/posix/getaddrinfo.c
+++ b/sysdeps/posix/getaddrinfo.c
@@ -2472,7 +2472,7 @@ getaddrinfo (const char *name, const char *service,
close_retry:
close_not_cancel_no_status (fd);
af = q->ai_family;
- fd = __socket (af, SOCK_DGRAM, IPPROTO_IP);
+ fd = __socket (af, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_IP);
}
else
{
diff --git a/sysdeps/unix/sysv/linux/check_native.c b/sysdeps/unix/sysv/linux/check_native.c
index 4a16460..7e5a7c9 100644
--- a/sysdeps/unix/sysv/linux/check_native.c
+++ b/sysdeps/unix/sysv/linux/check_native.c
@@ -41,7 +41,7 @@ void
__check_native (uint32_t a1_index, int *a1_native,
uint32_t a2_index, int *a2_native)
{
- int fd = __socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
+ int fd = __socket (PF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE);
struct sockaddr_nl nladdr;
memset (&nladdr, '\0', sizeof (nladdr));
diff --git a/sysdeps/unix/sysv/linux/ifaddrs.c b/sysdeps/unix/sysv/linux/ifaddrs.c
index cff12c2..3bc9902 100644
--- a/sysdeps/unix/sysv/linux/ifaddrs.c
+++ b/sysdeps/unix/sysv/linux/ifaddrs.c
@@ -255,7 +255,7 @@ __netlink_open (struct netlink_handle *h)
{
struct sockaddr_nl nladdr;
- h->fd = __socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
+ h->fd = __socket (PF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE);
if (h->fd < 0)
goto out;
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Create more sockets with SOCK_CLOEXEC [BZ #15722]
2017-04-18 18:41 [PATCH] Create more sockets with SOCK_CLOEXEC [BZ #15722] Florian Weimer
@ 2017-04-18 19:53 ` Adhemerval Zanella
2017-04-18 20:09 ` Florian Weimer
2017-04-19 15:19 ` Joseph Myers
1 sibling, 1 reply; 6+ messages in thread
From: Adhemerval Zanella @ 2017-04-18 19:53 UTC (permalink / raw)
To: libc-alpha
LGTM. So I presume this patch covers all the internal sockets (as described
in the patch), correct?
On 18/04/2017 15:40, Florian Weimer wrote:
> 2017-04-18 Florian Weimer <fweimer@redhat.com>
>
> [BZ #15722]
> * resolv/res_hconf.c (_res_hconf_reorder_addrs): Create socket
> with SOCK_CLOEXEC.
> * resolv/res_send.c (send_vc, reopen): Likewise.
> * sysdeps/posix/getaddrinfo.c (getaddrinfo): Likewise.
> * sysdeps/unix/sysv/linux/check_native.c (__check_native):
> Likewise.
> * sysdeps/unix/sysv/linux/ifaddrs.c (__netlink_open): Likewise.
> * inet/rexec.c (rexec_af): Add comment.
> * inet/rcmd.c (rresvport_af): Likewise.
>
> diff --git a/inet/rcmd.c b/inet/rcmd.c
> index b7cc7a8..e43d4af 100644
> --- a/inet/rcmd.c
> +++ b/inet/rcmd.c
> @@ -383,6 +383,7 @@ rresvport_af (int *alport, sa_family_t family)
> __set_errno (EAFNOSUPPORT);
> return -1;
> }
> + /* NB: No SOCK_CLOXEC for backwards compatibility. */
Why maintaining backwards is important in this situation?
> s = __socket(family, SOCK_STREAM, 0);
> if (s < 0)
> return -1;
> diff --git a/inet/rexec.c b/inet/rexec.c
> index 43fb67b..82e15ae 100644
> --- a/inet/rexec.c
> +++ b/inet/rexec.c
> @@ -86,6 +86,7 @@ rexec_af (char **ahost, int rport, const char *name, const char *pass,
> }
> ruserpass(res0->ai_canonname, &name, &pass);
> retry:
> + /* NB: No SOCK_CLOXEC for backwards compatibility. */
> s = __socket(res0->ai_family, res0->ai_socktype, 0);
> if (s < 0) {
> perror("rexec: socket");
> diff --git a/nis/nis_findserv.c b/nis/nis_findserv.c
> index 77f3c7c..8e01164 100644
> --- a/nis/nis_findserv.c
> +++ b/nis/nis_findserv.c
> @@ -142,7 +142,7 @@ __nis_findfastest_with_timeout (dir_binding *bind,
> }
>
> /* Create RPC handle */
> - sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
> + sock = socket (AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_UDP);
> clnt = clntudp_create (&saved_sin, NIS_PROG, NIS_VERSION, *timeout, &sock);
> if (clnt == NULL)
> {
> diff --git a/resolv/res_hconf.c b/resolv/res_hconf.c
> index d0d116d..8fc06e9 100644
> --- a/resolv/res_hconf.c
> +++ b/resolv/res_hconf.c
> @@ -388,7 +388,7 @@ _res_hconf_reorder_addrs (struct hostent *hp)
> /* Initialize interface table. */
>
> /* The SIOCGIFNETMASK ioctl will only work on an AF_INET socket. */
> - sd = __socket (AF_INET, SOCK_DGRAM, 0);
> + sd = __socket (AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
> if (sd < 0)
> return;
>
> diff --git a/resolv/res_send.c b/resolv/res_send.c
> index ffb9a6a..3de0b3e 100644
> --- a/resolv/res_send.c
> +++ b/resolv/res_send.c
> @@ -692,7 +692,8 @@ send_vc(res_state statp,
> if (statp->_vcsock >= 0)
> __res_iclose(statp, false);
>
> - statp->_vcsock = socket(nsap->sa_family, SOCK_STREAM, 0);
> + statp->_vcsock = socket
> + (nsap->sa_family, SOCK_STREAM | SOCK_CLOEXEC, 0);
> if (statp->_vcsock < 0) {
> *terrno = errno;
> Perror(statp, stderr, "socket(vc)", errno);
> @@ -902,14 +903,16 @@ reopen (res_state statp, int *terrno, int ns)
>
> /* only try IPv6 if IPv6 NS and if not failed before */
> if (nsap->sa_family == AF_INET6 && !statp->ipv6_unavail) {
> - EXT(statp).nssocks[ns]
> - = socket(PF_INET6, SOCK_DGRAM|SOCK_NONBLOCK, 0);
> + EXT(statp).nssocks[ns] = socket
> + (PF_INET6,
> + SOCK_DGRAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0);
> if (EXT(statp).nssocks[ns] < 0)
> statp->ipv6_unavail = errno == EAFNOSUPPORT;
> slen = sizeof (struct sockaddr_in6);
> } else if (nsap->sa_family == AF_INET) {
> - EXT(statp).nssocks[ns]
> - = socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, 0);
> + EXT(statp).nssocks[ns] = socket
> + (PF_INET,
> + SOCK_DGRAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0);
> slen = sizeof (struct sockaddr_in);
> }
> if (EXT(statp).nssocks[ns] < 0) {
> diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
> index eed7264..a55cc39 100644
> --- a/sysdeps/posix/getaddrinfo.c
> +++ b/sysdeps/posix/getaddrinfo.c
> @@ -2472,7 +2472,7 @@ getaddrinfo (const char *name, const char *service,
> close_retry:
> close_not_cancel_no_status (fd);
> af = q->ai_family;
> - fd = __socket (af, SOCK_DGRAM, IPPROTO_IP);
> + fd = __socket (af, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_IP);
> }
> else
> {
> diff --git a/sysdeps/unix/sysv/linux/check_native.c b/sysdeps/unix/sysv/linux/check_native.c
> index 4a16460..7e5a7c9 100644
> --- a/sysdeps/unix/sysv/linux/check_native.c
> +++ b/sysdeps/unix/sysv/linux/check_native.c
> @@ -41,7 +41,7 @@ void
> __check_native (uint32_t a1_index, int *a1_native,
> uint32_t a2_index, int *a2_native)
> {
> - int fd = __socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
> + int fd = __socket (PF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE);
>
> struct sockaddr_nl nladdr;
> memset (&nladdr, '\0', sizeof (nladdr));
> diff --git a/sysdeps/unix/sysv/linux/ifaddrs.c b/sysdeps/unix/sysv/linux/ifaddrs.c
> index cff12c2..3bc9902 100644
> --- a/sysdeps/unix/sysv/linux/ifaddrs.c
> +++ b/sysdeps/unix/sysv/linux/ifaddrs.c
> @@ -255,7 +255,7 @@ __netlink_open (struct netlink_handle *h)
> {
> struct sockaddr_nl nladdr;
>
> - h->fd = __socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
> + h->fd = __socket (PF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE);
> if (h->fd < 0)
> goto out;
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Create more sockets with SOCK_CLOEXEC [BZ #15722]
2017-04-18 19:53 ` Adhemerval Zanella
@ 2017-04-18 20:09 ` Florian Weimer
2017-04-18 20:28 ` Adhemerval Zanella
0 siblings, 1 reply; 6+ messages in thread
From: Florian Weimer @ 2017-04-18 20:09 UTC (permalink / raw)
To: Adhemerval Zanella; +Cc: libc-alpha
On 04/18/2017 09:53 PM, Adhemerval Zanella wrote:
> LGTM. So I presume this patch covers all the internal sockets (as described
> in the patch), correct?
As described in the bug? Unfortunately not. There are some holdouts in
nss_nis, which may require some new (internal) Sun RPC interfaces, or a
little bit of code duplication to create the socket within nss_nis
instead. I didn't include that in this patch because these changes will
be less obviously correct.
> On 18/04/2017 15:40, Florian Weimer wrote:
>> 2017-04-18 Florian Weimer <fweimer@redhat.com>
>>
>> [BZ #15722]
>> * resolv/res_hconf.c (_res_hconf_reorder_addrs): Create socket
>> with SOCK_CLOEXEC.
>> * resolv/res_send.c (send_vc, reopen): Likewise.
>> * sysdeps/posix/getaddrinfo.c (getaddrinfo): Likewise.
>> * sysdeps/unix/sysv/linux/check_native.c (__check_native):
>> Likewise.
>> * sysdeps/unix/sysv/linux/ifaddrs.c (__netlink_open): Likewise.
>> * inet/rexec.c (rexec_af): Add comment.
>> * inet/rcmd.c (rresvport_af): Likewise.
>>
>> diff --git a/inet/rcmd.c b/inet/rcmd.c
>> index b7cc7a8..e43d4af 100644
>> --- a/inet/rcmd.c
>> +++ b/inet/rcmd.c
>> @@ -383,6 +383,7 @@ rresvport_af (int *alport, sa_family_t family)
>> __set_errno (EAFNOSUPPORT);
>> return -1;
>> }
>> + /* NB: No SOCK_CLOXEC for backwards compatibility. */
>
> Why maintaining backwards is important in this situation?
It's a legacy interface, so I don't think it's worth introducing a
compat symbol and switch to O_CLOEXEC for these descriptors. The file
descriptor is returned to the caller.
Thanks,
Florian
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Create more sockets with SOCK_CLOEXEC [BZ #15722]
2017-04-18 20:09 ` Florian Weimer
@ 2017-04-18 20:28 ` Adhemerval Zanella
0 siblings, 0 replies; 6+ messages in thread
From: Adhemerval Zanella @ 2017-04-18 20:28 UTC (permalink / raw)
To: Florian Weimer; +Cc: libc-alpha
On 18/04/2017 17:09, Florian Weimer wrote:
> On 04/18/2017 09:53 PM, Adhemerval Zanella wrote:
>> LGTM. So I presume this patch covers all the internal sockets (as described
>> in the patch), correct?
>
> As described in the bug? Unfortunately not. There are some holdouts in nss_nis, which may require some new (internal) Sun RPC interfaces, or a little bit of code duplication to create the socket within nss_nis instead. I didn't include that in this patch because these changes will be less obviously correct.
Right, so I think we can't close this bug yet then.
>> On 18/04/2017 15:40, Florian Weimer wrote:
>>> 2017-04-18 Florian Weimer <fweimer@redhat.com>
>>>
>>> [BZ #15722]
>>> * resolv/res_hconf.c (_res_hconf_reorder_addrs): Create socket
>>> with SOCK_CLOEXEC.
>>> * resolv/res_send.c (send_vc, reopen): Likewise.
>>> * sysdeps/posix/getaddrinfo.c (getaddrinfo): Likewise.
>>> * sysdeps/unix/sysv/linux/check_native.c (__check_native):
>>> Likewise.
>>> * sysdeps/unix/sysv/linux/ifaddrs.c (__netlink_open): Likewise.
>>> * inet/rexec.c (rexec_af): Add comment.
>>> * inet/rcmd.c (rresvport_af): Likewise.
>>>
>>> diff --git a/inet/rcmd.c b/inet/rcmd.c
>>> index b7cc7a8..e43d4af 100644
>>> --- a/inet/rcmd.c
>>> +++ b/inet/rcmd.c
>>> @@ -383,6 +383,7 @@ rresvport_af (int *alport, sa_family_t family)
>>> __set_errno (EAFNOSUPPORT);
>>> return -1;
>>> }
>>> + /* NB: No SOCK_CLOXEC for backwards compatibility. */
>>
>> Why maintaining backwards is important in this situation?
>
> It's a legacy interface, so I don't think it's worth introducing a compat symbol and switch to O_CLOEXEC for these descriptors. The file descriptor is returned to the caller.
>
Right, it makes sense.
> Thanks,
> Florian
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Create more sockets with SOCK_CLOEXEC [BZ #15722]
2017-04-18 18:41 [PATCH] Create more sockets with SOCK_CLOEXEC [BZ #15722] Florian Weimer
2017-04-18 19:53 ` Adhemerval Zanella
@ 2017-04-19 15:19 ` Joseph Myers
2017-04-19 18:24 ` Florian Weimer
1 sibling, 1 reply; 6+ messages in thread
From: Joseph Myers @ 2017-04-19 15:19 UTC (permalink / raw)
To: Florian Weimer; +Cc: libc-alpha
On Tue, 18 Apr 2017, Florian Weimer wrote:
> diff --git a/inet/rcmd.c b/inet/rcmd.c
> index b7cc7a8..e43d4af 100644
> --- a/inet/rcmd.c
> +++ b/inet/rcmd.c
> @@ -383,6 +383,7 @@ rresvport_af (int *alport, sa_family_t family)
> __set_errno (EAFNOSUPPORT);
> return -1;
> }
> + /* NB: No SOCK_CLOXEC for backwards compatibility. */
"CLOXEC" typo, repeated elsewhere in this patch.
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Create more sockets with SOCK_CLOEXEC [BZ #15722]
2017-04-19 15:19 ` Joseph Myers
@ 2017-04-19 18:24 ` Florian Weimer
0 siblings, 0 replies; 6+ messages in thread
From: Florian Weimer @ 2017-04-19 18:24 UTC (permalink / raw)
To: GNU C Library
[-- Attachment #1: Type: text/plain, Size: 504 bytes --]
On 04/19/2017 05:19 PM, Joseph Myers wrote:
> On Tue, 18 Apr 2017, Florian Weimer wrote:
>
>> diff --git a/inet/rcmd.c b/inet/rcmd.c
>> index b7cc7a8..e43d4af 100644
>> --- a/inet/rcmd.c
>> +++ b/inet/rcmd.c
>> @@ -383,6 +383,7 @@ rresvport_af (int *alport, sa_family_t family)
>> __set_errno (EAFNOSUPPORT);
>> return -1;
>> }
>> + /* NB: No SOCK_CLOXEC for backwards compatibility. */
>
> "CLOXEC" typo, repeated elsewhere in this patch.
Thanks, fixed with the attached patch.
Florian
[-- Attachment #2: cloexec.patch --]
[-- Type: text/x-patch, Size: 1048 bytes --]
rcmd/rexec: Fix typo in comment
2017-04-19 Florian Weimer <fweimer@redhat.com>
* inet/rcmd.c (rresvport_af): Fix typo in comment.
* inet/rexec.c (rexec_af): Likewise.
diff --git a/inet/rcmd.c b/inet/rcmd.c
index e43d4af..c285b9e 100644
--- a/inet/rcmd.c
+++ b/inet/rcmd.c
@@ -383,7 +383,7 @@ rresvport_af (int *alport, sa_family_t family)
__set_errno (EAFNOSUPPORT);
return -1;
}
- /* NB: No SOCK_CLOXEC for backwards compatibility. */
+ /* NB: No SOCK_CLOEXEC for backwards compatibility. */
s = __socket(family, SOCK_STREAM, 0);
if (s < 0)
return -1;
diff --git a/inet/rexec.c b/inet/rexec.c
index 82e15ae..bda5367 100644
--- a/inet/rexec.c
+++ b/inet/rexec.c
@@ -86,7 +86,7 @@ rexec_af (char **ahost, int rport, const char *name, const char *pass,
}
ruserpass(res0->ai_canonname, &name, &pass);
retry:
- /* NB: No SOCK_CLOXEC for backwards compatibility. */
+ /* NB: No SOCK_CLOEXEC for backwards compatibility. */
s = __socket(res0->ai_family, res0->ai_socktype, 0);
if (s < 0) {
perror("rexec: socket");
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-04-19 18:24 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-18 18:41 [PATCH] Create more sockets with SOCK_CLOEXEC [BZ #15722] Florian Weimer
2017-04-18 19:53 ` Adhemerval Zanella
2017-04-18 20:09 ` Florian Weimer
2017-04-18 20:28 ` Adhemerval Zanella
2017-04-19 15:19 ` Joseph Myers
2017-04-19 18:24 ` Florian Weimer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).