diff --git a/MANIFEST b/MANIFEST index c50aa2d3f..bb5b34f19 100644 --- a/MANIFEST +++ b/MANIFEST @@ -375,7 +375,6 @@ lib/util/strtonum.c lib/util/sudo_conf.c lib/util/sudo_debug.c lib/util/sudo_dso.c -lib/util/suspend_parent.c lib/util/sys_siglist.h lib/util/sys_signame.h lib/util/term.c @@ -1295,6 +1294,7 @@ src/sudo_intercept_common.c src/sudo_noexec.c src/sudo_plugin_int.h src/sudo_usage.h.in +src/suspend_parent.c src/tgetpass.c src/ttyname.c src/utmp.c diff --git a/include/sudo_util.h b/include/sudo_util.h index bc8810e5f..8212a3b16 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -316,10 +316,6 @@ sudo_dso_public int sudo_strtomode_v1(const char *cp, const char **errstr); /* sudo_printf.c */ extern int (*sudo_printf)(int msg_type, const char *fmt, ...); -/* suspend_parent.c */ -sudo_dso_public void sudo_suspend_parent_v1(int signo, pid_t my_pid, pid_t my_pgrp, pid_t cmnd_pid, void *closure, void (*callback)(void *, int)); -#define sudo_suspend_parent(_a, _b, _c, _d, _e, _f) sudo_suspend_parent_v1((_a), (_b), (_c), (_d), (_e), (_f)) - /* term.c */ sudo_dso_public bool sudo_term_cbreak_v1(int fd); #define sudo_term_cbreak(_a) sudo_term_cbreak_v1((_a)) diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index fa66db6ec..4dba57292 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -151,7 +151,7 @@ LTOBJS = basename.lo @DIGEST@ event.lo fatal.lo key_val.lo gethostname.lo \ multiarch.lo parseln.lo progname.lo rcstr.lo regex.lo roundup.lo \ secure_path.lo setgroups.lo strsplit.lo strtobool.lo strtoid.lo \ strtomode.lo strtonum.lo sudo_conf.lo sudo_debug.lo sudo_dso.lo \ - suspend_parent.lo term.lo ttyname_dev.lo ttysize.lo uuid.lo \ + term.lo ttyname_dev.lo ttysize.lo uuid.lo \ @COMMON_OBJS@ @LTLIBOBJS@ IOBJS = $(LTOBJS:.lo=.i) @@ -1644,20 +1644,6 @@ sudo_dso.i: $(srcdir)/sudo_dso.c $(incdir)/compat/stdbool.h \ $(CC) -E -o $@ $(CPPFLAGS) $< sudo_dso.plog: sudo_dso.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/sudo_dso.c --i-file $< --output-file $@ -suspend_parent.lo: $(srcdir)/suspend_parent.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/suspend_parent.c -suspend_parent.i: $(srcdir)/suspend_parent.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(CC) -E -o $@ $(CPPFLAGS) $< -suspend_parent.plog: suspend_parent.i - rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/suspend_parent.c --i-file $< --output-file $@ term.lo: $(srcdir)/term.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h diff --git a/lib/util/util.exp.in b/lib/util/util.exp.in index ced75fb33..54bf365f5 100644 --- a/lib/util/util.exp.in +++ b/lib/util/util.exp.in @@ -147,7 +147,6 @@ sudo_strtoid_v2 sudo_strtoidx_v1 sudo_strtomode_v1 sudo_strtonum -sudo_suspend_parent_v1 sudo_term_cbreak_v1 sudo_term_copy_v1 sudo_term_eof diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index 6d2bb8fbb..69af3d16e 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -1688,7 +1688,8 @@ fuzz_policy.o: $(srcdir)/regress/fuzz/fuzz_policy.c $(devdir)/def_data.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 $(srcdir)/check.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/auth/sudo_auth.h $(srcdir)/check.h \ $(srcdir)/defaults.h $(srcdir)/interfaces.h $(srcdir)/logging.h \ $(srcdir)/parse.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ @@ -1700,7 +1701,8 @@ fuzz_policy.i: $(srcdir)/regress/fuzz/fuzz_policy.c $(devdir)/def_data.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 $(srcdir)/check.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/auth/sudo_auth.h $(srcdir)/check.h \ $(srcdir)/defaults.h $(srcdir)/interfaces.h $(srcdir)/logging.h \ $(srcdir)/parse.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ @@ -1713,7 +1715,7 @@ fuzz_stubs.o: $(srcdir)/regress/fuzz/fuzz_stubs.c $(devdir)/def_data.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/check.h \ $(srcdir)/defaults.h $(srcdir)/interfaces.h $(srcdir)/logging.h \ $(srcdir)/parse.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ @@ -1724,7 +1726,7 @@ fuzz_stubs.i: $(srcdir)/regress/fuzz/fuzz_stubs.c $(devdir)/def_data.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/check.h \ $(srcdir)/defaults.h $(srcdir)/interfaces.h $(srcdir)/logging.h \ $(srcdir)/parse.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ @@ -2455,22 +2457,22 @@ policy.lo: $(srcdir)/policy.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_eventlog.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/interfaces.h \ - $(srcdir)/logging.h $(srcdir)/parse.h $(srcdir)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(srcdir)/sudoers_version.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h + $(incdir)/sudo_util.h $(srcdir)/auth/sudo_auth.h \ + $(srcdir)/defaults.h $(srcdir)/interfaces.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ + $(srcdir)/sudoers_debug.h $(srcdir)/sudoers_version.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/policy.c policy.i: $(srcdir)/policy.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_eventlog.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/interfaces.h \ - $(srcdir)/logging.h $(srcdir)/parse.h $(srcdir)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(srcdir)/sudoers_version.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h + $(incdir)/sudo_util.h $(srcdir)/auth/sudo_auth.h \ + $(srcdir)/defaults.h $(srcdir)/interfaces.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ + $(srcdir)/sudoers_debug.h $(srcdir)/sudoers_version.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h $(CC) -E -o $@ $(CPPFLAGS) $< policy.plog: policy.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/policy.c --i-file $< --output-file $@ @@ -2663,7 +2665,7 @@ set_perms.lo: $(srcdir)/set_perms.c $(devdir)/def_data.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/check.h \ $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ @@ -2674,7 +2676,7 @@ set_perms.i: $(srcdir)/set_perms.c $(devdir)/def_data.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/check.h \ $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ diff --git a/src/Makefile.in b/src/Makefile.in index 99e735212..57299ad9b 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -147,7 +147,8 @@ OBJS = conversation.o copy_file.o edit_open.o env_hooks.o exec.o \ exec_common.o exec_intercept.o exec_iolog.o exec_monitor.o \ exec_nopty.o exec_preload.o exec_ptrace.o exec_pty.o get_pty.o \ hooks.o limits.o load_plugins.o net_ifs.o parse_args.o preserve_fds.o \ - signal.o sudo.o sudo_edit.o tgetpass.o ttyname.o utmp.o @SUDO_OBJS@ + signal.o sudo.o sudo_edit.o suspend_parent.o tgetpass.o ttyname.o \ + utmp.o @SUDO_OBJS@ IOBJS = $(OBJS:.o=.i) sesh.i sudo_intercept.i sudo_intercept_common.i @@ -164,7 +165,7 @@ CHECK_NOEXEC_OBJS = check_noexec.o exec_common.o exec_preload.o CHECK_TTYNAME_OBJS = check_ttyname.o ttyname.o -TEST_PTRACE_OBJS = test_ptrace.o +TEST_PTRACE_OBJS = suspend_parent.o test_ptrace.o LIBOBJDIR = $(top_builddir)/@ac_config_libobj_dir@/ @@ -941,14 +942,14 @@ sudo.o: $(srcdir)/sudo.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(srcdir)/sudo.h $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h ./sudo_usage.h + $(top_builddir)/pathnames.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/sudo.c sudo.i: $(srcdir)/sudo.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(srcdir)/sudo.h $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h ./sudo_usage.h + $(top_builddir)/pathnames.h $(CC) -E -o $@ $(CPPFLAGS) $< sudo.plog: sudo.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/sudo.c --i-file $< --output-file $@ @@ -1006,6 +1007,20 @@ sudo_intercept_common.i: $(srcdir)/sudo_intercept_common.c \ $(CC) -E -o $@ $(CPPFLAGS) $< sudo_intercept_common.plog: sudo_intercept_common.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/sudo_intercept_common.c --i-file $< --output-file $@ +suspend_parent.o: $(srcdir)/suspend_parent.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/suspend_parent.c +suspend_parent.i: $(srcdir)/suspend_parent.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(CC) -E -o $@ $(CPPFLAGS) $< +suspend_parent.plog: suspend_parent.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/suspend_parent.c --i-file $< --output-file $@ test_ptrace.o: $(srcdir)/regress/intercept/test_ptrace.c \ $(incdir)/compat/endian.h $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ diff --git a/src/sudo_exec.h b/src/sudo_exec.h index 4358baee2..71d97a577 100644 --- a/src/sudo_exec.h +++ b/src/sudo_exec.h @@ -228,4 +228,7 @@ bool exec_ptrace_stopped(pid_t pid, int status, void *intercept); bool set_exec_filter(void); int exec_ptrace_seize(pid_t child); +/* suspend_parent.c */ +void sudo_suspend_parent(int signo, pid_t my_pid, pid_t my_pgrp, pid_t cmnd_pid, void *closure, void (*callback)(void *, int)); + #endif /* SUDO_EXEC_H */ diff --git a/lib/util/suspend_parent.c b/src/suspend_parent.c similarity index 97% rename from lib/util/suspend_parent.c rename to src/suspend_parent.c index 2921918c0..eef8542a6 100644 --- a/lib/util/suspend_parent.c +++ b/src/suspend_parent.c @@ -34,7 +34,7 @@ #include "sudo_debug.h" #include "sudo_fatal.h" #include "sudo_gettext.h" -#include "sudo_util.h" +#include "sudo_exec.h" static volatile sig_atomic_t got_sigttou; @@ -83,7 +83,7 @@ tcsetpgrp_nobg(int fd, pid_t pgrp_id) * being suspended. */ void -sudo_suspend_parent_v1(int signo, pid_t my_pid, pid_t my_pgrp, pid_t cmnd_pid, +sudo_suspend_parent(int signo, pid_t my_pid, pid_t my_pgrp, pid_t cmnd_pid, void *closure, void (*callback)(void *, int)) { struct sigaction sa, osa;