mirror of
https://github.com/sudo-project/sudo.git
synced 2025-08-22 18:08:23 +00:00
Split iolog_util.c into iolog_loginfo.c and iolog_timing.c.
Also rename check_iolog_util -> check_iolog_timing.
This commit is contained in:
parent
2a657e2a12
commit
a56f7daeea
5
MANIFEST
5
MANIFEST
@ -119,8 +119,9 @@ lib/iolog/iolog_fileio.c
|
||||
lib/iolog/iolog_json.c
|
||||
lib/iolog/iolog_json.h
|
||||
lib/iolog/iolog_legacy.c
|
||||
lib/iolog/iolog_loginfo.c
|
||||
lib/iolog/iolog_path.c
|
||||
lib/iolog/iolog_util.c
|
||||
lib/iolog/iolog_timing.c
|
||||
lib/iolog/regress/corpus/log_json/id.json
|
||||
lib/iolog/regress/corpus/log_json/ls.json
|
||||
lib/iolog/regress/corpus/log_json/mailq.json
|
||||
@ -152,7 +153,7 @@ lib/iolog/regress/iolog_json/test3.in
|
||||
lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c
|
||||
lib/iolog/regress/iolog_path/check_iolog_path.c
|
||||
lib/iolog/regress/iolog_path/data
|
||||
lib/iolog/regress/iolog_util/check_iolog_util.c
|
||||
lib/iolog/regress/iolog_timing/check_iolog_timing.c
|
||||
lib/logsrv/Makefile.in
|
||||
lib/logsrv/log_server.pb-c.c
|
||||
lib/logsrv/log_server.proto
|
||||
|
@ -76,7 +76,7 @@ PVS_IGNORE = 'V707,V011,V002,V536'
|
||||
PVS_LOG_OPTS = -a 'GA:1,2' -e -t errorfile -d $(PVS_IGNORE)
|
||||
|
||||
# Regression tests
|
||||
TEST_PROGS = check_iolog_json check_iolog_mkpath check_iolog_path check_iolog_util host_port_test
|
||||
TEST_PROGS = check_iolog_json check_iolog_mkpath check_iolog_path check_iolog_timing host_port_test
|
||||
TEST_LIBS = @LIBS@
|
||||
TEST_LDFLAGS = @LDFLAGS@
|
||||
|
||||
@ -95,8 +95,8 @@ DEVEL = @DEVEL@
|
||||
|
||||
SHELL = @SHELL@
|
||||
|
||||
LIBIOLOG_OBJS = iolog_fileio.lo iolog_json.lo iolog_legacy.lo iolog_path.lo \
|
||||
iolog_util.lo host_port.lo hostcheck.lo
|
||||
LIBIOLOG_OBJS = iolog_fileio.lo iolog_json.lo iolog_legacy.lo iolog_loginfo.lo \
|
||||
iolog_path.lo iolog_timing.lo host_port.lo hostcheck.lo
|
||||
|
||||
IOBJS = $(LIBIOLOG_OBJS:.lo=.i)
|
||||
|
||||
@ -106,7 +106,7 @@ CHECK_IOLOG_MKPATH_OBJS = check_iolog_mkpath.lo iolog_fileio.lo
|
||||
|
||||
CHECK_IOLOG_PATH_OBJS = check_iolog_path.lo iolog_path.lo
|
||||
|
||||
CHECK_IOLOG_UTIL_OBJS = check_iolog_util.lo iolog_json.lo iolog_util.lo
|
||||
CHECK_IOLOG_TIMING_OBJS = check_iolog_timing.lo iolog_json.lo iolog_timing.lo
|
||||
|
||||
CHECK_IOLOG_JSON_OBJS = check_iolog_json.lo iolog_json.lo
|
||||
|
||||
@ -159,8 +159,8 @@ check_iolog_path: $(CHECK_IOLOG_PATH_OBJS) libsudo_iolog.la
|
||||
check_iolog_mkpath: $(CHECK_IOLOG_MKPATH_OBJS) libsudo_iolog.la
|
||||
$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_IOLOG_MKPATH_OBJS) libsudo_iolog.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS)
|
||||
|
||||
check_iolog_util: $(CHECK_IOLOG_UTIL_OBJS) libsudo_iolog.la
|
||||
$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_IOLOG_UTIL_OBJS) libsudo_iolog.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS)
|
||||
check_iolog_timing: $(CHECK_IOLOG_TIMING_OBJS) libsudo_iolog.la
|
||||
$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_IOLOG_TIMING_OBJS) libsudo_iolog.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS)
|
||||
|
||||
check_iolog_json: $(CHECK_IOLOG_JSON_OBJS) libsudo_iolog.la
|
||||
$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_IOLOG_JSON_OBJS) libsudo_iolog.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS)
|
||||
@ -256,7 +256,7 @@ check: $(TEST_PROGS) fuzz
|
||||
./check_iolog_json $(srcdir)/regress/iolog_json/*.in || rval=`expr $$rval + $$?`; \
|
||||
./check_iolog_path $(srcdir)/regress/iolog_path/data || rval=`expr $$rval + $$?`; \
|
||||
./check_iolog_mkpath || rval=`expr $$rval + $$?`; \
|
||||
./check_iolog_util || rval=`expr $$rval + $$?`; \
|
||||
./check_iolog_timing || rval=`expr $$rval + $$?`; \
|
||||
./host_port_test || rval=`expr $$rval + $$?`; \
|
||||
exit $$rval; \
|
||||
fi
|
||||
@ -325,20 +325,20 @@ check_iolog_path.i: $(srcdir)/regress/iolog_path/check_iolog_path.c \
|
||||
$(CC) -E -o $@ $(CPPFLAGS) $<
|
||||
check_iolog_path.plog: check_iolog_path.i
|
||||
rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/iolog_path/check_iolog_path.c --i-file $< --output-file $@
|
||||
check_iolog_util.lo: $(srcdir)/regress/iolog_util/check_iolog_util.c \
|
||||
check_iolog_timing.lo: $(srcdir)/regress/iolog_timing/check_iolog_timing.c \
|
||||
$(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \
|
||||
$(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \
|
||||
$(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \
|
||||
$(top_builddir)/config.h
|
||||
$(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/iolog_util/check_iolog_util.c
|
||||
check_iolog_util.i: $(srcdir)/regress/iolog_util/check_iolog_util.c \
|
||||
$(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/iolog_timing/check_iolog_timing.c
|
||||
check_iolog_timing.i: $(srcdir)/regress/iolog_timing/check_iolog_timing.c \
|
||||
$(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \
|
||||
$(incdir)/sudo_fatal.h $(incdir)/sudo_iolog.h \
|
||||
$(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \
|
||||
$(top_builddir)/config.h
|
||||
$(CC) -E -o $@ $(CPPFLAGS) $<
|
||||
check_iolog_util.plog: check_iolog_util.i
|
||||
rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/iolog_util/check_iolog_util.c --i-file $< --output-file $@
|
||||
check_iolog_timing.plog: check_iolog_timing.i
|
||||
rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/iolog_timing/check_iolog_timing.c --i-file $< --output-file $@
|
||||
fuzz_iolog_json.lo: $(srcdir)/regress/fuzz/fuzz_iolog_json.c \
|
||||
$(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \
|
||||
$(incdir)/sudo_debug.h $(incdir)/sudo_eventlog.h \
|
||||
@ -477,6 +477,22 @@ iolog_legacy.i: $(srcdir)/iolog_legacy.c $(incdir)/compat/stdbool.h \
|
||||
$(CC) -E -o $@ $(CPPFLAGS) $<
|
||||
iolog_legacy.plog: iolog_legacy.i
|
||||
rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_legacy.c --i-file $< --output-file $@
|
||||
iolog_loginfo.lo: $(srcdir)/iolog_loginfo.c $(incdir)/compat/stdbool.h \
|
||||
$(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \
|
||||
$(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \
|
||||
$(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \
|
||||
$(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \
|
||||
$(incdir)/sudo_util.h $(top_builddir)/config.h
|
||||
$(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/iolog_loginfo.c
|
||||
iolog_loginfo.i: $(srcdir)/iolog_loginfo.c $(incdir)/compat/stdbool.h \
|
||||
$(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \
|
||||
$(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \
|
||||
$(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \
|
||||
$(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \
|
||||
$(incdir)/sudo_util.h $(top_builddir)/config.h
|
||||
$(CC) -E -o $@ $(CPPFLAGS) $<
|
||||
iolog_loginfo.plog: iolog_loginfo.i
|
||||
rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_loginfo.c --i-file $< --output-file $@
|
||||
iolog_path.lo: $(srcdir)/iolog_path.c $(incdir)/compat/stdbool.h \
|
||||
$(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \
|
||||
$(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \
|
||||
@ -493,19 +509,19 @@ iolog_path.i: $(srcdir)/iolog_path.c $(incdir)/compat/stdbool.h \
|
||||
$(CC) -E -o $@ $(CPPFLAGS) $<
|
||||
iolog_path.plog: iolog_path.i
|
||||
rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_path.c --i-file $< --output-file $@
|
||||
iolog_util.lo: $(srcdir)/iolog_util.c $(incdir)/compat/stdbool.h \
|
||||
iolog_timing.lo: $(srcdir)/iolog_timing.c $(incdir)/compat/stdbool.h \
|
||||
$(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \
|
||||
$(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \
|
||||
$(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \
|
||||
$(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \
|
||||
$(incdir)/sudo_util.h $(top_builddir)/config.h
|
||||
$(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/iolog_util.c
|
||||
iolog_util.i: $(srcdir)/iolog_util.c $(incdir)/compat/stdbool.h \
|
||||
$(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/iolog_timing.c
|
||||
iolog_timing.i: $(srcdir)/iolog_timing.c $(incdir)/compat/stdbool.h \
|
||||
$(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \
|
||||
$(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \
|
||||
$(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \
|
||||
$(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \
|
||||
$(incdir)/sudo_util.h $(top_builddir)/config.h
|
||||
$(CC) -E -o $@ $(CPPFLAGS) $<
|
||||
iolog_util.plog: iolog_util.i
|
||||
rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_util.c --i-file $< --output-file $@
|
||||
iolog_timing.plog: iolog_timing.i
|
||||
rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_timing.c --i-file $< --output-file $@
|
||||
|
95
lib/iolog/iolog_loginfo.c
Normal file
95
lib/iolog/iolog_loginfo.c
Normal file
@ -0,0 +1,95 @@
|
||||
/*
|
||||
* SPDX-License-Identifier: ISC
|
||||
*
|
||||
* Copyright (c) 2009-2020 Todd C. Miller <Todd.Miller@sudo.ws>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is an open source non-commercial project. Dear PVS-Studio, please check it.
|
||||
* PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#ifdef HAVE_STDBOOL_H
|
||||
# include <stdbool.h>
|
||||
#else
|
||||
# include "compat/stdbool.h"
|
||||
#endif /* HAVE_STDBOOL_H */
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "sudo_compat.h"
|
||||
#include "sudo_debug.h"
|
||||
#include "sudo_eventlog.h"
|
||||
#include "sudo_fatal.h"
|
||||
#include "sudo_gettext.h"
|
||||
#include "sudo_iolog.h"
|
||||
#include "sudo_util.h"
|
||||
|
||||
struct eventlog *
|
||||
iolog_parse_loginfo(int dfd, const char *iolog_dir)
|
||||
{
|
||||
struct eventlog *evlog = NULL;
|
||||
FILE *fp = NULL;
|
||||
int fd = -1;
|
||||
int tmpfd = -1;
|
||||
bool ok, legacy = false;
|
||||
debug_decl(iolog_parse_loginfo, SUDO_DEBUG_UTIL);
|
||||
|
||||
if (dfd == -1) {
|
||||
if ((tmpfd = open(iolog_dir, O_RDONLY)) == -1) {
|
||||
sudo_warn("%s", iolog_dir);
|
||||
goto bad;
|
||||
}
|
||||
dfd = tmpfd;
|
||||
}
|
||||
if ((fd = openat(dfd, "log.json", O_RDONLY, 0)) == -1) {
|
||||
fd = openat(dfd, "log", O_RDONLY, 0);
|
||||
legacy = true;
|
||||
}
|
||||
if (tmpfd != -1)
|
||||
close(tmpfd);
|
||||
if (fd == -1 || (fp = fdopen(fd, "r")) == NULL) {
|
||||
sudo_warn("%s/log", iolog_dir);
|
||||
goto bad;
|
||||
}
|
||||
fd = -1;
|
||||
|
||||
if ((evlog = calloc(1, sizeof(*evlog))) == NULL) {
|
||||
sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory"));
|
||||
goto bad;
|
||||
}
|
||||
evlog->runuid = (uid_t)-1;
|
||||
evlog->rungid = (gid_t)-1;
|
||||
|
||||
ok = legacy ? iolog_parse_loginfo_legacy(fp, iolog_dir, evlog) :
|
||||
iolog_parse_loginfo_json(fp, iolog_dir, evlog);
|
||||
if (ok) {
|
||||
fclose(fp);
|
||||
debug_return_ptr(evlog);
|
||||
}
|
||||
|
||||
bad:
|
||||
if (fd != -1)
|
||||
close(fd);
|
||||
if (fp != NULL)
|
||||
fclose(fp);
|
||||
eventlog_free(evlog);
|
||||
debug_return_ptr(NULL);
|
||||
}
|
@ -49,58 +49,6 @@
|
||||
|
||||
static int timing_event_adj;
|
||||
|
||||
struct eventlog *
|
||||
iolog_parse_loginfo(int dfd, const char *iolog_dir)
|
||||
{
|
||||
struct eventlog *evlog = NULL;
|
||||
FILE *fp = NULL;
|
||||
int fd = -1;
|
||||
int tmpfd = -1;
|
||||
bool ok, legacy = false;
|
||||
debug_decl(iolog_parse_loginfo, SUDO_DEBUG_UTIL);
|
||||
|
||||
if (dfd == -1) {
|
||||
if ((tmpfd = open(iolog_dir, O_RDONLY)) == -1) {
|
||||
sudo_warn("%s", iolog_dir);
|
||||
goto bad;
|
||||
}
|
||||
dfd = tmpfd;
|
||||
}
|
||||
if ((fd = openat(dfd, "log.json", O_RDONLY, 0)) == -1) {
|
||||
fd = openat(dfd, "log", O_RDONLY, 0);
|
||||
legacy = true;
|
||||
}
|
||||
if (tmpfd != -1)
|
||||
close(tmpfd);
|
||||
if (fd == -1 || (fp = fdopen(fd, "r")) == NULL) {
|
||||
sudo_warn("%s/log", iolog_dir);
|
||||
goto bad;
|
||||
}
|
||||
fd = -1;
|
||||
|
||||
if ((evlog = calloc(1, sizeof(*evlog))) == NULL) {
|
||||
sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory"));
|
||||
goto bad;
|
||||
}
|
||||
evlog->runuid = (uid_t)-1;
|
||||
evlog->rungid = (gid_t)-1;
|
||||
|
||||
ok = legacy ? iolog_parse_loginfo_legacy(fp, iolog_dir, evlog) :
|
||||
iolog_parse_loginfo_json(fp, iolog_dir, evlog);
|
||||
if (ok) {
|
||||
fclose(fp);
|
||||
debug_return_ptr(evlog);
|
||||
}
|
||||
|
||||
bad:
|
||||
if (fd != -1)
|
||||
close(fd);
|
||||
if (fp != NULL)
|
||||
fclose(fp);
|
||||
eventlog_free(evlog);
|
||||
debug_return_ptr(NULL);
|
||||
}
|
||||
|
||||
void
|
||||
iolog_adjust_delay(struct timespec *delay, struct timespec *max_delay,
|
||||
double scale_factor)
|
@ -132,14 +132,14 @@ main(int argc, char *argv[])
|
||||
{
|
||||
int tests = 0, errors = 0;
|
||||
|
||||
initprogname(argc > 0 ? argv[0] : "check_iolog_util");
|
||||
initprogname(argc > 0 ? argv[0] : "check_iolog_timing");
|
||||
|
||||
test_parse_delay(&tests, &errors);
|
||||
|
||||
test_adjust_delay(&tests, &errors);
|
||||
|
||||
if (tests != 0) {
|
||||
printf("iolog_util: %d test%s run, %d errors, %d%% success rate\n",
|
||||
printf("iolog_timing: %d test%s run, %d errors, %d%% success rate\n",
|
||||
tests, tests == 1 ? "" : "s", errors,
|
||||
(tests - errors) * 100 / tests);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user