Skip to content

Commit 186f945

Browse files
committed
Replace '/' with '_' in paths using the user, group, host or command.
This is consistent with how the sudoers I/O logging module works. Also make %{command} expand to the command's basename to match the sudo I/O logging module. Found by the ZeroPath AI Security Engineer <https://zeropath.com>
1 parent 4967899 commit 186f945

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

logsrvd/iolog_writer.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ fill_user(char * restrict str, size_t strsize, void * restrict v)
486486
sudo_warnx(U_("%s: %s is not set"), __func__, "submituser");
487487
debug_return_size_t(strsize);
488488
}
489-
debug_return_size_t(strlcpy(str, evlog->submituser, strsize));
489+
debug_return_size_t(strlcpy_no_slash(str, evlog->submituser, strsize));
490490
}
491491

492492
static size_t
@@ -500,7 +500,7 @@ fill_group(char * restrict str, size_t strsize, void * restrict v)
500500
sudo_warnx(U_("%s: %s is not set"), __func__, "submitgroup");
501501
debug_return_size_t(strsize);
502502
}
503-
debug_return_size_t(strlcpy(str, evlog->submitgroup, strsize));
503+
debug_return_size_t(strlcpy_no_slash(str, evlog->submitgroup, strsize));
504504
}
505505

506506
static size_t
@@ -514,7 +514,7 @@ fill_runas_user(char * restrict str, size_t strsize, void * restrict v)
514514
sudo_warnx(U_("%s: %s is not set"), __func__, "runuser");
515515
debug_return_size_t(strsize);
516516
}
517-
debug_return_size_t(strlcpy(str, evlog->runuser, strsize));
517+
debug_return_size_t(strlcpy_no_slash(str, evlog->runuser, strsize));
518518
}
519519

520520
static size_t
@@ -529,7 +529,7 @@ fill_runas_group(char * restrict str, size_t strsize, void * restrict v)
529529
sudo_warnx(U_("%s: %s is not set"), __func__, "rungroup");
530530
debug_return_size_t(strsize);
531531
}
532-
debug_return_size_t(strlcpy(str, evlog->rungroup, strsize));
532+
debug_return_size_t(strlcpy_no_slash(str, evlog->rungroup, strsize));
533533
}
534534

535535
static size_t
@@ -543,21 +543,23 @@ fill_hostname(char * restrict str, size_t strsize, void * restrict v)
543543
sudo_warnx(U_("%s: %s is not set"), __func__, "submithost");
544544
debug_return_size_t(strsize);
545545
}
546-
debug_return_size_t(strlcpy(str, evlog->submithost, strsize));
546+
debug_return_size_t(strlcpy_no_slash(str, evlog->submithost, strsize));
547547
}
548548

549549
static size_t
550550
fill_command(char * restrict str, size_t strsize, void * restrict v)
551551
{
552552
struct iolog_path_closure *closure = v;
553553
const struct eventlog *evlog = closure->evlog;
554+
const char *cmnd_base;
554555
debug_decl(fill_command, SUDO_DEBUG_UTIL);
555556

556557
if (evlog->command == NULL) {
557558
sudo_warnx(U_("%s: %s is not set"), __func__, "command");
558559
debug_return_size_t(strsize);
559560
}
560-
debug_return_size_t(strlcpy(str, evlog->command, strsize));
561+
cmnd_base = sudo_basename(evlog->command);
562+
debug_return_size_t(strlcpy_no_slash(str, cmnd_base, strsize));
561563
}
562564

563565
/* Note: "seq" must be first in the list. */

0 commit comments

Comments
 (0)