diff --git a/MANIFEST b/MANIFEST index 23cdb7ab2..14e921997 100644 --- a/MANIFEST +++ b/MANIFEST @@ -114,6 +114,7 @@ lib/util/lbuf.c lib/util/locking.c lib/util/memrchr.c lib/util/memset_s.c +lib/util/mkdir_parents.c lib/util/mksiglist.c lib/util/mksiglist.h lib/util/mksigname.c @@ -349,7 +350,6 @@ plugins/sudoers/match_addr.c plugins/sudoers/match_command.c plugins/sudoers/match_digest.c plugins/sudoers/mkdefaults -plugins/sudoers/mkdir_parents.c plugins/sudoers/parse.c plugins/sudoers/parse.h plugins/sudoers/parse_ldif.c diff --git a/include/sudo_util.h b/include/sudo_util.h index 9fc832f37..5cb967052 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -213,6 +213,10 @@ __dso_public bool sudo_lock_file_v1(int fd, int action); __dso_public bool sudo_lock_region_v1(int fd, int action, off_t len); #define sudo_lock_region(_a, _b, _c) sudo_lock_region_v1((_a), (_b), (_c)) +/* mkdir_parents.c */ +__dso_public bool sudo_mkdir_parents_v1(char *path, uid_t uid, gid_t gid, mode_t mode, bool quiet); +#define sudo_mkdir_parents(_a, _b, _c, _d, _e) sudo_mkdir_parents_v1((_a), (_b), (_c), (_d), (_e)) + /* parseln.c */ __dso_public ssize_t sudo_parseln_v1(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp); __dso_public ssize_t sudo_parseln_v2(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp, int flags); diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index b07572ede..eee353638 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -115,11 +115,12 @@ DEVEL = @DEVEL@ SHELL = @SHELL@ -LTOBJS = @DIGEST@ event.lo fatal.lo key_val.lo gethostname.lo gettime.lo \ - getgrouplist.lo gidlist.lo lbuf.lo locking.lo parseln.lo progname.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 \ - term.lo ttyname_dev.lo ttysize.lo @COMMON_OBJS@ @LTLIBOBJS@ +LTOBJS = @DIGEST@ event.lo fatal.lo key_val.lo gethostname.lo \ + gettime.lo getgrouplist.lo gidlist.lo lbuf.lo locking.lo \ + mkdir_parents.lo parseln.lo progname.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 term.lo \ + ttyname_dev.lo ttysize.lo @COMMON_OBJS@ @LTLIBOBJS@ IOBJS = $(LTOBJS:.lo=.i) @@ -784,6 +785,20 @@ memset_s.i: $(srcdir)/memset_s.c $(incdir)/sudo_compat.h \ $(CC) -E -o $@ $(CPPFLAGS) $< memset_s.plog: memset_s.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/memset_s.c --i-file $< --output-file $@ +mkdir_parents.lo: $(srcdir)/mkdir_parents.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.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)/mkdir_parents.c +mkdir_parents.i: $(srcdir)/mkdir_parents.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +mkdir_parents.plog: mkdir_parents.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/mkdir_parents.c --i-file $< --output-file $@ mksiglist.lo: $(srcdir)/mksiglist.c $(incdir)/sudo_compat.h \ $(srcdir)/mksiglist.h $(top_builddir)/config.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/mksiglist.c diff --git a/plugins/sudoers/mkdir_parents.c b/lib/util/mkdir_parents.c similarity index 85% rename from plugins/sudoers/mkdir_parents.c rename to lib/util/mkdir_parents.c index 692cf8d04..bb79a4906 100644 --- a/plugins/sudoers/mkdir_parents.c +++ b/lib/util/mkdir_parents.c @@ -27,6 +27,11 @@ #include #include #include +#ifdef HAVE_STDBOOL_H +# include +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ @@ -38,18 +43,24 @@ #include #include -#include "sudoers.h" +#define DEFAULT_TEXT_DOMAIN "sudo" +#include "sudo_gettext.h" /* must be included before sudo_compat.h */ + +#include "sudo_compat.h" +#include "sudo_fatal.h" +#include "sudo_debug.h" +#include "sudo_util.h" /* * Create any parent directories needed by path (but not path itself). * Note that path is modified but is restored before it returns. */ bool -sudo_mkdir_parents(char *path, uid_t uid, gid_t gid, mode_t mode, bool quiet) +sudo_mkdir_parents_v1(char *path, uid_t uid, gid_t gid, mode_t mode, bool quiet) { struct stat sb; char *slash = path; - debug_decl(sudo_mkdir_parents, SUDOERS_DEBUG_UTIL) + debug_decl(sudo_mkdir_parents, SUDO_DEBUG_UTIL) /* cppcheck-suppress nullPointerRedundantCheck */ while ((slash = strchr(slash + 1, '/')) != NULL) { diff --git a/lib/util/util.exp.in b/lib/util/util.exp.in index 6dd3095d8..d364fec86 100644 --- a/lib/util/util.exp.in +++ b/lib/util/util.exp.in @@ -88,6 +88,7 @@ sudo_lbuf_init_v1 sudo_lbuf_print_v1 sudo_lock_file_v1 sudo_lock_region_v1 +sudo_mkdir_parents_v1 sudo_new_key_val_v1 sudo_parse_gids_v1 sudo_parseln_v1 diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index b0f12594f..b082f29a3 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -165,7 +165,7 @@ LIBPARSESUDOERS_IOBJS = $(LIBPARSESUDOERS_OBJS:.lo=.i) passwd.i SUDOERS_OBJS = $(AUTH_OBJS) boottime.lo check.lo editor.lo env.lo \ env_pattern.lo file.lo find_path.lo fmtsudoers.lo gc.lo \ goodpath.lo group_plugin.lo interfaces.lo iolog.lo \ - iolog_path.lo locale.lo logging.lo logwrap.lo mkdir_parents.lo \ + iolog_path.lo locale.lo logging.lo logwrap.lo \ parse.lo policy.lo prompt.lo set_perms.lo starttime.lo \ sudo_nss.lo sudoers.lo timestamp.lo @SUDOERS_OBJS@ @@ -217,7 +217,7 @@ CHECK_IOLOG_PATH_OBJS = check_iolog_path.o iolog_path.lo locale.lo \ pwutil.lo pwutil_impl.lo redblack.lo sudoers_debug.lo CHECK_IOLOG_PLUGIN_OBJS = check_iolog_plugin.o iolog.lo iolog_path.lo \ - iolog_util.o locale.lo mkdir_parents.lo pwutil.lo \ + iolog_util.o locale.lo pwutil.lo \ pwutil_impl.lo redblack.lo sudoers_debug.lo CHECK_IOLOG_UTIL_OBJS = check_iolog_util.o iolog_util.o locale.lo \ @@ -1871,28 +1871,6 @@ match_digest.i: $(srcdir)/match_digest.c $(devdir)/def_data.h \ $(CC) -E -o $@ $(CPPFLAGS) $< match_digest.plog: match_digest.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/match_digest.c --i-file $< --output-file $@ -mkdir_parents.lo: $(srcdir)/mkdir_parents.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.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 $(srcdir)/defaults.h \ - $(srcdir)/logging.h $(srcdir)/parse.h $(srcdir)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/mkdir_parents.c -mkdir_parents.i: $(srcdir)/mkdir_parents.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.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 $(srcdir)/defaults.h \ - $(srcdir)/logging.h $(srcdir)/parse.h $(srcdir)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(CC) -E -o $@ $(CPPFLAGS) $< -mkdir_parents.plog: mkdir_parents.i - rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/mkdir_parents.c --i-file $< --output-file $@ net_ifs.o: $(top_srcdir)/src/net_ifs.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index 83bc3c31a..b00980aa3 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -421,9 +421,6 @@ extern const char *path_plugin_dir; char *find_editor(int nfiles, char **files, int *argc_out, char ***argv_out, char * const *whitelist, const char **env_editor, bool env_error); -/* mkdir_parents.c */ -bool sudo_mkdir_parents(char *path, uid_t uid, gid_t gid, mode_t mode, bool quiet); - /* gc.c */ enum sudoers_gc_types { GC_UNKNOWN,