aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2020-05-10 00:23:54 +0200
committerMartin Schanzenbach <mschanzenbach@posteo.de>2020-05-10 00:23:54 +0200
commit44bdb66b46a0b497831eaa395dd6567da9e80acb (patch)
tree5a089bd833256df76e4e7957f973d468de690db7
parent2cd529519d3f9d5034ed222536f8c79ef9e6b86d (diff)
downloadgnunet-44bdb66b46a0b497831eaa395dd6567da9e80acb.tar.gz
gnunet-44bdb66b46a0b497831eaa395dd6567da9e80acb.zip
fix #5782
-rw-r--r--src/gns/gnunet-gns.c2
-rw-r--r--src/gns/nss/nss_gns_query.c46
2 files changed, 6 insertions, 42 deletions
diff --git a/src/gns/gnunet-gns.c b/src/gns/gnunet-gns.c
index eb1d4f23f..5cf496808 100644
--- a/src/gns/gnunet-gns.c
+++ b/src/gns/gnunet-gns.c
@@ -279,7 +279,7 @@ run (void *cls,
279 { 279 {
280 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 280 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
281 _ ("Cannot resolve using GNS: GNUnet peer not running\n")); 281 _ ("Cannot resolve using GNS: GNUnet peer not running\n"));
282 global_ret = 2; 282 global_ret = 5;
283 return; 283 return;
284 } 284 }
285 to_task = GNUNET_SCHEDULER_add_delayed (timeout, 285 to_task = GNUNET_SCHEDULER_add_delayed (timeout,
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 155restart_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