From aa3c05b9de6886f1274cf885924b10702b145b12 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Apr 03 2010 15:50:55 +0000 Subject: - new upstream release, dropped applied patches - eliminated compile-time warnings --- diff --git a/.cvsignore b/.cvsignore index 5d5b1b4..c503e30 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1 @@ -findutils-4.4.2.tar.gz -findutils-4.4.2.tar.gz.sig +findutils-4.5.7.tar.gz diff --git a/findutils-4.4.0-no-locate.patch b/findutils-4.4.0-no-locate.patch index 949e352..6452fb9 100644 --- a/findutils-4.4.0-no-locate.patch +++ b/findutils-4.4.0-no-locate.patch @@ -1,17 +1,18 @@ -diff -up findutils-4.4.2/Makefile.am_old findutils-4.4.2/Makefile.am ---- findutils-4.4.2/Makefile.am_old 2009-06-30 14:54:41.000000000 +0200 -+++ findutils-4.4.2/Makefile.am 2009-06-30 14:54:59.000000000 +0200 -@@ -8,7 +8,7 @@ DISTCLEANFILES = tool-versions.txt +diff --git a/Makefile.am b/Makefile.am +index c7f8f39..0dacb93 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -9,7 +9,7 @@ DISTCLEANFILES = tool-versions.txt # "tests" is the gnulib unit test dir. --SUBDIRS = gnulib tests build-aux lib find xargs locate doc po m4 -+SUBDIRS = gnulib tests build-aux lib find xargs doc po m4 +-SUBDIRS = gnulib tests build-aux lib find xargs locate doc po m4 ++SUBDIRS = gnulib tests build-aux lib find xargs doc po m4 ACLOCAL_AMFLAGS = -I gnulib/m4 -I m4 diff --git a/doc/find.texi b/doc/find.texi -index 8944096..4d71066 100644 +index d719ccb..b509f66 100644 --- a/doc/find.texi +++ b/doc/find.texi @@ -7,7 +7,6 @@ @@ -22,3 +23,68 @@ index 8944096..4d71066 100644 @iftex @finalout +@@ -570,8 +569,7 @@ the databases are updated, and the directories for which they contain + entries. + + Here is how to select which file name databases @code{locate} +-searches. The default is system-dependent. At the time this document +-was generated, the default was @file{@value{LOCATE_DB}}. ++searches. The default is system-dependent. + + @table @code + @item --database=@var{path} +@@ -2728,13 +2726,9 @@ thrashing the network. + directories are indexed by each database file. + + The default location for the locate database depends on how findutils +-is built, but the findutils installation accompanying this manual uses +-the default location @file{@value{LOCATE_DB}}. +- +-If no database exists at @file{@value{LOCATE_DB}} but the user did not +-specify where to look (by using @samp{-d} or setting +-@code{LOCATE_PATH}), then @code{locate} will also check for a +-``secure'' database in @file{/var/lib/slocate/slocate.db}. ++is built. If user did not specify where to look (by using @samp{-d} ++or setting @code{LOCATE_PATH}), then @code{locate} will also check for ++a ``secure'' database in @file{/var/lib/slocate/slocate.db}. + + @node Database Formats + @section Database Formats +@@ -3213,8 +3207,7 @@ present. + + @item --database=@var{path} + @itemx -d @var{path} +-Instead of searching the default @code{locate} database +-@file{@value{LOCATE_DB}}, @code{locate} searches the file ++@code{locate} searches the file + name databases in @var{path}, which is a colon-separated list of + database file names. You can also use the environment variable + @code{LOCATE_PATH} to set the list of database files to search. The +@@ -3399,8 +3392,7 @@ The environment variable @code{PRUNEFS} also sets this value. Default + is @file{nfs NFS proc}. + + @item --output=@var{dbfile} +-The database file to build. The default is system-dependent, but +-when this document was formatted it was @file{@value{LOCATE_DB}}. ++The database file to build. + + @item --localuser=@var{user} + The user to search the non-network directories as, using @code{su}. +@@ -5359,7 +5351,7 @@ See the description of the similar message for @code{find}. + @section Error Messages From @code{locate} + + @table @samp +-@item warning: database @file{@value{LOCATE_DB}} is more than 8 days old ++@item warning: database @file{LOCATE_DB} is more than 8 days old + The @code{locate} program relies on a database which is periodically + built by the @code{updatedb} program. That hasn't happened in a long + time. To fix this problem, run @code{updatedb} manually. This can +@@ -5367,7 +5359,7 @@ often happen on systems that are generally not left on, so the + periodic ``cron'' task which normally does this doesn't get a chance + to run. + +-@item locate database @file{@value{LOCATE_DB}} is corrupt or invalid ++@item locate database @file{LOCATE_DB} is corrupt or invalid + This should not happen. Re-run @code{updatedb}. If that works, but + @code{locate} still produces this error, run @code{locate --version} + and @code{updatedb --version}. These should produce the same output. diff --git a/findutils-4.4.2-autofs.patch b/findutils-4.4.2-autofs.patch index 5f83256..a850c20 100644 --- a/findutils-4.4.2-autofs.patch +++ b/findutils-4.4.2-autofs.patch @@ -1,7 +1,8 @@ -diff -rup findutils-4.4.2.orig/find/fstype.c findutils-4.4.2/find/fstype.c ---- findutils-4.4.2.orig/find/fstype.c 2009-05-16 17:17:01.000000000 +0200 -+++ findutils-4.4.2/find/fstype.c 2009-10-20 12:47:10.589871024 +0200 -@@ -205,7 +205,72 @@ must_read_fs_list(bool need_fs_type) +diff --git a/find/fstype.c b/find/fstype.c +index 21c446b..502e208 100644 +--- a/find/fstype.c ++++ b/find/fstype.c +@@ -205,7 +205,72 @@ must_read_fs_list (bool need_fs_type) return entries; } @@ -32,7 +33,7 @@ diff -rup findutils-4.4.2.orig/find/fstype.c findutils-4.4.2/find/fstype.c + && dev == (dev_t) dev) + return dev; + } -+ + +# endif + (void) mount_options; + return -1; @@ -52,7 +53,7 @@ diff -rup findutils-4.4.2.orig/find/fstype.c findutils-4.4.2/find/fstype.c + fp = setmntent ("/proc/mounts", "r"); + if (fp == NULL) + return false; - ++ + while ((mnt = getmntent (fp))) + { + if (0 != strcmp ("autofs", mnt->mnt_type)) @@ -74,9 +75,9 @@ diff -rup findutils-4.4.2.orig/find/fstype.c findutils-4.4.2/find/fstype.c /* Return a newly allocated string naming the type of file system that the file PATH, described by STATP, is on. -@@ -244,6 +309,10 @@ file_system_type_uncached (const struct +@@ -244,6 +309,10 @@ file_system_type_uncached (const struct stat *statp, const char *path) } - free_file_system_list(entries); + free_file_system_list (entries); + /* check for autofs */ + if (type == NULL && filesystem_check_autofs (statp)) @@ -84,4 +85,4 @@ diff -rup findutils-4.4.2.orig/find/fstype.c findutils-4.4.2/find/fstype.c + /* Don't cache unknown values. */ fstype_known = (type != NULL); - + diff --git a/findutils-4.4.2-fts-remount.patch b/findutils-4.4.2-fts-remount.patch deleted file mode 100644 index eb32922..0000000 --- a/findutils-4.4.2-fts-remount.patch +++ /dev/null @@ -1,27 +0,0 @@ -This patch is already applied on gnulib upstream git. - -diff --git a/gnulib/lib/fts.c b/gnulib/lib/fts.c -index ceb8935..2f1eda4 100644 ---- a/gnulib/lib/fts.c -+++ b/gnulib/lib/fts.c -@@ -974,6 +974,20 @@ fts_build (register FTS *sp, int type) - opening it. */ - if (cur->fts_info == FTS_NSOK) - cur->fts_info = fts_stat(sp, cur, false); -+ else if (sp->fts_options & FTS_TIGHT_CYCLE_CHECK) { -+ /* Now read the stat info again after opening a directory to -+ * reveal eventual changes caused by a submount triggered by -+ * the traverse. But do it only for utilities which use -+ * FTS_TIGHT_CYCLE_CHECK. Therefore only find and du can -+ * benefit from this feature for now. -+ */ -+ LEAVE_DIR (sp, cur, "4"); -+ fts_stat (sp, cur, false); -+ if (! enter_dir (sp, cur)) { -+ __set_errno (ENOMEM); -+ return NULL; -+ } -+ } - - /* - * Nlinks is the number of possible entries of type directory in the diff --git a/findutils-4.4.2-selinux-gnulib.patch b/findutils-4.4.2-selinux-gnulib.patch deleted file mode 100644 index 11a8f0d..0000000 --- a/findutils-4.4.2-selinux-gnulib.patch +++ /dev/null @@ -1,1143 +0,0 @@ -Once the selinux-at module appears on the list within import-gnulib.config this -patch is no longer needed. - -diff --git a/aclocal.m4 b/aclocal.m4 -index 1f97dda..61ad660 100644 ---- a/aclocal.m4 -+++ b/aclocal.m4 -@@ -1039,6 +1039,8 @@ m4_include([gnulib/m4/rpmatch.m4]) - m4_include([gnulib/m4/same.m4]) - m4_include([gnulib/m4/save-cwd.m4]) - m4_include([gnulib/m4/savedir.m4]) -+m4_include([gnulib/m4/selinux-context-h.m4]) -+m4_include([gnulib/m4/selinux-selinux-h.m4]) - m4_include([gnulib/m4/setenv.m4]) - m4_include([gnulib/m4/ssize_t.m4]) - m4_include([gnulib/m4/st_dm_mode.m4]) -diff --git a/gnulib/lib/Makefile.am b/gnulib/lib/Makefile.am -index 59ed5f2..b13e509 100644 ---- a/gnulib/lib/Makefile.am -+++ b/gnulib/lib/Makefile.am -@@ -1007,6 +1007,49 @@ EXTRA_libgnulib_a_SOURCES += savedir.c - - ## end gnulib module savedir - -+## begin gnulib module selinux-at -+ -+ -+EXTRA_DIST += selinux-at.c selinux-at.h -+ -+EXTRA_libgnulib_a_SOURCES += selinux-at.c -+ -+## end gnulib module selinux-at -+ -+## begin gnulib module selinux-h -+ -+libgnulib_a_SOURCES += se-context.in.h se-selinux.in.h -+ -+BUILT_SOURCES += selinux/selinux.h -+selinux/selinux.h: se-selinux.in.h -+ $(AM_V_at)$(MKDIR_P) selinux -+ $(AM_V_GEN)rm -f $@-t $@ && \ -+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ -+ sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -+ -e 's|@''NEXT_SELINUX_SELINUX_H''@|$(NEXT_SELINUX_SELINUX_H)|g' \ -+ < $(srcdir)/se-selinux.in.h; \ -+ } > $@-t && \ -+ chmod a-x $@-t && \ -+ mv $@-t $@ -+MOSTLYCLEANFILES += selinux/selinux.h selinux/selinux.h-t -+ -+BUILT_SOURCES += $(SELINUX_CONTEXT_H) -+selinux/context.h: se-context.in.h -+ $(AM_V_at)$(MKDIR_P) selinux -+ $(AM_V_GEN)rm -f $@-t $@ && \ -+ cp $(srcdir)/se-context.in.h $@-t && \ -+ chmod a-x $@-t && \ -+ mv $@-t $@ -+MOSTLYCLEANFILES += selinux/context.h selinux/context.h-t -+MOSTLYCLEANDIRS += selinux -+ -+EXTRA_DIST += getfilecon.c -+ -+EXTRA_libgnulib_a_SOURCES += getfilecon.c -+ -+## end gnulib module selinux-h -+ - ## begin gnulib module setenv - - -diff --git a/gnulib/lib/at-func.c b/gnulib/lib/at-func.c -index c7963fe..73be401 100644 ---- a/gnulib/lib/at-func.c -+++ b/gnulib/lib/at-func.c -@@ -1,5 +1,5 @@ - /* Define an at-style functions like fstatat, unlinkat, fchownat, etc. -- Copyright (C) 2006 Free Software Foundation, Inc. -+ Copyright (C) 2006, 2009 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by -@@ -16,62 +16,106 @@ - - /* written by Jim Meyering */ - --#define CALL_FUNC(F) \ -- (AT_FUNC_USE_F1_COND \ -+#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ -+#include "openat.h" -+#include "openat-priv.h" -+#include "save-cwd.h" -+ -+#ifdef AT_FUNC_USE_F1_COND -+# define CALL_FUNC(F) \ -+ (flag == AT_FUNC_USE_F1_COND \ - ? AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS) \ - : AT_FUNC_F2 (F AT_FUNC_POST_FILE_ARGS)) -+# define VALIDATE_FLAG(F) \ -+ if (flag & ~AT_FUNC_USE_F1_COND) \ -+ { \ -+ errno = EINVAL; \ -+ return FUNC_FAIL; \ -+ } -+#else -+# define CALL_FUNC(F) (AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS)) -+# define VALIDATE_FLAG(F) /* empty */ -+#endif -+ -+#ifdef AT_FUNC_RESULT -+# define FUNC_RESULT AT_FUNC_RESULT -+#else -+# define FUNC_RESULT int -+#endif -+ -+#ifdef AT_FUNC_FAIL -+# define FUNC_FAIL AT_FUNC_FAIL -+#else -+# define FUNC_FAIL -1 -+#endif - --/* Call AT_FUNC_F1 or AT_FUNC_F2 (testing AT_FUNC_USE_F1_COND to -- determine which) to operate on FILE, which is in the directory -- open on descriptor FD. If possible, do it without changing the -+/* Call AT_FUNC_F1 to operate on FILE, which is in the directory -+ open on descriptor FD. If AT_FUNC_USE_F1_COND is defined to a value, -+ AT_FUNC_POST_FILE_PARAM_DECLS must inlude a parameter named flag; -+ call AT_FUNC_F2 if FLAG is 0 or fail if FLAG contains more bits than -+ AT_FUNC_USE_F1_COND. Return int and fail with -1 unless AT_FUNC_RESULT -+ or AT_FUNC_FAIL are defined. If possible, do it without changing the - working directory. Otherwise, resort to using save_cwd/fchdir, - then AT_FUNC_F?/restore_cwd. If either the save_cwd or the restore_cwd - fails, then give a diagnostic and exit nonzero. */ --int -+FUNC_RESULT - AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS) - { -+ /* Be careful to choose names unlikely to conflict with -+ AT_FUNC_POST_FILE_PARAM_DECLS. */ - struct saved_cwd saved_cwd; - int saved_errno; -- int err; -+ FUNC_RESULT err; -+ -+ VALIDATE_FLAG (flag); - - if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file)) - return CALL_FUNC (file); - - { -- char buf[OPENAT_BUFFER_SIZE]; -- char *proc_file = openat_proc_name (buf, fd, file); -+ char proc_buf[OPENAT_BUFFER_SIZE]; -+ char *proc_file = openat_proc_name (proc_buf, fd, file); - if (proc_file) - { -- int proc_result = CALL_FUNC (proc_file); -- int proc_errno = errno; -- if (proc_file != buf) -- free (proc_file); -- /* If the syscall succeeds, or if it fails with an unexpected -- errno value, then return right away. Otherwise, fall through -- and resort to using save_cwd/restore_cwd. */ -- if (0 <= proc_result) -- return proc_result; -- if (! EXPECTED_ERRNO (proc_errno)) -- { -- errno = proc_errno; -- return proc_result; -- } -+ FUNC_RESULT proc_result = CALL_FUNC (proc_file); -+ int proc_errno = errno; -+ if (proc_file != proc_buf) -+ free (proc_file); -+ /* If the syscall succeeds, or if it fails with an unexpected -+ errno value, then return right away. Otherwise, fall through -+ and resort to using save_cwd/restore_cwd. */ -+ if (FUNC_FAIL != proc_result) -+ return proc_result; -+ if (! EXPECTED_ERRNO (proc_errno)) -+ { -+ errno = proc_errno; -+ return proc_result; -+ } - } - } - - if (save_cwd (&saved_cwd) != 0) - openat_save_fail (errno); -+ if (0 <= fd && fd == saved_cwd.desc) -+ { -+ /* If saving the working directory collides with the user's -+ requested fd, then the user's fd must have been closed to -+ begin with. */ -+ free_cwd (&saved_cwd); -+ errno = EBADF; -+ return FUNC_FAIL; -+ } - - if (fchdir (fd) != 0) - { - saved_errno = errno; - free_cwd (&saved_cwd); - errno = saved_errno; -- return -1; -+ return FUNC_FAIL; - } - - err = CALL_FUNC (file); -- saved_errno = (err < 0 ? errno : 0); -+ saved_errno = (err == FUNC_FAIL ? errno : 0); - - if (restore_cwd (&saved_cwd) != 0) - openat_restore_fail (errno); -@@ -83,3 +127,5 @@ AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS) - return err; - } - #undef CALL_FUNC -+#undef FUNC_RESULT -+#undef FUNC_FAIL -diff --git a/gnulib/lib/getfilecon.c b/gnulib/lib/getfilecon.c -new file mode 100644 -index 0000000..d712307 ---- /dev/null -+++ b/gnulib/lib/getfilecon.c -@@ -0,0 +1,87 @@ -+/* wrap getfilecon, lgetfilecon, and fgetfilecon -+ Copyright (C) 2009 Free Software Foundation, Inc. -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 3, or (at your option) -+ any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software Foundation, -+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -+ -+/* written by Jim Meyering */ -+ -+#include -+ -+#include -+ -+#include -+#include -+#include -+ -+/* FIXME: remove this once there is an errno-gnu module -+ that guarantees the definition of ENODATA. */ -+#ifndef ENODATA -+# define ENODATA ENOTSUP -+#endif -+ -+#undef getfilecon -+#undef lgetfilecon -+#undef fgetfilecon -+int getfilecon (char const *file, security_context_t *con); -+int lgetfilecon (char const *file, security_context_t *con); -+int fgetfilecon (int fd, security_context_t *con); -+ -+/* getfilecon, lgetfilecon, and fgetfilecon can all misbehave, be it -+ via an old version of libselinux where these would return 0 and set the -+ result context to NULL, or via a modern kernel+lib operating on a file -+ from a disk whose attributes were set by a kernel from around 2006. -+ In that latter case, the functions return a length of 10 for the -+ "unlabeled" context. Map both failures to a return value of -1, and -+ set errno to ENOTSUP in the first case, and ENODATA in the latter. */ -+ -+static inline int -+map_to_failure (int ret, security_context_t *con) -+{ -+ if (ret == 0) -+ { -+ errno = ENOTSUP; -+ return -1; -+ } -+ -+ if (ret == 10 && strcmp (*con, "unlabeled") == 0) -+ { -+ freecon (*con); -+ errno = ENODATA; -+ return -1; -+ } -+ -+ return ret; -+} -+ -+int -+rpl_getfilecon (char const *file, security_context_t *con) -+{ -+ int ret = getfilecon (file, con); -+ return map_to_failure (ret, con); -+} -+ -+int -+rpl_lgetfilecon (char const *file, security_context_t *con) -+{ -+ int ret = lgetfilecon (file, con); -+ return map_to_failure (ret, con); -+} -+ -+int -+rpl_fgetfilecon (int fd, security_context_t *con) -+{ -+ int ret = fgetfilecon (fd, con); -+ return map_to_failure (ret, con); -+} -diff --git a/gnulib/lib/openat.c b/gnulib/lib/openat.c -index 73f24b0..2b15bb5 100644 ---- a/gnulib/lib/openat.c -+++ b/gnulib/lib/openat.c -@@ -1,5 +1,5 @@ - /* provide a replacement openat function -- Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. -+ Copyright (C) 2004-2009 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by -@@ -22,13 +22,108 @@ - - #include - #include -+#include -+#include - - #include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ --#include "fcntl--.h" --#include "lstat.h" - #include "openat-priv.h" - #include "save-cwd.h" - -+#if HAVE_OPENAT -+ -+# undef openat -+ -+/* Like openat, but work around Solaris 9 bugs with trailing slash. */ -+int -+rpl_openat (int dfd, char const *filename, int flags, ...) -+{ -+ mode_t mode; -+ int fd; -+ -+ mode = 0; -+ if (flags & O_CREAT) -+ { -+ va_list arg; -+ va_start (arg, flags); -+ -+ /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 -+ creates crashing code when 'mode_t' is smaller than 'int'. */ -+ mode = va_arg (arg, PROMOTED_MODE_T); -+ -+ va_end (arg); -+ } -+ -+#if OPEN_TRAILING_SLASH_BUG -+ /* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR -+ is specified, then fail. -+ Rationale: POSIX -+ says that -+ "A pathname that contains at least one non-slash character and that -+ ends with one or more trailing slashes shall be resolved as if a -+ single dot character ( '.' ) were appended to the pathname." -+ and -+ "The special filename dot shall refer to the directory specified by -+ its predecessor." -+ If the named file already exists as a directory, then -+ - if O_CREAT is specified, open() must fail because of the semantics -+ of O_CREAT, -+ - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX -+ says that it -+ fails with errno = EISDIR in this case. -+ If the named file does not exist or does not name a directory, then -+ - if O_CREAT is specified, open() must fail since open() cannot create -+ directories, -+ - if O_WRONLY or O_RDWR is specified, open() must fail because the -+ file does not contain a '.' directory. */ -+ if (flags & (O_CREAT | O_WRONLY | O_RDWR)) -+ { -+ size_t len = strlen (filename); -+ if (len > 0 && filename[len - 1] == '/') -+ { -+ errno = EISDIR; -+ return -1; -+ } -+ } -+#endif -+ -+ fd = openat (dfd, filename, flags, mode); -+ -+#if OPEN_TRAILING_SLASH_BUG -+ /* If the filename ends in a slash and fd does not refer to a directory, -+ then fail. -+ Rationale: POSIX -+ says that -+ "A pathname that contains at least one non-slash character and that -+ ends with one or more trailing slashes shall be resolved as if a -+ single dot character ( '.' ) were appended to the pathname." -+ and -+ "The special filename dot shall refer to the directory specified by -+ its predecessor." -+ If the named file without the slash is not a directory, open() must fail -+ with ENOTDIR. */ -+ if (fd >= 0) -+ { -+ /* We know len is positive, since open did not fail with ENOENT. */ -+ size_t len = strlen (filename); -+ if (filename[len - 1] == '/') -+ { -+ struct stat statbuf; -+ -+ if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) -+ { -+ close (fd); -+ errno = ENOTDIR; -+ return -1; -+ } -+ } -+ } -+#endif -+ -+ return fd; -+} -+ -+#else /* !HAVE_OPENAT */ -+ - /* Replacement for Solaris' openat function. - - First, try to simulate it via open ("/proc/self/fd/FD/FILE"). -@@ -47,12 +142,9 @@ openat (int fd, char const *file, int flags, ...) - va_list arg; - va_start (arg, flags); - -- /* If mode_t is narrower than int, use the promoted type (int), -- not mode_t. Use sizeof to guess whether mode_t is narrower; -- we don't know of any practical counterexamples. */ -- mode = (sizeof (mode_t) < sizeof (int) -- ? va_arg (arg, int) -- : va_arg (arg, mode_t)); -+ /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 -+ creates crashing code when 'mode_t' is smaller than 'int'. */ -+ mode = va_arg (arg, PROMOTED_MODE_T); - - va_end (arg); - } -@@ -73,7 +165,7 @@ openat (int fd, char const *file, int flags, ...) - - int - openat_permissive (int fd, char const *file, int flags, mode_t mode, -- int *cwd_errno) -+ int *cwd_errno) - { - struct saved_cwd saved_cwd; - int saved_errno; -@@ -88,18 +180,18 @@ openat_permissive (int fd, char const *file, int flags, mode_t mode, - char *proc_file = openat_proc_name (buf, fd, file); - if (proc_file) - { -- int open_result = open (proc_file, flags, mode); -- int open_errno = errno; -- if (proc_file != buf) -- free (proc_file); -- /* If the syscall succeeds, or if it fails with an unexpected -- errno value, then return right away. Otherwise, fall through -- and resort to using save_cwd/restore_cwd. */ -- if (0 <= open_result || ! EXPECTED_ERRNO (open_errno)) -- { -- errno = open_errno; -- return open_result; -- } -+ int open_result = open (proc_file, flags, mode); -+ int open_errno = errno; -+ if (proc_file != buf) -+ free (proc_file); -+ /* If the syscall succeeds, or if it fails with an unexpected -+ errno value, then return right away. Otherwise, fall through -+ and resort to using save_cwd/restore_cwd. */ -+ if (0 <= open_result || ! EXPECTED_ERRNO (open_errno)) -+ { -+ errno = open_errno; -+ return open_result; -+ } - } - } - -@@ -107,9 +199,18 @@ openat_permissive (int fd, char const *file, int flags, mode_t mode, - if (! save_ok) - { - if (! cwd_errno) -- openat_save_fail (errno); -+ openat_save_fail (errno); - *cwd_errno = errno; - } -+ if (0 <= fd && fd == saved_cwd.desc) -+ { -+ /* If saving the working directory collides with the user's -+ requested fd, then the user's fd must have been closed to -+ begin with. */ -+ free_cwd (&saved_cwd); -+ errno = EBADF; -+ return -1; -+ } - - err = fchdir (fd); - saved_errno = errno; -@@ -119,11 +220,17 @@ openat_permissive (int fd, char const *file, int flags, mode_t mode, - err = open (file, flags, mode); - saved_errno = errno; - if (save_ok && restore_cwd (&saved_cwd) != 0) -- { -- if (! cwd_errno) -- openat_restore_fail (errno); -- *cwd_errno = errno; -- } -+ { -+ if (! cwd_errno) -+ { -+ /* Don't write a message to just-created fd 2. */ -+ saved_errno = errno; -+ if (err == STDERR_FILENO) -+ close (err); -+ openat_restore_fail (saved_errno); -+ } -+ *cwd_errno = errno; -+ } - } - - free_cwd (&saved_cwd); -@@ -144,125 +251,15 @@ openat_needs_fchdir (void) - char buf[OPENAT_BUFFER_SIZE]; - char *proc_file = openat_proc_name (buf, fd, "."); - if (proc_file) -- { -- needs_fchdir = false; -- if (proc_file != buf) -- free (proc_file); -- } -+ { -+ needs_fchdir = false; -+ if (proc_file != buf) -+ free (proc_file); -+ } - close (fd); - } - - return needs_fchdir; - } - --#if !HAVE_FDOPENDIR -- --/* Replacement for Solaris' function by the same name. -- -- First, try to simulate it via opendir ("/proc/self/fd/FD"). Failing -- that, simulate it by doing save_cwd/fchdir/opendir(".")/restore_cwd. -- If either the save_cwd or the restore_cwd fails (relatively unlikely), -- then give a diagnostic and exit nonzero. -- Otherwise, this function works just like Solaris' fdopendir. -- -- W A R N I N G: -- Unlike the other fd-related functions here, this one -- effectively consumes its FD parameter. The caller should not -- close or otherwise manipulate FD if this function returns successfully. */ --DIR * --fdopendir (int fd) --{ -- struct saved_cwd saved_cwd; -- int saved_errno; -- DIR *dir; -- -- char buf[OPENAT_BUFFER_SIZE]; -- char *proc_file = openat_proc_name (buf, fd, "."); -- if (proc_file) -- { -- dir = opendir (proc_file); -- saved_errno = errno; -- } -- else -- { -- dir = NULL; -- saved_errno = EOPNOTSUPP; -- } -- -- /* If the syscall fails with an expected errno value, resort to -- save_cwd/restore_cwd. */ -- if (! dir && EXPECTED_ERRNO (saved_errno)) -- { -- if (save_cwd (&saved_cwd) != 0) -- openat_save_fail (errno); -- -- if (fchdir (fd) != 0) -- { -- dir = NULL; -- saved_errno = errno; -- } -- else -- { -- dir = opendir ("."); -- saved_errno = errno; -- -- if (restore_cwd (&saved_cwd) != 0) -- openat_restore_fail (errno); -- } -- -- free_cwd (&saved_cwd); -- } -- -- if (dir) -- close (fd); -- if (proc_file != buf) -- free (proc_file); -- errno = saved_errno; -- return dir; --} -- --#endif -- --/* Replacement for Solaris' function by the same name. -- -- First, try to simulate it via l?stat ("/proc/self/fd/FD/FILE"). -- Failing that, simulate it via save_cwd/fchdir/(stat|lstat)/restore_cwd. -- If either the save_cwd or the restore_cwd fails (relatively unlikely), -- then give a diagnostic and exit nonzero. -- Otherwise, this function works just like Solaris' fstatat. */ -- --#define AT_FUNC_NAME fstatat --#define AT_FUNC_F1 lstat --#define AT_FUNC_F2 stat --#define AT_FUNC_USE_F1_COND flag == AT_SYMLINK_NOFOLLOW --#define AT_FUNC_POST_FILE_PARAM_DECLS , struct stat *st, int flag --#define AT_FUNC_POST_FILE_ARGS , st --#include "at-func.c" --#undef AT_FUNC_NAME --#undef AT_FUNC_F1 --#undef AT_FUNC_F2 --#undef AT_FUNC_USE_F1_COND --#undef AT_FUNC_POST_FILE_PARAM_DECLS --#undef AT_FUNC_POST_FILE_ARGS -- --/* Replacement for Solaris' function by the same name. -- -- First, try to simulate it via (unlink|rmdir) ("/proc/self/fd/FD/FILE"). -- Failing that, simulate it via save_cwd/fchdir/(unlink|rmdir)/restore_cwd. -- If either the save_cwd or the restore_cwd fails (relatively unlikely), -- then give a diagnostic and exit nonzero. -- Otherwise, this function works just like Solaris' unlinkat. */ -- --#define AT_FUNC_NAME unlinkat --#define AT_FUNC_F1 rmdir --#define AT_FUNC_F2 unlink --#define AT_FUNC_USE_F1_COND flag == AT_REMOVEDIR --#define AT_FUNC_POST_FILE_PARAM_DECLS , int flag --#define AT_FUNC_POST_FILE_ARGS /* empty */ --#include "at-func.c" --#undef AT_FUNC_NAME --#undef AT_FUNC_F1 --#undef AT_FUNC_F2 --#undef AT_FUNC_USE_F1_COND --#undef AT_FUNC_POST_FILE_PARAM_DECLS --#undef AT_FUNC_POST_FILE_ARGS -+#endif /* !HAVE_OPENAT */ -diff --git a/gnulib/lib/openat.h b/gnulib/lib/openat.h -index b5e4f11..433b998 100644 ---- a/gnulib/lib/openat.h -+++ b/gnulib/lib/openat.h -@@ -1,5 +1,5 @@ - /* provide a replacement openat function -- Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. -+ Copyright (C) 2004-2006, 2008-2009 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by -@@ -16,6 +16,9 @@ - - /* written by Jim Meyering */ - -+#ifndef _GL_HEADER_OPENAT -+#define _GL_HEADER_OPENAT -+ - #include - - #include -@@ -25,7 +28,7 @@ - #include - - #ifndef __attribute__ --# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__ -+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) - # define __attribute__(x) /* empty */ - # endif - #endif -@@ -34,46 +37,10 @@ - # define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) - #endif - --/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its -- value exceeds INT_MAX, so its use as an int doesn't conform to the -- C standard, and GCC and Sun C complain in some cases. If the bug -- is present, undef AT_FDCWD here, so it can be redefined below. */ --#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 --# undef AT_FDCWD --#endif -- --/* Use the same bit pattern as Solaris 9, but with the proper -- signedness. The bit pattern is important, in case this actually is -- Solaris with the above workaround. */ --#ifndef AT_FDCWD --# define AT_FDCWD (-3041965) --#endif -- --/* Use the same values as Solaris 9. This shouldn't matter, but -- there's no real reason to differ. */ --#ifndef AT_SYMLINK_NOFOLLOW --# define AT_SYMLINK_NOFOLLOW 4096 --# define AT_REMOVEDIR 1 --#endif -- --#ifdef __OPENAT_PREFIX -+#if !HAVE_OPENAT - --# undef openat --# define __OPENAT_CONCAT(x, y) x ## y --# define __OPENAT_XCONCAT(x, y) __OPENAT_CONCAT (x, y) --# define __OPENAT_ID(y) __OPENAT_XCONCAT (__OPENAT_PREFIX, y) --# define openat __OPENAT_ID (openat) --int openat (int fd, char const *file, int flags, /* mode_t mode */ ...); - int openat_permissive (int fd, char const *file, int flags, mode_t mode, - int *cwd_errno); --# if ! HAVE_FDOPENDIR --# define fdopendir __OPENAT_ID (fdopendir) --# endif --DIR *fdopendir (int fd); --# define fstatat __OPENAT_ID (fstatat) --int fstatat (int fd, char const *file, struct stat *st, int flag); --# define unlinkat __OPENAT_ID (unlinkat) --int unlinkat (int fd, char const *file, int flag); - bool openat_needs_fchdir (void); - - #else -@@ -84,19 +51,8 @@ bool openat_needs_fchdir (void); - - #endif - --#if HAVE_OPENAT && ! LSTAT_FOLLOWS_SLASHED_SYMLINK --int rpl_fstatat (int fd, char const *file, struct stat *st, int flag); --# if !COMPILING_FSTATAT --# undef fstatat --# define fstatat rpl_fstatat --# endif --#endif -- --int mkdirat (int fd, char const *file, mode_t mode); - void openat_restore_fail (int) ATTRIBUTE_NORETURN; - void openat_save_fail (int) ATTRIBUTE_NORETURN; --int fchmodat (int fd, char const *file, mode_t mode, int flag); --int fchownat (int fd, char const *file, uid_t owner, gid_t group, int flag); - - /* Using these function names makes application code - slightly more readable than it would be with -@@ -124,3 +80,35 @@ lchmodat (int fd, char const *file, mode_t mode) - { - return fchmodat (fd, file, mode, AT_SYMLINK_NOFOLLOW); - } -+ -+static inline int -+statat (int fd, char const *name, struct stat *st) -+{ -+ return fstatat (fd, name, st, 0); -+} -+ -+static inline int -+lstatat (int fd, char const *name, struct stat *st) -+{ -+ return fstatat (fd, name, st, AT_SYMLINK_NOFOLLOW); -+} -+ -+#if GNULIB_FACCESSAT -+/* For now, there are no wrappers named laccessat or leuidaccessat, -+ since gnulib doesn't support faccessat(,AT_SYMLINK_NOFOLLOW) and -+ since access rights on symlinks are of limited utility. */ -+ -+static inline int -+accessat (int fd, char const *file, int mode) -+{ -+ return faccessat (fd, file, mode, 0); -+} -+ -+static inline int -+euidaccessat (int fd, char const *file, int mode) -+{ -+ return faccessat (fd, file, mode, AT_EACCESS); -+} -+#endif -+ -+#endif /* _GL_HEADER_OPENAT */ -diff --git a/gnulib/lib/se-selinux.in.h b/gnulib/lib/se-selinux.in.h -new file mode 100644 -index 0000000..3f30a3c ---- /dev/null -+++ b/gnulib/lib/se-selinux.in.h -@@ -0,0 +1,73 @@ -+#ifndef _GL_SELINUX_SELINUX_H -+# define _GL_SELINUX_SELINUX_H -+ -+# if __GNUC__ >= 3 -+#pragma GCC system_header -+# endif -+ -+# if HAVE_SELINUX_SELINUX_H -+ -+#@INCLUDE_NEXT@ @NEXT_SELINUX_SELINUX_H@ -+ -+# else -+ -+# include -+# include -+ -+typedef unsigned short security_class_t; -+# define security_context_t char* -+# define is_selinux_enabled() 0 -+ -+static inline int getcon (security_context_t *con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline void freecon (security_context_t con _UNUSED_PARAMETER_) {} -+ -+ -+static inline int getfscreatecon (security_context_t *con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline int setfscreatecon (security_context_t con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline int matchpathcon (char const *file _UNUSED_PARAMETER_, -+ mode_t m _UNUSED_PARAMETER_, -+ security_context_t *con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline int getfilecon (char const *file _UNUSED_PARAMETER_, -+ security_context_t *con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline int lgetfilecon (char const *file _UNUSED_PARAMETER_, -+ security_context_t *con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline int fgetfilecon (int fd, -+ security_context_t *con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline int setfilecon (char const *file _UNUSED_PARAMETER_, -+ security_context_t con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline int lsetfilecon (char const *file _UNUSED_PARAMETER_, -+ security_context_t con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline int fsetfilecon (int fd _UNUSED_PARAMETER_, -+ security_context_t con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+ -+static inline int security_check_context -+ (security_context_t con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline int security_check_context_raw -+ (security_context_t con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline int setexeccon (security_context_t con _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline int security_compute_create -+ (security_context_t scon _UNUSED_PARAMETER_, -+ security_context_t tcon _UNUSED_PARAMETER_, -+ security_class_t tclass _UNUSED_PARAMETER_, -+ security_context_t *newcon _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+static inline int matchpathcon_init_prefix -+ (char const *path _UNUSED_PARAMETER_, -+ char const *prefix _UNUSED_PARAMETER_) -+ { errno = ENOTSUP; return -1; } -+ -+# endif -+#endif /* _GL_SELINUX_SELINUX_H */ -diff --git a/gnulib/lib/selinux-at.c b/gnulib/lib/selinux-at.c -new file mode 100644 -index 0000000..65f938b ---- /dev/null -+++ b/gnulib/lib/selinux-at.c -@@ -0,0 +1,72 @@ -+/* openat-style fd-relative functions for SE Linux -+ Copyright (C) 2007, 2009 Free Software Foundation, Inc. -+ -+ This program is free software: you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program. If not, see . */ -+ -+/* written by Jim Meyering */ -+ -+#include -+ -+#include "selinux-at.h" -+#include "openat.h" -+ -+#include -+#include -+#include -+#include -+ -+#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ -+#include "save-cwd.h" -+ -+#include "openat-priv.h" -+ -+#define AT_FUNC_NAME getfileconat -+#define AT_FUNC_F1 getfilecon -+#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t *con -+#define AT_FUNC_POST_FILE_ARGS , con -+#include "at-func.c" -+#undef AT_FUNC_NAME -+#undef AT_FUNC_F1 -+#undef AT_FUNC_POST_FILE_PARAM_DECLS -+#undef AT_FUNC_POST_FILE_ARGS -+ -+#define AT_FUNC_NAME lgetfileconat -+#define AT_FUNC_F1 lgetfilecon -+#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t *con -+#define AT_FUNC_POST_FILE_ARGS , con -+#include "at-func.c" -+#undef AT_FUNC_NAME -+#undef AT_FUNC_F1 -+#undef AT_FUNC_POST_FILE_PARAM_DECLS -+#undef AT_FUNC_POST_FILE_ARGS -+ -+#define AT_FUNC_NAME setfileconat -+#define AT_FUNC_F1 setfilecon -+#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t con -+#define AT_FUNC_POST_FILE_ARGS , con -+#include "at-func.c" -+#undef AT_FUNC_NAME -+#undef AT_FUNC_F1 -+#undef AT_FUNC_POST_FILE_PARAM_DECLS -+#undef AT_FUNC_POST_FILE_ARGS -+ -+#define AT_FUNC_NAME lsetfileconat -+#define AT_FUNC_F1 lsetfilecon -+#define AT_FUNC_POST_FILE_PARAM_DECLS , security_context_t con -+#define AT_FUNC_POST_FILE_ARGS , con -+#include "at-func.c" -+#undef AT_FUNC_NAME -+#undef AT_FUNC_F1 -+#undef AT_FUNC_POST_FILE_PARAM_DECLS -+#undef AT_FUNC_POST_FILE_ARGS -diff --git a/gnulib/lib/selinux-at.h b/gnulib/lib/selinux-at.h -new file mode 100644 -index 0000000..1d84c19 ---- /dev/null -+++ b/gnulib/lib/selinux-at.h -@@ -0,0 +1,52 @@ -+/* Prototypes for openat-style fd-relative SELinux functions -+ Copyright (C) 2007, 2009 Free Software Foundation, Inc. -+ -+ This program is free software: you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation, either version 3 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program. If not, see . */ -+ -+#include -+#include -+ -+/* These are the dir-fd-relative variants of the functions without the -+ "at" suffix. For example, getfileconat (AT_FDCWD, file, &c) is usually -+ equivalent to getfilecon (file, &c). The emulation is accomplished -+ by first attempting getfilecon ("/proc/self/fd/DIR_FD/FILE", &c). -+ Failing that, simulate it via save_cwd/fchdir/getfilecon/restore_cwd. -+ If either the save_cwd or the restore_cwd fails (relatively unlikely), -+ then give a diagnostic and exit nonzero. */ -+ -+/* dir-fd-relative getfilecon. Set *CON to the SELinux security context -+ of the file specified by DIR_FD and FILE and return the length of *CON. -+ DIR_FD and FILE are interpreted as for fstatat[*]. A non-NULL *CON -+ must be freed with freecon. Upon error, set *CON to NULL, set errno -+ and return -1. -+ [*] with flags=0 here, with flags=AT_SYMLINK_NOFOLLOW for lgetfileconat */ -+int getfileconat (int dir_fd, char const *file, security_context_t *con); -+ -+/* dir-fd-relative lgetfilecon. This function is just like getfileconat, -+ except when DIR_FD and FILE specify a symlink: lgetfileconat operates on -+ the symlink, while getfileconat operates on the referent of the symlink. */ -+int lgetfileconat (int dir_fd, char const *file, security_context_t *con); -+ -+/* dir-fd-relative setfilecon. Set the SELinux security context of -+ the file specified by DIR_FD and FILE to CON. DIR_FD and FILE are -+ interpreted as for fstatat[*]. Upon success, return 0. -+ Otherwise, return -1 and set errno. */ -+int setfileconat (int dir_fd, char const *file, security_context_t con); -+ -+/* dir-fd-relative lsetfilecon. This function is just like setfileconat, -+ except that rather than dereferencing a symlink, this function affects it. */ -+/* dir-fd-relative lsetfilecon. This function is just like setfileconat, -+ except when DIR_FD and FILE specify a symlink: lsetfileconat operates on -+ the symlink, while setfileconat operates on the referent of the symlink. */ -+int lsetfileconat (int dir_fd, char const *file, security_context_t con); -diff --git a/gnulib/m4/gnulib-comp.m4 b/gnulib/m4/gnulib-comp.m4 -index 1efe223..87f11dd 100644 ---- a/gnulib/m4/gnulib-comp.m4 -+++ b/gnulib/m4/gnulib-comp.m4 -@@ -165,6 +165,11 @@ AC_DEFUN([gl_INIT], - gl_SAME - gl_SAVE_CWD - gl_SAVEDIR -+ AC_CHECK_HEADERS([selinux/flask.h]) -+ AC_LIBOBJ([selinux-at]) -+ gl_HEADERS_SELINUX_SELINUX_H -+ gl_HEADERS_SELINUX_CONTEXT_H -+ AC_REQUIRE([AC_C_INLINE]) - gl_FUNC_SETENV - gl_FUNC_UNSETENV - gt_TYPE_SSIZE_T -@@ -425,6 +430,7 @@ AC_DEFUN([gl_FILE_LIST], [ - lib/getdate.h - lib/getdate.y - lib/getdelim.c -+ lib/getfilecon.c - lib/getline.c - lib/getopt.c - lib/getopt.in.h -@@ -506,6 +512,10 @@ AC_DEFUN([gl_FILE_LIST], [ - lib/save-cwd.h - lib/savedir.c - lib/savedir.h -+ lib/se-context.in.h -+ lib/se-selinux.in.h -+ lib/selinux-at.c -+ lib/selinux-at.h - lib/setenv.c - lib/setenv.h - lib/stat-macros.h -@@ -688,6 +698,8 @@ AC_DEFUN([gl_FILE_LIST], [ - m4/same.m4 - m4/save-cwd.m4 - m4/savedir.m4 -+ m4/selinux-context-h.m4 -+ m4/selinux-selinux-h.m4 - m4/setenv.m4 - m4/size_max.m4 - m4/ssize_t.m4 -diff --git a/gnulib/m4/selinux-context-h.m4 b/gnulib/m4/selinux-context-h.m4 -new file mode 100644 -index 0000000..6b0bed1 ---- /dev/null -+++ b/gnulib/m4/selinux-context-h.m4 -@@ -0,0 +1,16 @@ -+# serial 1 -*- Autoconf -*- -+# Copyright (C) 2006, 2007 Free Software Foundation, Inc. -+# This file is free software; the Free Software Foundation -+# gives unlimited permission to copy and/or distribute it, -+# with or without modifications, as long as this notice is preserved. -+ -+# From Jim Meyering -+# Provide , if necessary. -+ -+AC_DEFUN([gl_HEADERS_SELINUX_CONTEXT_H], -+[ -+ AC_CHECK_HEADERS([selinux/context.h], -+ [SELINUX_CONTEXT_H=], -+ [SELINUX_CONTEXT_H=selinux/context.h]) -+ AC_SUBST([SELINUX_CONTEXT_H]) -+]) -diff --git a/gnulib/m4/selinux-selinux-h.m4 b/gnulib/m4/selinux-selinux-h.m4 -new file mode 100644 -index 0000000..767c4f7 ---- /dev/null -+++ b/gnulib/m4/selinux-selinux-h.m4 -@@ -0,0 +1,57 @@ -+# serial 3 -*- Autoconf -*- -+# Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. -+# This file is free software; the Free Software Foundation -+# gives unlimited permission to copy and/or distribute it, -+# with or without modifications, as long as this notice is preserved. -+ -+# From Jim Meyering -+# Provide , if necessary. -+# If it is already present, provide wrapper functions to guard against -+# misbehavior from getfilecon, lgetfilecon, and fgetfilecon. -+ -+AC_DEFUN([gl_HEADERS_SELINUX_SELINUX_H], -+[ -+ AC_REQUIRE([gl_LIBSELINUX]) -+ AC_CHECK_HEADERS([selinux/selinux.h]) -+ -+ if test "$ac_cv_header_selinux_selinux_h" = yes; then -+ # We do have , so do compile getfilecon.c -+ # and arrange to use its wrappers. -+ AC_LIBOBJ([getfilecon]) -+ gl_CHECK_NEXT_HEADERS([selinux/selinux.h]) -+ AC_DEFINE([getfilecon], [rpl_getfilecon], -+ [Always use our getfilecon wrapper.]) -+ AC_DEFINE([lgetfilecon], [rpl_lgetfilecon], -+ [Always use our lgetfilecon wrapper.]) -+ AC_DEFINE([fgetfilecon], [rpl_fgetfilecon], -+ [Always use our fgetfilecon wrapper.]) -+ fi -+ -+ case "$ac_cv_search_setfilecon:$ac_cv_header_selinux_selinux_h" in -+ no:*) # already warned -+ ;; -+ *:no) -+ AC_MSG_WARN([libselinux was found but selinux/selinux.h is missing.]) -+ AC_MSG_WARN([AC_PACKAGE_NAME will be compiled without SELinux support.]) -+ esac -+]) -+ -+AC_DEFUN([gl_LIBSELINUX], -+[ -+ AC_REQUIRE([AC_CANONICAL_HOST]) -+ AC_REQUIRE([AC_CANONICAL_BUILD]) -+ LIB_SELINUX= -+ gl_save_LIBS=$LIBS -+ AC_SEARCH_LIBS([setfilecon], [selinux], -+ [test "$ac_cv_search_setfilecon" = "none required" || -+ LIB_SELINUX=$ac_cv_search_setfilecon]) -+ AC_SUBST([LIB_SELINUX]) -+ LIBS=$gl_save_LIBS -+ -+ # Warn if SELinux is found but libselinux is absent; -+ if test "$ac_cv_search_setfilecon" = no && -+ test "$host" = "$build" && test -d /selinux; then -+ AC_MSG_WARN([This system supports SELinux but libselinux is missing.]) -+ AC_MSG_WARN([AC_PACKAGE_NAME will be compiled without SELinux support.]) -+ fi -+]) diff --git a/findutils-4.4.2-selinux.patch b/findutils-4.4.2-selinux.patch deleted file mode 100644 index 559aef1..0000000 --- a/findutils-4.4.2-selinux.patch +++ /dev/null @@ -1,445 +0,0 @@ -diff --git a/NEWS b/NEWS -index d00862f..6b8b725 100644 ---- a/NEWS -+++ b/NEWS -@@ -1,5 +1,11 @@ - GNU findutils NEWS - User visible changes. -*- outline -*- (allout) - -+* Major changes in release 4.4.2, 2009-11-26 -+ -+** Functional Enhancements to find -+ -+patch #4848: Patch - Support for SELinux -+ - * Major changes in release 4.4.2, 2009-05-16 - - ** Bug Fixes -diff --git a/doc/find.texi b/doc/find.texi -index 8037c63..4d71066 100644 ---- a/doc/find.texi -+++ b/doc/find.texi -@@ -1241,6 +1241,14 @@ situation. - - @end deffn - -+@deffn Test -context pattern -+True if file's SELinux context matches the pattern @var{pattern}. -+The pattern uses shell glob matching. -+ -+This predicate is supported only on @code{find} versions compiled with -+SELinux support and only when SELinux is enabled. -+@end deffn -+ - @node Contents - @section Contents - -@@ -1736,6 +1744,7 @@ from the novel you are reading. - * Size Directives:: - * Location Directives:: - * Time Directives:: -+* Other Directives:: - * Formatting Flags:: - @end menu - -@@ -1893,6 +1902,14 @@ File's last modification time in the format specified by @var{k} - (@pxref{Time Formats}). - @end table - -+@node Other Directives -+@subsubsection Other Directives -+ -+@table @code -+@item %Z -+File's SELinux context, or empty string if the file has no SELinux context. -+@end table -+ - @node Time Formats - @subsection Time Formats - -diff --git a/find/Makefile.am b/find/Makefile.am -index b001509..6fc7df3 100644 ---- a/find/Makefile.am -+++ b/find/Makefile.am -@@ -26,7 +26,7 @@ endif - - EXTRA_DIST = defs.h $(man_MANS) - INCLUDES = -I../gnulib/lib -I$(top_srcdir)/lib -I$(top_srcdir)/gnulib/lib -I../intl -DLOCALEDIR=\"$(localedir)\" --LDADD = ./libfindtools.a ../lib/libfind.a ../gnulib/lib/libgnulib.a @INTLLIBS@ @LIB_CLOCK_GETTIME@ @FINDLIBS@ -+LDADD = ./libfindtools.a ../lib/libfind.a ../gnulib/lib/libgnulib.a @INTLLIBS@ @LIB_CLOCK_GETTIME@ @FINDLIBS@ @LIB_SELINUX@ - man_MANS = find.1 - SUBDIRS = . testsuite - -diff --git a/find/defs.h b/find/defs.h -index a0e7059..36d428d 100644 ---- a/find/defs.h -+++ b/find/defs.h -@@ -48,6 +48,7 @@ Please stop compiling the program now - #include /* for bool/boolean */ - #include /* for uintmax_t */ - #include /* S_ISUID etc. */ -+#include - - - -@@ -315,6 +316,7 @@ struct predicate - struct samefile_file_id samefileid; /* samefile */ - mode_t type; /* type */ - struct format_val printf_vec; /* printf fprintf fprint ls fls print0 fprint0 print */ -+ security_context_t scontext; /* security context */ - } args; - - /* The next predicate in the user input sequence, -@@ -459,6 +461,7 @@ PREDICATEFUNCTION pred_used; - PREDICATEFUNCTION pred_user; - PREDICATEFUNCTION pred_writable; - PREDICATEFUNCTION pred_xtype; -+PREDICATEFUNCTION pred_context; - - - -@@ -604,6 +607,9 @@ struct options - */ - int regex_options; - -+ /* function used to get file context */ -+ int (*x_getfilecon) (int, const char *, security_context_t *); -+ - /* Optimisation level. One is the default. - */ - unsigned short optimisation_level; -diff --git a/find/find.1 b/find/find.1 -index f9c61a3..27ad1da 100644 ---- a/find/find.1 -+++ b/find/find.1 -@@ -936,6 +936,8 @@ if \fIc\fR is `l'. In other words, for symbolic links, - checks the type of the file that - .B \-type - does not check. -+.IP "\-context \fIpattern\fR" -+(SELinux only) Security context of the file matches glob \fIpattern\fR. - - .SS ACTIONS - .IP "\-delete\fR" -@@ -1357,6 +1359,8 @@ File's type (like in - U=unknown type (shouldn't happen) - .IP %Y - File's type (like %y), plus follow symlinks: L=loop, N=nonexistent -+.IP %Z -+(SELinux only) file's security context. - .PP - A `%' character followed by any other character is discarded, but the - other character is printed (don't rely on this, as further format -diff --git a/find/parser.c b/find/parser.c -index 036ddb8..6b09eee 100644 ---- a/find/parser.c -+++ b/find/parser.c -@@ -53,6 +53,8 @@ - #include - #include - -+#include "selinux-at.h" -+ - #if ENABLE_NLS - # include - # define _(Text) gettext (Text) -@@ -156,6 +158,7 @@ static boolean parse_noignore_race PARAMS((const struct parser_table*, char *arg - static boolean parse_warn PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); - static boolean parse_xtype PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); - static boolean parse_quit PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); -+static boolean parse_context PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); - - boolean parse_print PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); - -@@ -252,6 +255,7 @@ static struct parser_table const parse_table[] = - PARSE_TEST ("cmin", cmin), /* GNU */ - PARSE_TEST ("cnewer", cnewer), /* GNU */ - {ARG_TEST, "ctime", parse_time, pred_ctime}, /* POSIX */ -+ PARSE_TEST ("context", context), /* GNU */ - PARSE_POSOPT ("daystart", daystart), /* GNU */ - PARSE_ACTION ("delete", delete), /* GNU, Mac OS, FreeBSD */ - PARSE_OPTION ("d", d), /* Mac OS X, FreeBSD, NetBSD, OpenBSD, but deprecated in favour of -depth */ -@@ -349,6 +353,86 @@ static struct parser_table const parse_table[] = - static const char *first_nonoption_arg = NULL; - static const struct parser_table *noop = NULL; - -+static int -+fallback_getfilecon (int fd, const char *name, security_context_t *p, -+ int prev_rv) -+{ -+ /* Our original getfilecon () call failed. Perhaps we can't follow a -+ * symbolic link. If that might be the problem, lgetfilecon () the link. -+ * Otherwise, admit defeat. */ -+ switch (errno) -+ { -+ case ENOENT: -+ case ENOTDIR: -+#ifdef DEBUG_STAT -+ fprintf (stderr, "fallback_getfilecon(): getfilecon(%s) failed; falling " -+ "back on lgetfilecon()\n", name); -+#endif -+ return lgetfileconat (fd, name, p); -+ -+ case EACCES: -+ case EIO: -+ case ELOOP: -+ case ENAMETOOLONG: -+#ifdef EOVERFLOW -+ case EOVERFLOW: /* EOVERFLOW is not #defined on UNICOS. */ -+#endif -+ default: -+ return prev_rv; -+ } -+} -+ -+/* optionh_getfilecon () implements the getfilecon operation when the -+ * -H option is in effect. -+ * -+ * If the item to be examined is a command-line argument, we follow -+ * symbolic links. If the getfilecon () call fails on the command-line -+ * item, we fall back on the properties of the symbolic link. -+ * -+ * If the item to be examined is not a command-line argument, we -+ * examine the link itself. */ -+int -+optionh_getfilecon (int fd, const char *name, security_context_t *p) -+{ -+ int rv; -+ if (0 == state.curdepth) -+ { -+ /* This file is from the command line; dereference the link (if it is -+ a link). */ -+ rv = getfileconat (fd, name, p); -+ if (0 == rv) -+ return 0; /* success */ -+ else -+ return fallback_getfilecon (fd, name, p, rv); -+ } -+ else -+ { -+ /* Not a file on the command line; do not dereference the link. */ -+ return lgetfileconat (fd, name, p); -+ } -+} -+ -+/* optionl_getfilecon () implements the getfilecon operation when the -+ * -L option is in effect. That option makes us examine the thing the -+ * symbolic link points to, not the symbolic link itself. */ -+int -+optionl_getfilecon (int fd, const char *name, security_context_t *p) -+{ -+ int rv = getfileconat (fd, name, p); -+ if (0 == rv) -+ return 0; /* normal case. */ -+ else -+ return fallback_getfilecon (fd, name, p, rv); -+} -+ -+/* optionp_getfilecon () implements the stat operation when the -P -+ * option is in effect (this is also the default). That option makes -+ * us examine the symbolic link itself, not the thing it points to. */ -+int -+optionp_getfilecon (int fd, const char *name, security_context_t *p) -+{ -+ return lgetfileconat (fd, name, p); -+} - - void - check_option_combinations(const struct predicate *p) -@@ -452,11 +536,13 @@ set_follow_state(enum SymlinkOption opt) - { - case SYMLINK_ALWAYS_DEREF: /* -L */ - options.xstat = optionl_stat; -+ options.x_getfilecon = optionl_getfilecon; - options.no_leaf_check = true; - break; - - case SYMLINK_NEVER_DEREF: /* -P (default) */ - options.xstat = optionp_stat; -+ options.x_getfilecon = optionp_getfilecon; - /* Can't turn no_leaf_check off because the user might have specified - * -noleaf anyway - */ -@@ -464,6 +550,7 @@ set_follow_state(enum SymlinkOption opt) - - case SYMLINK_DEREF_ARGSONLY: /* -H */ - options.xstat = optionh_stat; -+ options.x_getfilecon = optionh_getfilecon; - options.no_leaf_check = true; - } - } -@@ -1129,8 +1216,10 @@ tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n\ - -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n\ - -readable -writable -executable\n\ - -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n\ -- -used N -user NAME -xtype [bcdpfls]\n")); -+ -used N -user NAME -xtype [bcdpfls]")); - puts (_("\ -+ -context CONTEXT\n")); -+ puts (_("\n\ - actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n\ - -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n\ - -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;\n\ -@@ -2520,6 +2609,11 @@ parse_version (const struct parser_table* entry, char **argv, int *arg_ptr) - printf("LEAF_OPTIMISATION "); - ++features; - #endif -+ if (0 < is_selinux_enabled ()) -+ { -+ printf ("SELINUX "); -+ ++features; -+ } - - flags = 0; - if (is_fts_enabled(&flags)) -@@ -2555,6 +2649,31 @@ parse_version (const struct parser_table* entry, char **argv, int *arg_ptr) - } - - static boolean -+parse_context (const struct parser_table* entry, char **argv, int *arg_ptr) -+{ -+ struct predicate *our_pred; -+ -+ if ((argv == NULL) || (argv[*arg_ptr] == NULL)) -+ return false; -+ -+ if (is_selinux_enabled () <= 0) -+ { -+ error (1, 0, _("invalid predicate -context: SELinux is not enabled.")); -+ return false; -+ } -+ our_pred = insert_primary (entry); -+ our_pred->est_success_rate = 0.01f; -+ our_pred->need_stat = false; -+#ifdef DEBUG -+ our_pred->p_name = find_pred_name (pred_context); -+#endif /*DEBUG*/ -+ our_pred->args.scontext = argv[*arg_ptr]; -+ -+ (*arg_ptr)++; -+ return true; -+} -+ -+static boolean - parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr) - { - options.stay_on_filesystem = true; -@@ -2815,7 +2934,7 @@ insert_fprintf (struct format_val *vec, - if (*scan2 == '.') - for (scan2++; ISDIGIT (*scan2); scan2++) - /* Do nothing. */ ; -- if (strchr ("abcdDfFgGhHiklmMnpPsStuUyY", *scan2)) -+ if (strchr ("abcdDfFgGhHiklmMnpPsStuUyYZ", *scan2)) - { - segmentp = make_segment (segmentp, format, scan2 - format, - KIND_FORMAT, *scan2, 0, -@@ -2945,6 +3064,11 @@ make_segment (struct segment **segment, - *fmt++ = 's'; - break; - -+ case 'Z': /* SELinux security context */ -+ mycost = NeedsAccessInfo; -+ *fmt++ = 's'; -+ break; -+ - case 'H': /* ARGV element file was found under */ - *fmt++ = 's'; - break; -diff --git a/find/pred.c b/find/pred.c -index b1f48a0..7c34119 100644 ---- a/find/pred.c -+++ b/find/pred.c -@@ -48,6 +48,8 @@ - #include "error.h" - #include "verify.h" - -+#include -+ - #if ENABLE_NLS - # include - # define _(Text) gettext (Text) -@@ -230,6 +232,7 @@ struct pred_assoc pred_table[] = - {pred_user, "user "}, - {pred_writable, "writable "}, - {pred_xtype, "xtype "}, -+ {pred_context, "context"}, - {0, "none "} - }; - #endif -@@ -1054,6 +1057,30 @@ do_fprintf(struct format_val *dest, - mode_to_filetype(stat_buf->st_mode & S_IFMT)); - } - break; -+ -+ case 'Z': /* SELinux security context */ -+ { -+ security_context_t scontext; -+ int rv = (*options.x_getfilecon) (state.cwd_dir_fd, state.rel_pathname, -+ &scontext); -+ if (rv < 0) -+ { -+ /* If getfilecon fails, there will in the general case -+ still be some text to print. We just make %Z expand -+ to an empty string. */ -+ checked_fprintf (dest, segment->text, ""); -+ -+ error (0, errno, "getfilecon: %s", -+ safely_quote_err_filename (0, pathname)); -+ state.exit_status = 1; -+ } -+ else -+ { -+ checked_fprintf (dest, segment->text, scontext); -+ freecon (scontext); -+ } -+ } -+ break; - } - /* end of KIND_FORMAT case */ - break; -@@ -1844,6 +1871,26 @@ pred_xtype (const char *pathname, struct stat *stat_buf, struct predicate *pred_ - */ - return (pred_type (pathname, &sbuf, pred_ptr)); - } -+ -+ -+boolean -+pred_context (const char *pathname, struct stat *stat_buf, -+ struct predicate *pred_ptr) -+{ -+ security_context_t scontext; -+ int rv = (*options.x_getfilecon) (state.cwd_dir_fd, state.rel_pathname, -+ &scontext); -+ if (rv < 0) -+ { -+ error (0, errno, "getfilecon: %s", safely_quote_err_filename (0, pathname)); -+ return false; -+ } -+ -+ rv = (fnmatch (pred_ptr->args.scontext, scontext, 0) == 0); -+ freecon (scontext); -+ return rv; -+} -+ - - /* 1) fork to get a child; parent remembers the child pid - 2) child execs the command requested -diff --git a/find/tree.c b/find/tree.c -index 7420c60..ecdd4c9 100644 ---- a/find/tree.c -+++ b/find/tree.c -@@ -904,6 +904,7 @@ static struct pred_cost_lookup costlookup[] = - { pred_cmin , NeedsStatInfo, }, - { pred_cnewer , NeedsStatInfo, }, - { pred_comma , NeedsNothing, }, -+ { pred_context , NeedsAccessInfo }, - { pred_ctime , NeedsStatInfo, }, - { pred_delete , NeedsSyncDiskHit }, - { pred_empty , NeedsStatInfo }, -@@ -1434,6 +1435,7 @@ get_new_pred (const struct parser_table *entry) - last_pred->need_stat = true; - last_pred->need_type = true; - last_pred->args.str = NULL; -+ last_pred->args.scontext = NULL; - last_pred->pred_next = NULL; - last_pred->pred_left = NULL; - last_pred->pred_right = NULL; diff --git a/findutils-4.4.2-xautofs.patch b/findutils-4.4.2-xautofs.patch index 26a283e..23288ee 100644 --- a/findutils-4.4.2-xautofs.patch +++ b/findutils-4.4.2-xautofs.patch @@ -1,8 +1,8 @@ diff --git a/doc/find.texi b/doc/find.texi -index f1feba3..8037c63 100644 +index b509f66..3ce5b1e 100644 --- a/doc/find.texi +++ b/doc/find.texi -@@ -1412,6 +1412,10 @@ them. +@@ -1438,6 +1438,10 @@ them. There are two ways to avoid searching certain filesystems. One way is to tell @code{find} to only search one filesystem: @@ -14,24 +14,24 @@ index f1feba3..8037c63 100644 @deffnx Option -mount Don't descend directories on other filesystems. These options are diff --git a/find/defs.h b/find/defs.h -index 1708d83..a0e7059 100644 +index f344f97..4ade8f4 100644 --- a/find/defs.h +++ b/find/defs.h -@@ -550,6 +550,9 @@ struct options +@@ -562,6 +562,9 @@ struct options /* If true, don't cross filesystem boundaries. */ boolean stay_on_filesystem; - + + /* If true, don't descend directories on autofs filesystems. */ + boolean bypass_autofs; + - /* If true, we ignore the problem where we find that a directory entry + /* If true, we ignore the problem where we find that a directory entry * no longer exists by the time we get around to processing it. */ diff --git a/find/find.1 b/find/find.1 -index 8b67ae3..f9c61a3 100644 +index 5da6ddf..82dc802 100644 --- a/find/find.1 +++ b/find/find.1 -@@ -451,6 +451,9 @@ if standard input is a tty, and to +@@ -460,6 +460,9 @@ if standard input is a tty, and to .B \-nowarn otherwise. @@ -42,10 +42,10 @@ index 8b67ae3..f9c61a3 100644 Don't descend directories on other filesystems. diff --git a/find/ftsfind.c b/find/ftsfind.c -index b59d896..838b81f 100644 +index c3681f6..b3a08f9 100644 --- a/find/ftsfind.c +++ b/find/ftsfind.c -@@ -525,6 +525,12 @@ consider_visiting(FTS *p, FTSENT *ent) +@@ -524,6 +524,12 @@ consider_visiting (FTS *p, FTSENT *ent) } } @@ -57,12 +57,12 @@ index b59d896..838b81f 100644 + if ( (ent->fts_info == FTS_D) && !options.do_dir_first ) { - /* this is the preorder visit, but user said -depth */ + /* this is the preorder visit, but user said -depth */ diff --git a/find/parser.c b/find/parser.c -index 534b670..036ddb8 100644 +index 2ea3126..8238671 100644 --- a/find/parser.c +++ b/find/parser.c -@@ -150,6 +150,7 @@ static boolean parse_user PARAMS((const struct parser_table*, char *arg +@@ -153,6 +153,7 @@ static boolean parse_user PARAMS((const struct parser_table*, char *arg static boolean parse_version PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); static boolean parse_wholename PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); static boolean parse_xdev PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); @@ -70,7 +70,7 @@ index 534b670..036ddb8 100644 static boolean parse_ignore_race PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); static boolean parse_noignore_race PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); static boolean parse_warn PARAMS((const struct parser_table*, char *argv[], int *arg_ptr)); -@@ -320,6 +321,7 @@ static struct parser_table const parse_table[] = +@@ -325,6 +326,7 @@ static struct parser_table const parse_table[] = PARSE_TEST_NP ("wholename", wholename), /* GNU, replaced -path, but anyway -path will soon be in POSIX */ {ARG_TEST, "writable", parse_accesscheck, pred_writable}, /* GNU, 4.3.0+ */ PARSE_OPTION ("xdev", xdev), /* POSIX */ @@ -78,7 +78,7 @@ index 534b670..036ddb8 100644 PARSE_TEST ("xtype", xtype), /* GNU */ #ifdef UNIMPLEMENTED_UNIX /* It's pretty ugly for find to know about archive formats. -@@ -2560,6 +2562,16 @@ parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr) +@@ -2795,6 +2797,16 @@ parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr) } static boolean @@ -96,10 +96,10 @@ index 534b670..036ddb8 100644 { options.ignore_readdir_race = true; diff --git a/find/util.c b/find/util.c -index a06eada..d3cb467 100644 +index 11e8eed..3761a61 100644 --- a/find/util.c +++ b/find/util.c -@@ -933,6 +933,7 @@ set_option_defaults(struct options *p) +@@ -999,6 +999,7 @@ set_option_defaults (struct options *p) p->full_days = false; p->stay_on_filesystem = false; diff --git a/findutils-4.5.7-warnings.patch b/findutils-4.5.7-warnings.patch new file mode 100644 index 0000000..3913034 --- /dev/null +++ b/findutils-4.5.7-warnings.patch @@ -0,0 +1,40 @@ + find/pred.c | 2 +- + xargs/xargs.c | 5 +++-- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/find/pred.c b/find/pred.c +index 7df37b1..cb61ed2 100644 +--- a/find/pred.c ++++ b/find/pred.c +@@ -2045,7 +2045,7 @@ launch (struct buildcmd_control *ctl, void *usercontext, int argc, char **argv) + } + } + +- if (bc_args_exceed_testing_limit (argv)) ++ if (bc_args_exceed_testing_limit ((const char **) argv)) + errno = E2BIG; + else + execvp (argv[0], argv); +diff --git a/xargs/xargs.c b/xargs/xargs.c +index 4954256..bf48af5 100644 +--- a/xargs/xargs.c ++++ b/xargs/xargs.c +@@ -1117,7 +1117,7 @@ xargs_do_exec (struct buildcmd_control *ctl, void *usercontext, int argc, char * + + prep_child_for_exec (); + +- if (bc_args_exceed_testing_limit (argv)) ++ if (bc_args_exceed_testing_limit ((const char **) argv)) + errno = E2BIG; + else + execvp (argv[0], argv); +@@ -1135,7 +1135,8 @@ xargs_do_exec (struct buildcmd_control *ctl, void *usercontext, int argc, char * + * utility if we run it, for POSIX compliance on the + * handling of exit values. + */ +- write (fd[1], &errno, sizeof (int)); ++ int sink = write (fd[1], &errno, sizeof (int)); ++ (void) sink; + } + + close (fd[1]); diff --git a/findutils-4.5.7.tar.gz.sig b/findutils-4.5.7.tar.gz.sig new file mode 100644 index 0000000..5f4340b Binary files /dev/null and b/findutils-4.5.7.tar.gz.sig differ diff --git a/findutils.spec b/findutils.spec index 744a850..7f5570f 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,7 +1,7 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils -Version: 4.4.2 -Release: 6%{?dist} +Version: 4.5.7 +Release: 1%{?dist} Epoch: 1 License: GPLv3+ Group: Applications/File @@ -19,23 +19,17 @@ Patch2: findutils-4.4.2-autofs.patch # adds a new option -xautofs to find to not descend into directories on autofs file systems Patch3: findutils-4.4.2-xautofs.patch -# patch accepted by gnulib upstream - rhbz#538536 -Patch4: findutils-4.4.2-fts-remount.patch - -# gnulib based SELinux patch adding a new search predicate -context and -# a new -printf conversion %Z -Patch5: findutils-4.4.2-selinux.patch - -# once the selinux-at module appears on the list within import-gnulib.config -# the following patch will be no longer needed -Patch6: findutils-4.4.2-selinux-gnulib.patch +# eliminate compile-time warnings +Patch4: findutils-4.5.7-warnings.patch Requires(post): /sbin/install-info Requires(preun): /sbin/install-info Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -BuildRequires: libtool, automake, autoconf -BuildRequires: dejagnu, gettext-devel, texinfo +BuildRequires: automake +BuildRequires: dejagnu +BuildRequires: gettext-devel BuildRequires: libselinux-devel +BuildRequires: texinfo %description The findutils package contains programs which will help you locate @@ -54,9 +48,11 @@ useful for finding things on your system. %patch2 -p1 %patch3 -p1 %patch4 -p1 -%patch5 -p1 -%patch6 -p1 -autoreconf + +# needed because of findutils-4.4.0-no-locate.patch +aclocal -I gnulib/m4 -I m4 +automake +touch -c configure config.h %build %define optflags $RPM_OPT_FLAGS -D_GNU_SOURCE @@ -112,6 +108,10 @@ rm -rf $RPM_BUILD_ROOT %{_infodir}/find-maint.info.gz %changelog +* Sat Apr 03 2010 Kamil Dudka - 1:4.5.7-1 +- new upstream release, dropped applied patches +- eliminated compile-time warnings + * Thu Nov 26 2009 Kamil Dudka - 1:4.4.2-6 - update SELinux patch to the latest upstream (gnulib based) version diff --git a/sources b/sources index 1f091bc..86a0958 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -351cc4adb07d54877fa15f75fb77d39f findutils-4.4.2.tar.gz -36d8b8c7d6c6ff88e9d46eb2322873cc findutils-4.4.2.tar.gz.sig +abe3035556f2b95a83cd4a99d1614e37 findutils-4.5.7.tar.gz