From 92a2b1758aa56383360603567c17646a1a7fb443 Mon Sep 17 00:00:00 2001 From: "Schanzenbach, Martin" Date: Thu, 27 Jun 2019 09:08:06 +0200 Subject: fix #5782 --- src/gns/nss/nss_gns_query.c | 99 ++++++++++++++++++++------------------------- 1 file changed, 43 insertions(+), 56 deletions(-) (limited to 'src/gns/nss/nss_gns_query.c') diff --git a/src/gns/nss/nss_gns_query.c b/src/gns/nss/nss_gns_query.c index 380788d35..253bb0f02 100644 --- a/src/gns/nss/nss_gns_query.c +++ b/src/gns/nss/nss_gns_query.c @@ -30,6 +30,7 @@ #include #include +#define TIMEOUT "5s" static void kwait (pid_t chld) @@ -37,9 +38,7 @@ kwait (pid_t chld) int ret; kill (chld, SIGKILL); - waitpid (chld, - &ret, - 0); + waitpid (chld, &ret, 0); } @@ -56,9 +55,7 @@ kwait (pid_t chld) * else 0 */ int -gns_resolve_name (int af, - const char *name, - struct userdata *u) +gns_resolve_name (int af, const char *name, struct userdata *u) { FILE *p; char line[128]; @@ -73,88 +70,78 @@ gns_resolve_name (int af, return -1; if (0 == pid) { - char *argv[] = { - "gnunet-gns", - "-r", - "-t", - (AF_INET6 == af) ? "AAAA" : "A", - "-u", - (char *) name, - NULL - }; + char *argv[] = {"gnunet-gns", + "-r", + "-t", + (AF_INET6 == af) ? "AAAA" : "A", + "-u", + (char *) name, + "-T", + TIMEOUT, + NULL}; (void) close (STDOUT_FILENO); - if ( (0 != close (out[0])) || - (STDOUT_FILENO != dup2 (out[1], STDOUT_FILENO)) ) + if ((0 != close (out[0])) || + (STDOUT_FILENO != dup2 (out[1], STDOUT_FILENO))) _exit (1); - (void) execvp ("gnunet-gns", - argv); + (void) execvp ("gnunet-gns", argv); _exit (1); } (void) close (out[1]); p = fdopen (out[0], "r"); if (NULL == p) - { - kwait (pid); - return -1; - } - while (NULL != fgets (line, - sizeof (line), - p)) + { + kwait (pid); + return -1; + } + while (NULL != fgets (line, sizeof (line), p)) { if (u->count >= MAX_ENTRIES) break; - if (line[strlen(line)-1] == '\n') + if (line[strlen (line) - 1] == '\n') { - line[strlen(line)-1] = '\0'; + line[strlen (line) - 1] = '\0'; if (AF_INET == af) { - if (inet_pton(af, - line, - &u->data.ipv4[u->count])) + if (inet_pton (af, line, &u->data.ipv4[u->count])) + { + u->count++; + u->data_len += sizeof (ipv4_address_t); + } + else { - u->count++; - u->data_len += sizeof(ipv4_address_t); - } - else - { - (void) fclose (p); + (void) fclose (p); kwait (pid); - errno = EINVAL; - return -1; - } + errno = EINVAL; + return -1; + } } else if (AF_INET6 == af) { - if (inet_pton(af, - line, - &u->data.ipv6[u->count])) + if (inet_pton (af, line, &u->data.ipv6[u->count])) { - u->count++; - u->data_len += sizeof(ipv6_address_t); - } - else + u->count++; + u->data_len += sizeof (ipv6_address_t); + } + else { - (void) fclose (p); + (void) fclose (p); kwait (pid); - errno = EINVAL; - return -1; - } + errno = EINVAL; + return -1; + } } } } (void) fclose (p); - waitpid (pid, - &ret, - 0); + waitpid (pid, &ret, 0); if (! WIFEXITED (ret)) return -1; if (4 == WEXITSTATUS (ret)) return -2; /* not for GNS */ if (3 == ret) return -3; /* timeout -> not found */ - if ( (2 == WEXITSTATUS (ret)) || - (1 == WEXITSTATUS (ret)) ) + if ((2 == WEXITSTATUS (ret)) || (1 == WEXITSTATUS (ret))) return -2; /* launch failure -> service unavailable */ return 0; } -- cgit v1.2.3