iForbid inet connections to inet6 socket when ipv6 is requested - geomyidae - A small C-based gopherd. Err bitreich.org 70 hgit clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ URL:git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ bitreich.org 70 1Log /scm/geomyidae/log.gph bitreich.org 70 1Files /scm/geomyidae/files.gph bitreich.org 70 1Refs /scm/geomyidae/refs.gph bitreich.org 70 1Tags /scm/geomyidae/tag bitreich.org 70 1README /scm/geomyidae/file/README.gph bitreich.org 70 1LICENSE /scm/geomyidae/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit dfb715b2f86a449eacc1c5b33568a3c60b12a5d5 /scm/geomyidae/commit/dfb715b2f86a449eacc1c5b33568a3c60b12a5d5.gph bitreich.org 70 1parent 87e1fba0998bc690d6ebb33ca8b4087a5d97af1a /scm/geomyidae/commit/87e1fba0998bc690d6ebb33ca8b4087a5d97af1a.gph bitreich.org 70 hAuthor: Quentin Rameau URL:mailto:quinq@fifth.space bitreich.org 70 iDate: Thu, 30 Aug 2018 21:18:01 +0200 Err bitreich.org 70 i Err bitreich.org 70 iForbid inet connections to inet6 socket when ipv6 is requested Err bitreich.org 70 i Err bitreich.org 70 iSigned-off-by: Christoph Lohmann <20h@r-36.net> Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M main.c | 15 +++++++++++++-- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 13 insertions(+), 2 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/main.c b/main.c /scm/geomyidae/file/main.c.gph bitreich.org 70 i@@ -300,7 +300,10 @@ getlistenfd(struct addrinfo *hints, char *bindip, char *port) Err bitreich.org 70 i char addstr[INET6_ADDRSTRLEN]; Err bitreich.org 70 i struct addrinfo *ai, *rp; Err bitreich.org 70 i void *sinaddr; Err bitreich.org 70 i- int on, listfd, aierr; Err bitreich.org 70 i+ int on, reqaf, listfd, aierr; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if ((reqaf = hints->ai_family) == AF_UNSPEC) Err bitreich.org 70 i+ hints->ai_family = AF_INET6; Err bitreich.org 70 i Err bitreich.org 70 i if ((aierr = getaddrinfo(bindip, port, hints, &ai)) || ai == NULL) { Err bitreich.org 70 i fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(aierr)); Err bitreich.org 70 i@@ -321,6 +324,14 @@ getlistenfd(struct addrinfo *hints, char *bindip, char *port) Err bitreich.org 70 i break; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+ if (reqaf == AF_INET6 && Err bitreich.org 70 i+ (setsockopt(listfd, IPPROTO_IPV6, IPV6_V6ONLY, &on, Err bitreich.org 70 i+ sizeof(on)) < 0)) { Err bitreich.org 70 i+ close(listfd); Err bitreich.org 70 i+ listfd = -1; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i sinaddr = (rp->ai_family == AF_INET) ? Err bitreich.org 70 i (void *)&((struct sockaddr_in *)rp->ai_addr)->sin_addr : Err bitreich.org 70 i (void *)&((struct sockaddr_in6 *)rp->ai_addr)->sin6_addr; Err bitreich.org 70 i@@ -377,7 +388,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i bindip = NULL; Err bitreich.org 70 i ohost = NULL; Err bitreich.org 70 i sport = NULL; Err bitreich.org 70 i- inetf = AF_INET6; Err bitreich.org 70 i+ inetf = AF_UNSPEC; Err bitreich.org 70 i usechroot = 0; Err bitreich.org 70 i nocgi = 0; Err bitreich.org 70 i Err bitreich.org 70 .