Skip to content

Commit f260a27

Browse files
committed
Remove client_closure.disabled and set state to ERROR instead.
We now check the state variable in the various fmt_* functions as needed.
1 parent 908c55d commit f260a27

5 files changed

Lines changed: 41 additions & 33 deletions

File tree

plugins/sudoers/audit.c

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* SPDX-License-Identifier: ISC
33
*
4-
* Copyright (c) 2009-2015, 2019-2023 Todd C. Miller <[email protected]>
4+
* Copyright (c) 2009-2015, 2019-2025 Todd C. Miller <[email protected]>
55
*
66
* Permission to use, copy, modify, and distribute this software for any
77
* purpose with or without fee is hereby granted, provided that the above
@@ -248,9 +248,6 @@ log_server_accept(const struct sudoers_context *ctx, struct eventlog *evlog)
248248
bool ret = false;
249249
debug_decl(log_server_accept, SUDOERS_DEBUG_PLUGIN);
250250

251-
if (client_closure->disabled)
252-
debug_return_bool(false);
253-
254251
if (SLIST_EMPTY(&def_log_servers))
255252
debug_return_bool(true);
256253

@@ -264,11 +261,6 @@ log_server_accept(const struct sudoers_context *ctx, struct eventlog *evlog)
264261
debug_return_bool(true);
265262
}
266263

267-
if (sudo_gettime_awake(&start_time) == -1) {
268-
sudo_warn("%s", U_("unable to get time of day"));
269-
goto done;
270-
}
271-
272264
if (client_closure != NULL) {
273265
/* Use existing client closure. */
274266
if (fmt_accept_message(client_closure, evlog)) {
@@ -282,6 +274,11 @@ log_server_accept(const struct sudoers_context *ctx, struct eventlog *evlog)
282274
} else {
283275
struct log_details audit_details;
284276

277+
if (sudo_gettime_awake(&start_time) == -1) {
278+
sudo_warn("%s", U_("unable to get time of day"));
279+
goto done;
280+
}
281+
285282
if (!init_log_details(&audit_details, evlog))
286283
goto done;
287284

@@ -308,7 +305,7 @@ log_server_exit(int status_type, int status)
308305
* I/O log plugin clears client_closure on close so we don't log
309306
* the exit status twice.
310307
*/
311-
if (client_closure != NULL && !client_closure->disabled) {
308+
if (client_closure != NULL) {
312309
int exit_status = 0, error = 0;
313310

314311
if (status_type == SUDO_PLUGIN_WAIT_STATUS) {

plugins/sudoers/iolog.c

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* SPDX-License-Identifier: ISC
33
*
4-
* Copyright (c) 2009-2022 Todd C. Miller <[email protected]>
4+
* Copyright (c) 2009-2023, 2025 Todd C. Miller <[email protected]>
55
*
66
* Permission to use, copy, modify, and distribute this software for any
77
* purpose with or without fee is hereby granted, provided that the above
@@ -1012,9 +1012,6 @@ sudoers_io_log_remote(int event, const char *buf, unsigned int len,
10121012
int type, ret = -1;
10131013
debug_decl(sudoers_io_log_remote, SUDOERS_DEBUG_PLUGIN);
10141014

1015-
if (client_closure->disabled)
1016-
debug_return_int(1);
1017-
10181015
/* Track elapsed time for comparison with commit points. */
10191016
sudo_timespecadd(delay, &client_closure->elapsed, &client_closure->elapsed);
10201017

@@ -1166,9 +1163,6 @@ sudoers_io_change_winsize_remote(unsigned int lines, unsigned int cols,
11661163
int ret = -1;
11671164
debug_decl(sudoers_io_change_winsize_remote, SUDOERS_DEBUG_PLUGIN);
11681165

1169-
if (client_closure->disabled)
1170-
debug_return_int(1);
1171-
11721166
/* Track elapsed time for comparison with commit points. */
11731167
sudo_timespecadd(delay, &client_closure->elapsed, &client_closure->elapsed);
11741168

@@ -1265,9 +1259,6 @@ sudoers_io_suspend_remote(const char *signame, struct timespec *delay,
12651259
int ret = -1;
12661260
debug_decl(sudoers_io_suspend_remote, SUDOERS_DEBUG_PLUGIN);
12671261

1268-
if (client_closure->disabled)
1269-
debug_return_int(1);
1270-
12711262
/* Track elapsed time for comparison with commit points. */
12721263
sudo_timespecadd(delay, &client_closure->elapsed, &client_closure->elapsed);
12731264

plugins/sudoers/log_client.c

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -808,6 +808,9 @@ fmt_client_hello(struct client_closure *closure)
808808
bool ret = false;
809809
debug_decl(fmt_client_hello, SUDOERS_DEBUG_UTIL);
810810

811+
if (closure->state != RECV_HELLO)
812+
goto done;
813+
811814
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: sending ClientHello", __func__);
812815

813816
/* Client name + version */
@@ -818,6 +821,7 @@ fmt_client_hello(struct client_closure *closure)
818821
client_msg.type_case = CLIENT_MESSAGE__TYPE_HELLO_MSG;
819822
ret = fmt_client_message(closure, &client_msg);
820823

824+
done:
821825
debug_return_bool(ret);
822826
}
823827

@@ -1001,6 +1005,9 @@ fmt_accept_message(struct client_closure *closure, const struct eventlog *evlog)
10011005
bool ret = false;
10021006
debug_decl(fmt_accept_message, SUDOERS_DEBUG_UTIL);
10031007

1008+
if (closure->state != SEND_ACCEPT && closure->state != SEND_IO)
1009+
goto done;
1010+
10041011
/*
10051012
* Fill in AcceptMessage and add it to ClientMessage.
10061013
*/
@@ -1050,6 +1057,9 @@ fmt_reject_message(struct client_closure *closure, const struct eventlog *evlog)
10501057
bool ret = false;
10511058
debug_decl(fmt_reject_message, SUDOERS_DEBUG_UTIL);
10521059

1060+
if (closure->state != SEND_REJECT && closure->state != SEND_IO)
1061+
goto done;
1062+
10531063
/*
10541064
* Fill in RejectMessage and add it to ClientMessage.
10551065
*/
@@ -1099,6 +1109,10 @@ fmt_alert_message(struct client_closure *closure, const struct eventlog *evlog)
10991109
bool ret = false;
11001110
debug_decl(fmt_alert_message, SUDOERS_DEBUG_UTIL);
11011111

1112+
/* Alerts can happen at any time. */
1113+
if (closure->state == ERROR)
1114+
goto done;
1115+
11021116
/*
11031117
* Fill in AlertMessage and add it to ClientMessage.
11041118
*/
@@ -1193,6 +1207,9 @@ fmt_restart_message(struct client_closure *closure)
11931207
bool ret = false;
11941208
debug_decl(fmt_restart_message, SUDOERS_DEBUG_UTIL);
11951209

1210+
if (closure->state != SEND_RESTART)
1211+
goto done;
1212+
11961213
sudo_debug_printf(SUDO_DEBUG_INFO,
11971214
"%s: sending RestartMessage, [%lld, %ld]", __func__,
11981215
(long long)closure->restart->tv_sec, closure->restart->tv_nsec);
@@ -1227,6 +1244,9 @@ fmt_exit_message(struct client_closure *closure, int exit_status, int error)
12271244
struct timespec run_time;
12281245
debug_decl(fmt_exit_message, SUDOERS_DEBUG_UTIL);
12291246

1247+
if (closure->state != SEND_IO)
1248+
goto done;
1249+
12301250
if (sudo_gettime_awake(&run_time) == -1) {
12311251
sudo_warn("%s", U_("unable to get time of day"));
12321252
goto done;
@@ -1304,6 +1324,9 @@ fmt_io_buf(struct client_closure *closure, int type, const char *buf,
13041324
bool ret = false;
13051325
debug_decl(fmt_io_buf, SUDOERS_DEBUG_UTIL);
13061326

1327+
if (closure->state != SEND_IO)
1328+
goto done;
1329+
13071330
/* Fill in IoBuffer. */
13081331
ts.tv_sec = (int64_t)delay->tv_sec;
13091332
ts.tv_nsec = (int32_t)delay->tv_nsec;
@@ -1342,6 +1365,10 @@ fmt_winsize(struct client_closure *closure, unsigned int lines,
13421365
bool ret = false;
13431366
debug_decl(fmt_winsize, SUDOERS_DEBUG_UTIL);
13441367

1368+
if (closure->state != SEND_IO)
1369+
goto done;
1370+
1371+
13451372
/* Fill in ChangeWindowSize message. */
13461373
ts.tv_sec = (int64_t)delay->tv_sec;
13471374
ts.tv_nsec = (int32_t)delay->tv_nsec;
@@ -1379,6 +1406,9 @@ fmt_suspend(struct client_closure *closure, const char *signame,
13791406
bool ret = false;
13801407
debug_decl(fmt_suspend, SUDOERS_DEBUG_UTIL);
13811408

1409+
if (closure->state != SEND_IO)
1410+
goto done;
1411+
13821412
/* Fill in CommandSuspend message. */
13831413
ts.tv_sec = (int64_t)delay->tv_sec;
13841414
ts.tv_nsec = (int32_t)delay->tv_nsec;
@@ -1889,7 +1919,7 @@ server_msg_cb(int fd, int what, void *v)
18891919
}
18901920
/* Disable further log server operations. */
18911921
client_closure_free_contents(closure);
1892-
closure->disabled = true;
1922+
closure->state = ERROR;
18931923
debug_return;
18941924
}
18951925

@@ -2009,7 +2039,7 @@ client_msg_cb(int fd, int what, void *v)
20092039
}
20102040
/* Disable further log server operations. */
20112041
client_closure_free_contents(closure);
2012-
closure->disabled = true;
2042+
closure->state = ERROR;
20132043
debug_return;
20142044
}
20152045

@@ -2108,9 +2138,6 @@ log_server_close(struct client_closure *closure, int exit_status, int error)
21082138
bool ret = false;
21092139
debug_decl(log_server_close, SUDOERS_DEBUG_UTIL);
21102140

2111-
if (closure->disabled)
2112-
goto done;
2113-
21142141
/* Format and append an ExitMessage to the write queue. */
21152142
if (!fmt_exit_message(closure, exit_status, error))
21162143
goto done;

plugins/sudoers/log_client.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* SPDX-License-Identifier: ISC
33
*
4-
* Copyright (c) 2019-2020 Todd C. Miller <[email protected]>
4+
* Copyright (c) 2019-2023, 2025 Todd C. Miller <[email protected]>
55
*
66
* Permission to use, copy, modify, and distribute this software for any
77
* purpose with or without fee is hereby granted, provided that the above
@@ -77,7 +77,6 @@ struct client_closure {
7777
bool read_instead_of_write;
7878
bool write_instead_of_read;
7979
bool temporary_write_event;
80-
bool disabled;
8180
bool log_io;
8281
char *server_name;
8382
#if defined(HAVE_STRUCT_IN6_ADDR)

plugins/sudoers/logging.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,6 @@ log_server_reject(const struct sudoers_context *ctx, struct eventlog *evlog,
128128
bool ret = false;
129129
debug_decl(log_server_reject, SUDOERS_DEBUG_LOGGING);
130130

131-
if (client_closure->disabled)
132-
debug_return_bool(false);
133-
134131
if (SLIST_EMPTY(&def_log_servers))
135132
debug_return_bool(true);
136133

@@ -180,9 +177,6 @@ log_server_alert(const struct sudoers_context *ctx, struct eventlog *evlog,
180177
bool ret = false;
181178
debug_decl(log_server_alert, SUDOERS_DEBUG_LOGGING);
182179

183-
if (client_closure->disabled)
184-
debug_return_bool(false);
185-
186180
if (SLIST_EMPTY(&def_log_servers))
187181
debug_return_bool(true);
188182

0 commit comments

Comments
 (0)