diff options
author | Martin Schanzenbach <mschanzenbach@posteo.de> | 2020-05-10 00:23:54 +0200 |
---|---|---|
committer | Martin Schanzenbach <mschanzenbach@posteo.de> | 2020-05-10 00:23:54 +0200 |
commit | 44bdb66b46a0b497831eaa395dd6567da9e80acb (patch) | |
tree | 5a089bd833256df76e4e7957f973d468de690db7 /src/gns/nss/nss_gns_query.c | |
parent | 2cd529519d3f9d5034ed222536f8c79ef9e6b86d (diff) | |
download | gnunet-44bdb66b46a0b497831eaa395dd6567da9e80acb.tar.gz gnunet-44bdb66b46a0b497831eaa395dd6567da9e80acb.zip |
fix #5782
Diffstat (limited to 'src/gns/nss/nss_gns_query.c')
-rw-r--r-- | src/gns/nss/nss_gns_query.c | 46 |
1 files changed, 5 insertions, 41 deletions
diff --git a/src/gns/nss/nss_gns_query.c b/src/gns/nss/nss_gns_query.c index 7f6bef90d..af5c91b72 100644 --- a/src/gns/nss/nss_gns_query.c +++ b/src/gns/nss/nss_gns_query.c | |||
@@ -61,7 +61,6 @@ gns_resolve_name (int af, const char *name, struct userdata *u) | |||
61 | char line[128]; | 61 | char line[128]; |
62 | int ret; | 62 | int ret; |
63 | int out[2]; | 63 | int out[2]; |
64 | int tried_arm_start = 0; | ||
65 | pid_t pid; | 64 | pid_t pid; |
66 | 65 | ||
67 | if (0 == getuid ()) | 66 | if (0 == getuid ()) |
@@ -146,51 +145,16 @@ query_gns: | |||
146 | return -1; | 145 | return -1; |
147 | if (4 == WEXITSTATUS (ret)) | 146 | if (4 == WEXITSTATUS (ret)) |
148 | return -2; /* not for GNS */ | 147 | return -2; /* not for GNS */ |
149 | if ((3 == ret) && | 148 | if (5 == WEXITSTATUS (ret)) |
150 | (1 != tried_arm_start)) | 149 | goto restart_arm; /* timeout -> try restart */ |
151 | return -3; /* timeout -> try restart */ | 150 | if (3 == WEXITSTATUS (ret)) |
152 | if ((3 == ret) && | ||
153 | (1 == tried_arm_start)) | ||
154 | return -2; /* timeout -> service unavailable */ | 151 | return -2; /* timeout -> service unavailable */ |
155 | if ((2 == WEXITSTATUS (ret)) || (1 == WEXITSTATUS (ret))) | 152 | if ((2 == WEXITSTATUS (ret)) || (1 == WEXITSTATUS (ret))) |
156 | return -2; /* launch failure -> service unavailable */ | 153 | return -2; /* launch failure -> service unavailable */ |
157 | return 0; | 154 | return 0; |
158 | 155 | restart_arm: | |
159 | pid = fork (); | 156 | system("gnunet-arm -s"); |
160 | if (-1 == pid) | ||
161 | return -1; | ||
162 | if (0 == pid) | ||
163 | { | ||
164 | char *argv[] = { "gnunet-arm", | ||
165 | "-s", /* Raw output for easier parsing */ | ||
166 | NULL }; | ||
167 | |||
168 | (void) close (STDOUT_FILENO); | ||
169 | if ((0 != close (out[0])) || | ||
170 | (STDOUT_FILENO != dup2 (out[1], STDOUT_FILENO))) | ||
171 | _exit (1); | ||
172 | (void) execvp ("gnunet-arm", argv); | ||
173 | _exit (1); | ||
174 | } | ||
175 | (void) close (out[1]); | ||
176 | p = fdopen (out[0], "r"); | ||
177 | if (NULL == p) | ||
178 | { | ||
179 | kwait (pid); | ||
180 | return -1; | ||
181 | } | ||
182 | while (NULL != fgets (line, sizeof(line), p)) | ||
183 | { | ||
184 | /** | ||
185 | * Read output | ||
186 | */ | ||
187 | } | ||
188 | (void) fclose (p); | ||
189 | waitpid (pid, &ret, 0); | ||
190 | tried_arm_start = 1; | ||
191 | goto query_gns; | 157 | goto query_gns; |
192 | |||
193 | |||
194 | } | 158 | } |
195 | 159 | ||
196 | 160 | ||