Stash the value of the store_first config setting in connection_closure.

If the configuration changes it should not affect a connection that
is already in progress.
This commit is contained in:
Todd C. Miller
2021-04-23 16:56:17 -06:00
parent c2d3070fa1
commit 280fabac38
3 changed files with 13 additions and 11 deletions

View File

@@ -342,7 +342,7 @@ handle_accept(AcceptMessage *msg, uint8_t *buf, size_t len,
debug_return_bool(relay_accept(msg, buf, len, closure)); debug_return_bool(relay_accept(msg, buf, len, closure));
} }
if (logsrvd_conf_relay_store_first()) { if (closure->store_first) {
/* Store message in a journal for later relaying. */ /* Store message in a journal for later relaying. */
if (!journal_open(closure)) if (!journal_open(closure))
debug_return_bool(false); debug_return_bool(false);
@@ -425,7 +425,7 @@ handle_reject(RejectMessage *msg, uint8_t *buf, size_t len,
debug_return_bool(relay_reject(msg, buf, len, closure)); debug_return_bool(relay_reject(msg, buf, len, closure));
} }
if (logsrvd_conf_relay_store_first()) { if (closure->store_first) {
/* Store message in a journal for later relaying. */ /* Store message in a journal for later relaying. */
if (!journal_open(closure)) if (!journal_open(closure))
debug_return_bool(false); debug_return_bool(false);
@@ -482,7 +482,7 @@ handle_exit(ExitMessage *msg, uint8_t *buf, size_t len,
"command exited with %d", msg->exit_value); "command exited with %d", msg->exit_value);
} }
if (logsrvd_conf_relay_store_first()) { if (closure->store_first) {
/* Store message in a journal for later relaying. */ /* Store message in a journal for later relaying. */
if (!journal_write(buf, len, closure)) if (!journal_write(buf, len, closure))
debug_return_bool(false); debug_return_bool(false);
@@ -545,7 +545,7 @@ handle_restart(RestartMessage *msg, uint8_t *buf, size_t len,
debug_return_bool(relay_restart(msg, buf, len, closure)); debug_return_bool(relay_restart(msg, buf, len, closure));
} }
if (logsrvd_conf_relay_store_first()) { if (closure->store_first) {
restarted = journal_restart(msg, closure); restarted = journal_restart(msg, closure);
} else { } else {
restarted = iolog_restart(msg, closure); restarted = iolog_restart(msg, closure);
@@ -592,7 +592,7 @@ handle_alert(AlertMessage *msg, uint8_t *buf, size_t len,
debug_return_bool(relay_alert(msg, buf, len, closure)); debug_return_bool(relay_alert(msg, buf, len, closure));
} }
if (logsrvd_conf_relay_store_first()) { if (closure->store_first) {
/* Store message in a journal for later relaying. */ /* Store message in a journal for later relaying. */
if (!journal_write(buf, len, closure)) if (!journal_write(buf, len, closure))
debug_return_bool(false); debug_return_bool(false);
@@ -643,7 +643,7 @@ handle_iobuf(int iofd, IoBuffer *iobuf, uint8_t *buf, size_t len,
debug_return_bool(relay_iobuf(iobuf, buf, len, closure)); debug_return_bool(relay_iobuf(iobuf, buf, len, closure));
} }
if (logsrvd_conf_relay_store_first()) { if (closure->store_first) {
/* Store message in a journal for later relaying. */ /* Store message in a journal for later relaying. */
if (!journal_write(buf, len, closure)) if (!journal_write(buf, len, closure))
debug_return_bool(false); debug_return_bool(false);
@@ -708,7 +708,7 @@ handle_winsize(ChangeWindowSize *msg, uint8_t *buf, size_t len,
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: received ChangeWindowSize", sudo_debug_printf(SUDO_DEBUG_INFO, "%s: received ChangeWindowSize",
__func__); __func__);
if (logsrvd_conf_relay_store_first()) { if (closure->store_first) {
/* Store message in a journal for later relaying. */ /* Store message in a journal for later relaying. */
if (!journal_write(buf, len, closure)) if (!journal_write(buf, len, closure))
debug_return_bool(false); debug_return_bool(false);
@@ -752,7 +752,7 @@ handle_suspend(CommandSuspend *msg, uint8_t *buf, size_t len,
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: received CommandSuspend", sudo_debug_printf(SUDO_DEBUG_INFO, "%s: received CommandSuspend",
__func__); __func__);
if (logsrvd_conf_relay_store_first()) { if (closure->store_first) {
/* Store message in a journal for later relaying. */ /* Store message in a journal for later relaying. */
if (!journal_write(buf, len, closure)) if (!journal_write(buf, len, closure))
debug_return_bool(false); debug_return_bool(false);
@@ -1413,7 +1413,7 @@ tls_handshake_cb(int fd, int what, void *v)
SSL_get_cipher(closure->ssl)); SSL_get_cipher(closure->ssl));
/* Start the actual protocol now that the TLS handshake is complete. */ /* Start the actual protocol now that the TLS handshake is complete. */
if (!TAILQ_EMPTY(logsrvd_conf_relay_address()) && !logsrvd_conf_relay_store_first()) { if (!TAILQ_EMPTY(logsrvd_conf_relay_address()) && !closure->store_first) {
if (!connect_relay(closure)) if (!connect_relay(closure))
goto bad; goto bad;
} else { } else {
@@ -1443,6 +1443,7 @@ connection_closure_alloc(int sock, bool tls, struct sudo_event_base *base)
closure->iolog_dir_fd = -1; closure->iolog_dir_fd = -1;
closure->sock = sock; closure->sock = sock;
closure->evbase = base; closure->evbase = base;
closure->store_first = logsrvd_conf_relay_store_first();
TAILQ_INIT(&closure->write_bufs); TAILQ_INIT(&closure->write_bufs);
TAILQ_INIT(&closure->free_bufs); TAILQ_INIT(&closure->free_bufs);
@@ -1553,7 +1554,7 @@ new_connection(int sock, bool tls, const struct sockaddr *sa,
#endif #endif
/* If no TLS handshake, start the protocol immediately. */ /* If no TLS handshake, start the protocol immediately. */
if (!tls) { if (!tls) {
if (!TAILQ_EMPTY(logsrvd_conf_relay_address()) && !logsrvd_conf_relay_store_first()) { if (!TAILQ_EMPTY(logsrvd_conf_relay_address()) && !closure->store_first) {
if (!connect_relay(closure)) if (!connect_relay(closure))
goto bad; goto bad;
} else { } else {

View File

@@ -104,6 +104,7 @@ struct connection_closure {
enum connection_status state; enum connection_status state;
bool tls; bool tls;
bool log_io; bool log_io;
bool store_first;
bool read_instead_of_write; bool read_instead_of_write;
bool write_instead_of_read; bool write_instead_of_read;
bool temporary_write_event; bool temporary_write_event;

View File

@@ -254,7 +254,7 @@ journal_seek(struct timespec *target, struct connection_closure *closure)
} }
} }
if (timespeccmp(&elapsed_time, target, >=)) { if (sudo_timespeccmp(&elapsed_time, target, >=)) {
if (sudo_timespeccmp(&elapsed_time, target, ==)) { if (sudo_timespeccmp(&elapsed_time, target, ==)) {
ret = true; ret = true;
break; break;