Don't overwrite closure->evlog for sub-commands.
This commit is contained in:
@@ -139,44 +139,57 @@ bool
|
|||||||
store_accept_local(AcceptMessage *msg, uint8_t *buf, size_t len,
|
store_accept_local(AcceptMessage *msg, uint8_t *buf, size_t len,
|
||||||
struct connection_closure *closure)
|
struct connection_closure *closure)
|
||||||
{
|
{
|
||||||
char *log_id = NULL;
|
|
||||||
struct logsrvd_info_closure info = { msg->info_msgs, msg->n_info_msgs };
|
struct logsrvd_info_closure info = { msg->info_msgs, msg->n_info_msgs };
|
||||||
|
struct eventlog *evlog = NULL;
|
||||||
|
char *log_id = NULL;
|
||||||
|
bool ret = false;
|
||||||
debug_decl(store_accept_local, SUDO_DEBUG_UTIL);
|
debug_decl(store_accept_local, SUDO_DEBUG_UTIL);
|
||||||
|
|
||||||
/* Store sudo-style event and I/O logs. */
|
/* Store sudo-style event and I/O logs. */
|
||||||
closure->evlog = evlog_new(msg->submit_time, msg->info_msgs,
|
evlog = evlog_new(msg->submit_time, msg->info_msgs, msg->n_info_msgs,
|
||||||
msg->n_info_msgs, closure);
|
closure);
|
||||||
if (closure->evlog == NULL) {
|
if (evlog == NULL) {
|
||||||
closure->errstr = _("error parsing AcceptMessage");
|
closure->errstr = _("error parsing AcceptMessage");
|
||||||
debug_return_bool(false);
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Additional setup for the initial command in the session. */
|
||||||
|
if (closure->evlog == NULL) {
|
||||||
|
closure->evlog = evlog;
|
||||||
|
|
||||||
/* Create I/O log info file and parent directories. */
|
/* Create I/O log info file and parent directories. */
|
||||||
if (msg->expect_iobufs) {
|
if (msg->expect_iobufs) {
|
||||||
if (!iolog_init(msg, closure)) {
|
if (!iolog_init(msg, closure)) {
|
||||||
closure->errstr = _("error creating I/O log");
|
closure->errstr = _("error creating I/O log");
|
||||||
debug_return_bool(false);
|
goto done;
|
||||||
}
|
}
|
||||||
closure->log_io = true;
|
closure->log_io = true;
|
||||||
log_id = closure->evlog->iolog_path;
|
log_id = closure->evlog->iolog_path;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!eventlog_accept(closure->evlog, 0, logsrvd_json_log_cb, &info)) {
|
if (!eventlog_accept(evlog, 0, logsrvd_json_log_cb, &info)) {
|
||||||
closure->errstr = _("error logging accept event");
|
closure->errstr = _("error logging accept event");
|
||||||
debug_return_bool(false);
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (log_id != NULL) {
|
if (log_id != NULL) {
|
||||||
/* Send log ID to client for restarting connections. */
|
/* Send log ID to client for restarting connections. */
|
||||||
if (!fmt_log_id_message(log_id, closure))
|
if (!fmt_log_id_message(log_id, closure))
|
||||||
debug_return_bool(false);
|
goto done;
|
||||||
if (sudo_ev_add(closure->evbase, closure->write_ev,
|
if (sudo_ev_add(closure->evbase, closure->write_ev,
|
||||||
logsrvd_conf_server_timeout(), false) == -1) {
|
logsrvd_conf_server_timeout(), false) == -1) {
|
||||||
sudo_warnx("%s", U_("unable to add event to queue"));
|
sudo_warnx("%s", U_("unable to add event to queue"));
|
||||||
debug_return_bool(false);
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = true;
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (closure->evlog != evlog)
|
||||||
|
eventlog_free(evlog);
|
||||||
|
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,22 +201,34 @@ store_reject_local(RejectMessage *msg, uint8_t *buf, size_t len,
|
|||||||
struct connection_closure *closure)
|
struct connection_closure *closure)
|
||||||
{
|
{
|
||||||
struct logsrvd_info_closure info = { msg->info_msgs, msg->n_info_msgs };
|
struct logsrvd_info_closure info = { msg->info_msgs, msg->n_info_msgs };
|
||||||
|
struct eventlog *evlog = NULL;
|
||||||
|
bool ret = false;
|
||||||
debug_decl(store_reject_local, SUDO_DEBUG_UTIL);
|
debug_decl(store_reject_local, SUDO_DEBUG_UTIL);
|
||||||
|
|
||||||
closure->evlog = evlog_new(msg->submit_time, msg->info_msgs,
|
evlog = evlog_new(msg->submit_time, msg->info_msgs, msg->n_info_msgs,
|
||||||
msg->n_info_msgs, closure);
|
closure);
|
||||||
if (closure->evlog == NULL) {
|
if (evlog == NULL) {
|
||||||
closure->errstr = _("error parsing RejectMessage");
|
closure->errstr = _("error parsing RejectMessage");
|
||||||
debug_return_bool(false);
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!eventlog_reject(closure->evlog, 0, msg->reason,
|
if (closure->evlog == NULL) {
|
||||||
logsrvd_json_log_cb, &info)) {
|
/* Initial command in session. */
|
||||||
|
closure->evlog = evlog;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!eventlog_reject(evlog, 0, msg->reason, logsrvd_json_log_cb, &info)) {
|
||||||
closure->errstr = _("error logging reject event");
|
closure->errstr = _("error logging reject event");
|
||||||
debug_return_bool(false);
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_return_bool(true);
|
ret = true;
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (closure->evlog != evlog)
|
||||||
|
eventlog_free(evlog);
|
||||||
|
|
||||||
|
debug_return_bool(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@@ -326,13 +351,13 @@ bool
|
|||||||
store_alert_local(AlertMessage *msg, uint8_t *buf, size_t len,
|
store_alert_local(AlertMessage *msg, uint8_t *buf, size_t len,
|
||||||
struct connection_closure *closure)
|
struct connection_closure *closure)
|
||||||
{
|
{
|
||||||
|
struct eventlog *evlog = NULL;
|
||||||
struct timespec alert_time;
|
struct timespec alert_time;
|
||||||
debug_decl(store_alert_local, SUDO_DEBUG_UTIL);
|
debug_decl(store_alert_local, SUDO_DEBUG_UTIL);
|
||||||
|
|
||||||
if (msg->info_msgs != NULL && msg->n_info_msgs != 0) {
|
if (msg->info_msgs != NULL && msg->n_info_msgs != 0) {
|
||||||
closure->evlog = evlog_new(NULL, msg->info_msgs,
|
evlog = evlog_new(NULL, msg->info_msgs, msg->n_info_msgs, closure);
|
||||||
msg->n_info_msgs, closure);
|
if (evlog == NULL) {
|
||||||
if (closure->evlog == NULL) {
|
|
||||||
closure->errstr = _("error parsing AlertMessage");
|
closure->errstr = _("error parsing AlertMessage");
|
||||||
debug_return_bool(false);
|
debug_return_bool(false);
|
||||||
}
|
}
|
||||||
@@ -340,11 +365,17 @@ store_alert_local(AlertMessage *msg, uint8_t *buf, size_t len,
|
|||||||
|
|
||||||
alert_time.tv_sec = msg->alert_time->tv_sec;
|
alert_time.tv_sec = msg->alert_time->tv_sec;
|
||||||
alert_time.tv_nsec = msg->alert_time->tv_nsec;
|
alert_time.tv_nsec = msg->alert_time->tv_nsec;
|
||||||
if (!eventlog_alert(closure->evlog, 0, &alert_time, msg->reason, NULL)) {
|
if (!eventlog_alert(evlog, 0, &alert_time, msg->reason, NULL)) {
|
||||||
closure->errstr = _("error logging alert event");
|
closure->errstr = _("error logging alert event");
|
||||||
debug_return_bool(false);
|
debug_return_bool(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (closure->evlog == NULL) {
|
||||||
|
closure->evlog = evlog;
|
||||||
|
} else {
|
||||||
|
eventlog_free(evlog);
|
||||||
|
}
|
||||||
|
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user