2
0
mirror of https://github.com/sudo-project/sudo.git synced 2025-08-28 12:57:50 +00:00

On error, remove the connection with an error without freeing the closure.

Fixes the final message at the end when there is a network error.
This commit is contained in:
Todd C. Miller 2020-04-30 15:54:35 -06:00
parent 2b1e986572
commit aba4915b83
2 changed files with 24 additions and 23 deletions

View File

@ -1239,8 +1239,7 @@ server_msg_cb(int fd, int what, void *v)
} }
if (what == SUDO_EV_TIMEOUT) { if (what == SUDO_EV_TIMEOUT) {
sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, sudo_warnx(U_("timeout reading from server"));
"Reading from server timed out");
goto bad; goto bad;
} }
@ -1330,8 +1329,7 @@ server_msg_cb(int fd, int what, void *v)
buf->off = 0; buf->off = 0;
debug_return; debug_return;
bad: bad:
close(fd); sudo_ev_del(closure->evbase, closure->read_ev);
client_closure_free(closure);
debug_return; debug_return;
} }
@ -1359,8 +1357,7 @@ client_msg_cb(int fd, int what, void *v)
} }
if (what == SUDO_EV_TIMEOUT) { if (what == SUDO_EV_TIMEOUT) {
sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, sudo_warnx(U_("timeout writing to server"));
"Writing to server timed out");
goto bad; goto bad;
} }
@ -1413,8 +1410,7 @@ client_msg_cb(int fd, int what, void *v)
debug_return; debug_return;
bad: bad:
close(fd); sudo_ev_del(closure->evbase, closure->read_ev);
client_closure_free(closure);
debug_return; debug_return;
} }
@ -1488,7 +1484,7 @@ main(int argc, char *argv[])
const char *iolog_id = NULL; const char *iolog_id = NULL;
const char *open_mode = "r"; const char *open_mode = "r";
const char *errstr; const char *errstr;
int ch, sock, iolog_dir_fd; int ch, sock, iolog_dir_fd, finished;
debug_decl_vars(main, SUDO_DEBUG_MAIN); debug_decl_vars(main, SUDO_DEBUG_MAIN);
#if defined(SUDO_DEVEL) && defined(__OpenBSD__) #if defined(SUDO_DEVEL) && defined(__OpenBSD__)
@ -1631,22 +1627,27 @@ main(int argc, char *argv[])
sudo_gettime_real(&t_end); sudo_gettime_real(&t_end);
sudo_timespecsub(&t_end, &t_start, &t_result); sudo_timespecsub(&t_end, &t_start, &t_result);
TAILQ_FOREACH(closure, &connections, entries) { finished = 0;
if (closure->state != FINISHED) { while ((closure = TAILQ_FIRST(&connections)) != NULL) {
sudo_warnx(U_("exited prematurely with state %d"), closure->state); if (closure->state == FINISHED) {
sudo_warnx(U_("elapsed time sent to server [%lld, %ld]"), finished++;
(long long)closure->elapsed.tv_sec, closure->elapsed.tv_nsec); } else {
sudo_warnx(U_("commit point received from server [%lld, %ld]"), sudo_warnx(U_("exited prematurely with state %d"), closure->state);
(long long)closure->committed.tv_sec, closure->committed.tv_nsec); sudo_warnx(U_("elapsed time sent to server [%lld, %ld]"),
goto bad; (long long)closure->elapsed.tv_sec, closure->elapsed.tv_nsec);
sudo_warnx(U_("commit point received from server [%lld, %ld]"),
(long long)closure->committed.tv_sec, closure->committed.tv_nsec);
} }
client_closure_free(closure);
}
if (finished != 0) {
printf("%d I/O log%s transmitted successfully in %lld.%.9ld seconds\n",
finished, nr_of_conns > 1 ? "s" : "",
(long long)t_result.tv_sec, t_result.tv_nsec);
debug_return_int(EXIT_SUCCESS);
} }
printf("I/O log%s transmitted successfully in %lld.%.9ld seconds\n",
nr_of_conns > 1 ? "s":"",
(long long)t_result.tv_sec, t_result.tv_nsec);
debug_return_int(EXIT_SUCCESS);
bad: bad:
debug_return_int(EXIT_FAILURE); debug_return_int(EXIT_FAILURE);
} }

View File

@ -1475,7 +1475,7 @@ client_msg_cb(int fd, int what, void *v)
} }
if (what == SUDO_PLUGIN_EV_TIMEOUT) { if (what == SUDO_PLUGIN_EV_TIMEOUT) {
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: timed out writiing to server", sudo_debug_printf(SUDO_DEBUG_INFO, "%s: timed out writing to server",
__func__); __func__);
goto bad; goto bad;
} }