From cc3b4ffb045995e1098f1c0a7e03e8e25d9cc1cb Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 14 Jun 2021 13:11:39 -0600 Subject: [PATCH] Remove vsyslog(3) emulation, it is no longer used. --- MANIFEST | 2 - config.h.in | 3 - configure | 27 ----- configure.ac | 5 - include/sudo_compat.h | 5 - lib/util/Makefile.in | 26 ----- lib/util/regress/vsyslog/vsyslog_test.c | 130 ------------------------ lib/util/vsyslog.c | 79 -------------- scripts/mkdep.pl | 2 +- 9 files changed, 1 insertion(+), 278 deletions(-) delete mode 100644 lib/util/regress/vsyslog/vsyslog_test.c delete mode 100644 lib/util/vsyslog.c diff --git a/MANIFEST b/MANIFEST index dd910df38..9bffb8189 100644 --- a/MANIFEST +++ b/MANIFEST @@ -285,7 +285,6 @@ lib/util/regress/sudo_parseln/test5.out.ok lib/util/regress/sudo_parseln/test6.in lib/util/regress/sudo_parseln/test6.out.ok lib/util/regress/tailq/hltq_test.c -lib/util/regress/vsyslog/vsyslog_test.c lib/util/roundup.c lib/util/secure_path.c lib/util/setgroups.c @@ -314,7 +313,6 @@ lib/util/unlinkat.c lib/util/util.exp.in lib/util/utimens.c lib/util/uuid.c -lib/util/vsyslog.c lib/zlib/Makefile.in lib/zlib/adler32.c lib/zlib/compress.c diff --git a/config.h.in b/config.h.in index 5dfe95a91..678ebd0c6 100644 --- a/config.h.in +++ b/config.h.in @@ -970,9 +970,6 @@ /* Define to 1 if you have the `vsnprintf' function. */ #undef HAVE_VSNPRINTF -/* Define to 1 if you have the `vsyslog' function. */ -#undef HAVE_VSYSLOG - /* Define to 1 if you have the header file. */ #undef HAVE_WCHAR_H diff --git a/configure b/configure index d0f3491d1..168cbfa72 100755 --- a/configure +++ b/configure @@ -21819,33 +21819,6 @@ fi fi - - for ac_func in vsyslog -do : - ac_fn_c_check_func "$LINENO" "vsyslog" "ac_cv_func_vsyslog" -if test "x$ac_cv_func_vsyslog" = xyes -then : - printf "%s\n" "#define HAVE_VSYSLOG 1" >>confdefs.h - -else $as_nop - - case " $LIBOBJS " in - *" vsyslog.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS vsyslog.$ac_objext" - ;; -esac - - - for _sym in sudo_vsyslog; do - COMPAT_EXP="${COMPAT_EXP}${_sym} -" - done - - COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }vsyslog_test" - -fi - -done ac_fn_c_check_func "$LINENO" "setpassent" "ac_cv_func_setpassent" if test "x$ac_cv_func_setpassent" = xyes then : diff --git a/configure.ac b/configure.ac index c87eeb7a2..ea405644a 100644 --- a/configure.ac +++ b/configure.ac @@ -2863,11 +2863,6 @@ AC_CHECK_MEMBER([struct stat.st_mtim], [AC_CHECK_MEMBER([struct stat.st_nmtime], AC_DEFINE(HAVE_ST_NMTIME))]) ] ) -AC_CHECK_FUNCS([vsyslog], [], [ - AC_LIBOBJ(vsyslog) - SUDO_APPEND_COMPAT_EXP(sudo_vsyslog) - COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }vsyslog_test" -]) dnl dnl 4.4BSD-based systems can force the password or group file to be held open dnl diff --git a/include/sudo_compat.h b/include/sudo_compat.h index 4ee5b6818..6bc74a99d 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -553,11 +553,6 @@ sudo_dso_public void *sudo_reallocarray(void *ptr, size_t nmemb, size_t size); # undef reallocarray # define reallocarray(_a, _b, _c) sudo_reallocarray((_a), (_b), (_c)) #endif /* HAVE_REALLOCARRAY */ -#ifndef HAVE_VSYSLOG -sudo_dso_public void sudo_vsyslog(int pri, const char *fmt, va_list ap); -# undef vsyslog -# define vsyslog(_a, _b, _c) sudo_vsyslog((_a), (_b), (_c)) -#endif /* HAVE_VSYSLOG */ #ifndef HAVE_DUP3 sudo_dso_public int sudo_dup3(int oldd, int newd, int flags); # undef dup3 diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index e23dde9cd..8e44af790 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -176,8 +176,6 @@ GETGROUPLIST_TEST_OBJS = getgrouplist_test.lo getgrouplist.lo STRSIG_TEST_OBJS = strsig_test.lo sig2str.lo str2sig.lo @SIGNAME@ -VSYSLOG_TEST_OBJS = vsyslog_test.lo vsyslog.lo - FUZZ_SUDO_CONF_OBJS = fuzz_sudo_conf.lo FUZZ_SUDO_CONF_CORPUS = $(srcdir)/regress/corpus/seed/sudo_conf/sudo.conf.* @@ -295,9 +293,6 @@ strtonum_test: $(STRTONUM_TEST_OBJS) libsudo_util.la strtoid_test: $(STRTOID_TEST_OBJS) libsudo_util.la $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(STRTOID_TEST_OBJS) libsudo_util.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) -vsyslog_test: $(VSYSLOG_TEST_OBJS) libsudo_util.la - $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(VSYSLOG_TEST_OBJS) libsudo_util.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) - fuzz_sudo_conf: $(FUZZ_SUDO_CONF_OBJS) $(LIBFUZZSTUB) libsudo_util.la $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(FUZZ_SUDO_CONF_OBJS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(FUZZ_LDFLAGS) $(FUZZ_LIBS) libsudo_util.la @@ -434,9 +429,6 @@ check: $(TEST_PROGS) check-fuzzer rm -f ./progname_test2; ln -s ./progname_test ./progname_test2; \ ./progname_test2 || rval=`expr $$rval + $$?`; \ rm -f ./progname_test2; \ - if test -f vsyslog_test; then \ - ./vsyslog_test || rval=`expr $$rval + $$?`; \ - fi; \ build_dir=`pwd`; \ cd $(srcdir); \ for dir in sudo_conf sudo_parseln; do \ @@ -1510,21 +1502,3 @@ uuid.i: $(srcdir)/uuid.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(CC) -E -o $@ $(CPPFLAGS) $< uuid.plog: uuid.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/uuid.c --i-file $< --output-file $@ -vsyslog.lo: $(srcdir)/vsyslog.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/vsyslog.c -vsyslog.i: $(srcdir)/vsyslog.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(CC) -E -o $@ $(CPPFLAGS) $< -vsyslog.plog: vsyslog.i - rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/vsyslog.c --i-file $< --output-file $@ -vsyslog_test.lo: $(srcdir)/regress/vsyslog/vsyslog_test.c \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_fatal.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/vsyslog/vsyslog_test.c -vsyslog_test.i: $(srcdir)/regress/vsyslog/vsyslog_test.c \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_util.h $(top_builddir)/config.h - $(CC) -E -o $@ $(CPPFLAGS) $< -vsyslog_test.plog: vsyslog_test.i - rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/vsyslog/vsyslog_test.c --i-file $< --output-file $@ diff --git a/lib/util/regress/vsyslog/vsyslog_test.c b/lib/util/regress/vsyslog/vsyslog_test.c deleted file mode 100644 index 27b9f14fa..000000000 --- a/lib/util/regress/vsyslog/vsyslog_test.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * SPDX-License-Identifier: ISC - * - * Copyright (c) 2017-2020 Todd C. Miller - * - * 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. - */ - -#include - -#include -#include -#include -#include -#include - -#include "sudo_compat.h" -#include "sudo_fatal.h" -#include "sudo_util.h" - -sudo_dso_public int main(int argc, char *argv[]); - -/* - * Test that sudo_vsyslog() works as expected. - */ -static char *expected_result; -static int errors; -static int ntests; - -/* - * Replacement for syslog(3) that just verifies the message - */ -void -syslog(int priority, const char *fmt, ...) -{ - va_list ap; - const char *msg; - - if (strcmp(fmt, "%s") != 0) - sudo_fatalx_nodebug("Expected syslog format \"%%s\", got \"%s\"", fmt); - - va_start(ap, fmt); - msg = va_arg(ap, char *); - if (strcmp(msg, expected_result) != 0) { - sudo_warnx_nodebug("Expected \"%s\", got \"%s\"", expected_result, msg); - errors++; - } else { - ntests++; - } - va_end(ap); -} - -static void -test_vsyslog(int priority, const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - sudo_vsyslog(priority, fmt, ap); - va_end(ap); -} - -int -main(int argc, char *argv[]) -{ - int len; - char buf1[1024 * 16], buf2[1024 * 16]; - - initprogname(argc > 0 ? argv[0] : "vsyslog_test"); - - /* Test small buffer. */ - expected_result = "sudo: millert : TTY=ttypa ; PWD=/etc/mail ; USER=root ; TSID=000AB0 ; COMMAND=/usr/sbin/newaliases"; - test_vsyslog(0, - "%s: %s : TTY=%s ; PWD=%s ; USER=%s ; TSID=%s ; COMMAND=%s", - "sudo", "millert", "ttypa", "/etc/mail", "root", "000AB0", - "/usr/sbin/newaliases"); - - /* Test small buffer w/ errno. */ - len = snprintf(buf1, sizeof(buf1), - "unable to open %s: %s", "/var/log/sudo-io/seq", strerror(ENOENT)); - if (len < 0 || len >= ssizeof(buf1)) - sudo_warnx_nodebug("buf1 truncated at %s:%d", __FILE__, __LINE__); - expected_result = buf1; - errno = ENOENT; - test_vsyslog(0, "unable to open %s: %m", "/var/log/sudo-io/seq"); - - /* Test large buffer > 8192 bytes. */ - memset(buf1, 'a', 8192); - buf1[8192] = '\0'; - expected_result = buf1; - test_vsyslog(0, "%s", buf1); - - /* Test large buffer w/ errno > 8192 bytes. */ - memset(buf1, 'b', 8184); - buf1[8184] = '\0'; - len = snprintf(buf2, sizeof(buf2), "%s: %s", buf1, strerror(EINVAL)); - if (len < 0 || len >= ssizeof(buf2)) - sudo_warnx_nodebug("buf2 truncated at %s:%d", __FILE__, __LINE__); - expected_result = buf2; - errno = EINVAL; - test_vsyslog(0, "%s: %m", buf1); - - /* Test large format string > 8192 bytes, expect truncation to 2048. */ - memset(buf1, 'b', 8184); - buf1[8184] = '\0'; - len = snprintf(buf2, sizeof(buf2), "%.*s", 2047, buf1); - if (len < 0 || len >= ssizeof(buf2)) - sudo_warnx_nodebug("buf2 truncated at %s:%d", __FILE__, __LINE__); - expected_result = buf2; - test_vsyslog(0, buf1); - - if (ntests != 0) { - printf("%s: %d tests run, %d errors, %d%% success rate\n", - getprogname(), ntests, errors, (ntests - errors) * 100 / ntests); - } else { - printf("%s: error, no tests run!\n", getprogname()); - errors = 1; - } - exit(errors); -} diff --git a/lib/util/vsyslog.c b/lib/util/vsyslog.c deleted file mode 100644 index 1eaaf9628..000000000 --- a/lib/util/vsyslog.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: ISC - * - * Copyright (c) 2016-2017 Todd C. Miller - * - * 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 - -#include -#include -#include -#include -#include -#include - -#include "sudo_compat.h" - -#ifndef HAVE_VSYSLOG -void -sudo_vsyslog(int pri, const char *fmt, va_list ap) -{ - int saved_errno = errno; - char *cp, *ep, msgbuf[8192], new_fmt[2048]; - va_list ap2; - size_t len; - - /* Rewrite fmt, replacing %m with an errno string. */ - for (cp = new_fmt, ep = new_fmt + sizeof(new_fmt); *fmt != '\0'; fmt++) { - if (fmt[0] == '%' && fmt[1] == 'm') { - fmt++; - len = strlcpy(cp, strerror(saved_errno), (ep - cp)); - if (len >= (size_t)(ep - cp)) - len = (size_t)(ep - cp) - 1; - cp += len; - } else { - if (fmt[0] == '%' && fmt[1] == '%') { - fmt++; - if (cp < ep - 1) - *cp++ = '%'; - } - if (cp < ep - 1) - *cp++ = *fmt; - } - } - *cp = '\0'; - - /* Format message and log it, using a static buffer if possible. */ - va_copy(ap2, ap); - len = (size_t)vsnprintf(msgbuf, sizeof(msgbuf), new_fmt, ap2); - va_end(ap2); - if (len < sizeof(msgbuf)) { - syslog(pri, "%s", msgbuf); - } else { - /* Too big for static buffer? */ - char *buf; - if (vasprintf(&buf, new_fmt, ap) != -1) { - syslog(pri, "%s", buf); - free(buf); - } - } -} -#endif /* HAVE_VSYSLOG */ diff --git a/scripts/mkdep.pl b/scripts/mkdep.pl index 1d7d53de1..7530768d4 100755 --- a/scripts/mkdep.pl +++ b/scripts/mkdep.pl @@ -116,7 +116,7 @@ sub mkdep { # XXX - fill in AUTH_OBJS from contents of the auth dir instead $makefile =~ s:\@AUTH_OBJS\@:afs.lo aix_auth.lo bsdauth.lo dce.lo fwtk.lo getspwuid.lo kerb5.lo pam.lo passwd.lo rfc1938.lo secureware.lo securid5.lo sia.lo:; $makefile =~ s:\@DIGEST\@:digest.lo digest_openssl.lo digest_gcrypt.lo:; - $makefile =~ s:\@LTLIBOBJS\@:arc4random.lo arc4random_uniform.lo cfmakeraw.lo closefrom.lo dup3.lo explicit_bzero.lo fchmodat.lo freezero.lo fstatat.lo fnmatch.lo getaddrinfo.lo getcwd.lo getentropy.lo getgrouplist.lo getdelim.lo getopt_long.lo getusershell.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo mksiglist.lo mksigname.lo mktemp.lo nanosleep.lo openat.lo pipe2.lo pread.lo pwrite.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo str2sig.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo unlinkat.lo utimens.lo vsyslog.lo:; + $makefile =~ s:\@LTLIBOBJS\@:arc4random.lo arc4random_uniform.lo cfmakeraw.lo closefrom.lo dup3.lo explicit_bzero.lo fchmodat.lo freezero.lo fstatat.lo fnmatch.lo getaddrinfo.lo getcwd.lo getentropy.lo getgrouplist.lo getdelim.lo getopt_long.lo getusershell.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo mksiglist.lo mksigname.lo mktemp.lo nanosleep.lo openat.lo pipe2.lo pread.lo pwrite.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo str2sig.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo unlinkat.lo utimens.lo:; # Parse OBJS lines my %objs;