diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2019-01-03 11:41:39 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2019-01-03 13:07:50 +0000 |
commit | c604b8f23152bca3aa208e6d9b8f2b0399eb105b (patch) | |
tree | b1b44929f6f80bc410ae942f6229a484cd71377f /main | |
parent | 23c92b4a69790efbd5a3897c4da9d1edf85a4b5c (diff) | |
download | aports-c604b8f23152bca3aa208e6d9b8f2b0399eb105b.tar.bz2 aports-c604b8f23152bca3aa208e6d9b8f2b0399eb105b.tar.xz |
main/lua-cqueues: backport fix for DNS
Fixes testsuite hang in lua-http on s390x.
upstream: https://github.com/wahern/dns/pull/27
Diffstat (limited to 'main')
-rw-r--r-- | main/lua-cqueues/APKBUILD | 6 | ||||
-rw-r--r-- | main/lua-cqueues/dns-fix.patch | 339 |
2 files changed, 343 insertions, 2 deletions
diff --git a/main/lua-cqueues/APKBUILD b/main/lua-cqueues/APKBUILD index ef45b2a19b..dcdf4a465e 100644 --- a/main/lua-cqueues/APKBUILD +++ b/main/lua-cqueues/APKBUILD @@ -4,7 +4,7 @@ _luaversions="5.1 5.2 5.3" pkgname=lua-cqueues _pkgname=cqueues pkgver=20171014 -pkgrel=2 +pkgrel=3 pkgdesc="Lua event loop using coroutines" url="http://25thandclement.com/~william/projects/cqueues.html" arch="all" @@ -18,6 +18,7 @@ for _i in $_luaversions; do done source="cqueues-$pkgver.tar.gz::https://github.com/wahern/cqueues/archive/rel-$pkgver.tar.gz libressl-2.5.patch + dns-fix.patch " builddir="$srcdir/cqueues-rel-$pkgver" @@ -52,4 +53,5 @@ _package() { } sha512sums="e2fd7620aba74bbb745a21655e3a59d78ba2efcbfecd50d9ce65817cb131314716cf6fb6800214c4e9c0c3864d9ec56635c35ce3fef1d6f1843326c9a8637be0 cqueues-20171014.tar.gz -7371797feaf41ac6f50fd21fde0703afee5d4430bc186a9ac48d47fe3fa818cfc76cb0166fd24243c8796a5ef93db4235d8b67e7f3fd90758fff26bbdb7e4ae8 libressl-2.5.patch" +7371797feaf41ac6f50fd21fde0703afee5d4430bc186a9ac48d47fe3fa818cfc76cb0166fd24243c8796a5ef93db4235d8b67e7f3fd90758fff26bbdb7e4ae8 libressl-2.5.patch +3ac4c1ef5a466184bb6e61baa2f779aaba028ac63a6927696e31c578a97165fcd4f63b6571989b24220350432e5b0b47ac3ba1895f0af417dbf5ecd58f5afbc4 dns-fix.patch" diff --git a/main/lua-cqueues/dns-fix.patch b/main/lua-cqueues/dns-fix.patch new file mode 100644 index 0000000000..1ad02df774 --- /dev/null +++ b/main/lua-cqueues/dns-fix.patch @@ -0,0 +1,339 @@ +From e1677a4dc4737f5dce7faaa535ce52f2381bbd20 Mon Sep 17 00:00:00 2001 +From: daurnimator <quae@daurnimator.com> +Date: Sat, 16 Jun 2018 20:35:39 +0100 +Subject: [PATCH] src/lib/dns.c: Bring in fixes from + https://github.com/wahern/dns/pull/27 + +--- + src/lib/dns.c | 78 ++++++++++++++++++++++++++++++++++++++++++--------- + 1 file changed, 64 insertions(+), 14 deletions(-) + +diff --git a/src/lib/dns.c b/src/lib/dns.c +index a6bb6a6..23a350b 100644 +--- a/src/lib/dns.c ++++ b/src/lib/dns.c +@@ -28,6 +28,9 @@ + #define _XOPEN_SOURCE 600 + #endif + ++#undef _DEFAULT_SOURCE ++#define _DEFAULT_SOURCE ++ + #undef _BSD_SOURCE + #define _BSD_SOURCE + +@@ -203,10 +206,11 @@ + #endif + + #ifndef HAVE_STATIC_ASSERT +-#if DNS_GNUC_PREREQ(0,0,0) && !DNS_GNUC_PREREQ(4,6,0) +-#define HAVE_STATIC_ASSERT 0 /* glibc doesn't check GCC version */ ++#if (defined static_assert) && \ ++ (!DNS_GNUC_PREREQ(0,0,0) || DNS_GNUC_PREREQ(4,6,0)) /* glibc doesn't check GCC version */ ++#define HAVE_STATIC_ASSERT 1 + #else +-#define HAVE_STATIC_ASSERT (defined static_assert) ++#define HAVE_STATIC_ASSERT 0 + #endif + #endif + +@@ -372,7 +376,11 @@ const char *dns_strerror(int error) { + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + #ifndef HAVE___ATOMIC_FETCH_ADD +-#define HAVE___ATOMIC_FETCH_ADD (defined __ATOMIC_RELAXED) ++#ifdef __ATOMIC_RELAXED ++#define HAVE___ATOMIC_FETCH_ADD 1 ++#else ++#define HAVE___ATOMIC_FETCH_ADD 0 ++#endif + #endif + + #ifndef HAVE___ATOMIC_FETCH_SUB +@@ -779,7 +787,11 @@ DNS_NOTUSED static size_t dns_strnlcpy(char *dst, size_t lim, const char *src, s + } /* dns_strnlcpy() */ + + +-#define DNS_HAVE_SOCKADDR_UN (defined AF_UNIX && !defined _WIN32) ++#if (defined AF_UNIX && !defined _WIN32) ++#define DNS_HAVE_SOCKADDR_UN 1 ++#else ++#define DNS_HAVE_SOCKADDR_UN 0 ++#endif + + static size_t dns_af_len(int af) { + static const size_t table[AF_MAX] = { +@@ -4419,6 +4431,7 @@ struct dns_resolv_conf *dns_resconf_open(int *error) { + }; + struct dns_resolv_conf *resconf; + struct sockaddr_in *sin; ++ size_t len; + + if (!(resconf = malloc(sizeof *resconf))) + goto syerr; +@@ -4436,13 +4449,11 @@ struct dns_resolv_conf *dns_resconf_open(int *error) { + if (0 != gethostname(resconf->search[0], sizeof resconf->search[0])) + goto syerr; + +- dns_d_anchor(resconf->search[0], sizeof resconf->search[0], resconf->search[0], strlen(resconf->search[0])); +- dns_d_cleave(resconf->search[0], sizeof resconf->search[0], resconf->search[0], strlen(resconf->search[0])); +- +- /* +- * XXX: If gethostname() returned a string without any label +- * separator, then search[0][0] should be NUL. +- */ ++ len = strlen(resconf->search[0]); ++ len = dns_d_anchor(resconf->search[0], sizeof resconf->search[0], resconf->search[0], len); ++ len = dns_d_cleave(resconf->search[0], sizeof resconf->search[0], resconf->search[0], len); ++ if (1 == len) /* gethostname() returned a string without any label */ ++ resconf->search[0][0] = '\0'; + + dns_resconf_acquire(resconf); + +@@ -6115,11 +6126,19 @@ static void dns_socketclose(int *fd, const struct dns_options *opts) { + #endif + + #ifndef HAVE_SOCK_CLOEXEC +-#define HAVE_SOCK_CLOEXEC (defined SOCK_CLOEXEC) ++#ifdef SOCK_CLOEXEC ++#define HAVE_SOCK_CLOEXEC 1 ++#else ++#define HAVE_SOCK_CLOEXEC 0 ++#endif + #endif + + #ifndef HAVE_SOCK_NONBLOCK +-#define HAVE_SOCK_NONBLOCK (defined SOCK_NONBLOCK) ++#ifdef SOCK_NONBLOCK ++#define HAVE_SOCK_NONBLOCK 1 ++#else ++#define HAVE_SOCK_NONBLOCK 0 ++#endif + #endif + + #define DNS_SO_MAXTRY 7 +@@ -6595,11 +6614,13 @@ int dns_so_check(struct dns_socket *so) { + switch (so->state) { + case DNS_SO_UDP_INIT: + so->state++; ++ /* FALL THROUGH */ + case DNS_SO_UDP_CONN: + if (0 != connect(so->udp, (struct sockaddr *)&so->remote, dns_sa_len(&so->remote))) + goto soerr; + + so->state++; ++ /* FALL THROUGH */ + case DNS_SO_UDP_SEND: + if (0 > (n = send(so->udp, (void *)so->query->data, so->query->end, 0))) + goto soerr; +@@ -6608,6 +6629,7 @@ int dns_so_check(struct dns_socket *so) { + so->stat.udp.sent.count++; + + so->state++; ++ /* FALL THROUGH */ + case DNS_SO_UDP_RECV: + if (0 > (n = recv(so->udp, (void *)so->answer->data, so->answer->size, 0))) + goto soerr; +@@ -6622,11 +6644,13 @@ int dns_so_check(struct dns_socket *so) { + goto trash; + + so->state++; ++ /* FALL THROUGH */ + case DNS_SO_UDP_DONE: + if (!dns_header(so->answer)->tc || so->type == SOCK_DGRAM) + return 0; + + so->state++; ++ /* FALL THROUGH */ + case DNS_SO_TCP_INIT: + if (dns_so_tcp_keep(so)) { + so->state = DNS_SO_TCP_SEND; +@@ -6641,6 +6665,7 @@ int dns_so_check(struct dns_socket *so) { + goto error; + + so->state++; ++ /* FALL THROUGH */ + case DNS_SO_TCP_CONN: + if (0 != connect(so->tcp, (struct sockaddr *)&so->remote, dns_sa_len(&so->remote))) { + if (dns_soerr() != DNS_EISCONN) +@@ -6648,16 +6673,19 @@ int dns_so_check(struct dns_socket *so) { + } + + so->state++; ++ /* FALL THROUGH */ + case DNS_SO_TCP_SEND: + if ((error = dns_so_tcp_send(so))) + goto error; + + so->state++; ++ /* FALL THROUGH */ + case DNS_SO_TCP_RECV: + if ((error = dns_so_tcp_recv(so))) + goto error; + + so->state++; ++ /* FALL THROUGH */ + case DNS_SO_TCP_DONE: + /* close unless DNS_RESCONF_TCP_ONLY (see dns_res_tcp2type) */ + if (so->type != SOCK_STREAM) { +@@ -7269,6 +7297,7 @@ static int dns_res_exec(struct dns_resolver *R) { + switch (F->state) { + case DNS_R_INIT: + F->state++; ++ /* FALL THROUGH */ + case DNS_R_GLUE: + if (R->sp == 0) + dgoto(R->sp, DNS_R_SWITCH); +@@ -7295,6 +7324,7 @@ static int dns_res_exec(struct dns_resolver *R) { + } + + F->state++; ++ /* FALL THROUGH */ + case DNS_R_SWITCH: + while (F->which < (int)sizeof R->resconf->lookup && R->resconf->lookup[F->which]) { + switch (R->resconf->lookup[F->which++]) { +@@ -7383,16 +7413,19 @@ static int dns_res_exec(struct dns_resolver *R) { + goto error; + + F->state++; ++ /* FALL THROUGH */ + case DNS_R_SUBMIT: + if ((error = R->cache->submit(F->query, R->cache))) + goto error; + + F->state++; ++ /* FALL THROUGH */ + case DNS_R_CHECK: + if ((error = R->cache->check(R->cache))) + goto error; + + F->state++; ++ /* FALL THROUGH */ + case DNS_R_FETCH: + error = 0; + +@@ -7418,6 +7451,7 @@ static int dns_res_exec(struct dns_resolver *R) { + R->search = 0; + + F->state++; ++ /* FALL THROUGH */ + case DNS_R_SEARCH: + /* + * XXX: We probably should only apply the domain search +@@ -7430,11 +7464,13 @@ static int dns_res_exec(struct dns_resolver *R) { + goto error; + + F->state++; ++ /* FALL THROUGH */ + case DNS_R_HINTS: + if (!dns_p_setptr(&F->hints, dns_hints_query(R->hints, F->query, &error))) + goto error; + + F->state++; ++ /* FALL THROUGH */ + case DNS_R_ITERATE: + dns_rr_i_init(&F->hints_i, F->hints); + +@@ -7444,6 +7480,7 @@ static int dns_res_exec(struct dns_resolver *R) { + F->hints_i.args[0] = F->hints->end; + + F->state++; ++ /* FALL THROUGH */ + case DNS_R_FOREACH_NS: + dns_rr_i_save(&F->hints_i); + +@@ -7533,6 +7570,7 @@ static int dns_res_exec(struct dns_resolver *R) { + + F->state++; + } ++ /* FALL THROUGH */ + case DNS_R_QUERY_A: + if (dns_so_elapsed(&R->so) >= dns_resconf_timeout(R->resconf)) + dgoto(R->sp, DNS_R_FOREACH_A); +@@ -7636,6 +7674,7 @@ static int dns_res_exec(struct dns_resolver *R) { + dns_rr_i_init(&R->smart, F->answer); + + F->state++; ++ /* FALL THROUGH */ + case DNS_R_SMART0_A: + if (&F[1] >= endof(R->stack)) + dgoto(R->sp, DNS_R_DONE); +@@ -8281,11 +8320,13 @@ int dns_ai_nextent(struct addrinfo **ent, struct dns_addrinfo *ai) { + switch (ai->state) { + case DNS_AI_S_INIT: + ai->state++; ++ /* FALL THROUGH */ + case DNS_AI_S_NEXTAF: + if (!dns_ai_nextaf(ai)) + dns_ai_goto(DNS_AI_S_DONE); + + ai->state++; ++ /* FALL THROUGH */ + case DNS_AI_S_NUMERIC: + if (1 == dns_inet_pton(AF_INET, ai->qname, &any.a)) { + if (ai->af.atype == AF_INET) { +@@ -8309,6 +8350,7 @@ int dns_ai_nextent(struct addrinfo **ent, struct dns_addrinfo *ai) { + dns_ai_goto(DNS_AI_S_NEXTAF); + + ai->state++; ++ /* FALL THROUGH */ + case DNS_AI_S_SUBMIT: + assert(ai->res); + +@@ -8316,11 +8358,13 @@ int dns_ai_nextent(struct addrinfo **ent, struct dns_addrinfo *ai) { + return error; + + ai->state++; ++ /* FALL THROUGH */ + case DNS_AI_S_CHECK: + if ((error = dns_res_check(ai->res))) + return error; + + ai->state++; ++ /* FALL THROUGH */ + case DNS_AI_S_FETCH: + if (!(ans = dns_res_fetch_and_study(ai->res, &error))) + return error; +@@ -8344,6 +8388,7 @@ int dns_ai_nextent(struct addrinfo **ent, struct dns_addrinfo *ai) { + ai->i.sort = &dns_rr_i_order; + + ai->state++; ++ /* FALL THROUGH */ + case DNS_AI_S_FOREACH_I: + if (!dns_rr_grep(&rr, 1, &ai->i, ai->answer, &error)) + dns_ai_goto(DNS_AI_S_NEXTAF); +@@ -8378,10 +8423,12 @@ int dns_ai_nextent(struct addrinfo **ent, struct dns_addrinfo *ai) { + } /* switch() */ + + ai->state++; ++ /* FALL THROUGH */ + case DNS_AI_S_INIT_G: + ai->g_depth = 0; + + ai->state++; ++ /* FALL THROUGH */ + case DNS_AI_S_ITERATE_G: + dns_strlcpy(ai->g_cname, ai->cname, sizeof ai->g_cname); + dns_rr_i_init(&ai->g, ai->glue); +@@ -8390,6 +8437,7 @@ int dns_ai_nextent(struct addrinfo **ent, struct dns_addrinfo *ai) { + ai->g.type = ai->af.qtype; + + ai->state++; ++ /* FALL THROUGH */ + case DNS_AI_S_FOREACH_G: + if (!dns_rr_grep(&rr, 1, &ai->g, ai->glue, &error)) { + if (dns_rr_i_count(&ai->g) > 0) +@@ -8414,11 +8462,13 @@ int dns_ai_nextent(struct addrinfo **ent, struct dns_addrinfo *ai) { + return error; + + ai->state++; ++ /* FALL THROUGH */ + case DNS_AI_S_CHECK_G: + if ((error = dns_res_check(ai->res))) + return error; + + ai->state++; ++ /* FALL THROUGH */ + case DNS_AI_S_FETCH_G: + if (!(ans = dns_res_fetch_and_study(ai->res, &error))) + return error; |