From 8d0aab418f4a9f36a05d7e615db282de174744a1 Mon Sep 17 00:00:00 2001 From: Tim Waugh Date: Jan 31 2005 14:46:16 +0000 Subject: - 4.2.15. Lots of patches removed due to upstream merge. --- diff --git a/.cvsignore b/.cvsignore index 7f9c36b..ef7fb24 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1,2 @@ findutils-4.1.20.tar.gz +findutils-4.2.15.tar.gz diff --git a/findutils-no-locate.patch b/findutils-no-locate.patch index 4b2f2e4..ba81124 100644 --- a/findutils-no-locate.patch +++ b/findutils-no-locate.patch @@ -1,11 +1,22 @@ ---- findutils-4.1.20/Makefile.am.no-locate 2004-07-06 11:55:04.707097969 +0100 -+++ findutils-4.1.20/Makefile.am 2004-07-06 11:55:16.655815509 +0100 +--- findutils-4.2.15/Makefile.am.no-locate 2005-01-25 00:30:39.000000000 +0000 ++++ findutils-4.2.15/Makefile.am 2005-01-31 13:50:24.246315747 +0000 @@ -2,7 +2,7 @@ EXTRA_DIST = COPYING ChangeLog TODO install-sh config.h.in stamp-h.in \ - THANKS --SUBDIRS = gnulib lib intl find xargs locate doc po -+SUBDIRS = gnulib lib intl find xargs doc po + THANKS config.rpath +-SUBDIRS = gnulib lib find xargs locate doc po m4 ++SUBDIRS = gnulib lib find xargs doc po m4 - #ACLOCAL_AMFLAGS = + ACLOCAL_AMFLAGS = -I gnulib/m4 -I m4 +--- findutils-4.2.15/Makefile.in.no-locate 2005-01-31 13:50:39.130466141 +0000 ++++ findutils-4.2.15/Makefile.in 2005-01-31 13:50:47.220917226 +0000 +@@ -260,7 +260,7 @@ + EXTRA_DIST = COPYING ChangeLog TODO install-sh config.h.in stamp-h.in \ + THANKS config.rpath + +-SUBDIRS = gnulib lib find xargs locate doc po m4 ++SUBDIRS = gnulib lib find xargs doc po m4 + ACLOCAL_AMFLAGS = -I gnulib/m4 -I m4 + CONFIG_CLEAN_FILES = gnulib/lib/regex.c + all: config.h diff --git a/findutils-selinux.patch b/findutils-selinux.patch index d15f759..85564fd 100644 --- a/findutils-selinux.patch +++ b/findutils-selinux.patch @@ -1,8 +1,8 @@ ---- findutils-4.1.20/find/util.c.selinux 2005-01-04 16:42:22.801468914 -0500 -+++ findutils-4.1.20/find/util.c 2005-01-04 16:42:23.006445691 -0500 -@@ -67,6 +67,9 @@ - last_pred->no_default_print = false; - last_pred->need_stat = PRED_NEED_STAT; +--- findutils-4.2.15/find/util.c.selinux 2005-01-23 18:04:45.000000000 +0000 ++++ findutils-4.2.15/find/util.c 2005-01-31 13:57:16.155474378 +0000 +@@ -70,6 +70,9 @@ + last_pred->need_stat = true; + last_pred->need_type = true; last_pred->args.str = NULL; +#ifdef WITH_SELINUX + last_pred->args.scontext = NULL; @@ -10,30 +10,141 @@ last_pred->pred_next = NULL; last_pred->pred_left = NULL; last_pred->pred_right = NULL; ---- findutils-4.1.20/find/find.c.selinux 2005-01-04 16:42:22.800469028 -0500 -+++ findutils-4.1.20/find/find.c 2005-01-04 16:42:22.997446710 -0500 -@@ -154,6 +154,9 @@ - - /* Pointer to the function used to stat files. */ - int (*xstat) (); +--- findutils-4.2.15/find/find.c.selinux 2005-01-25 00:30:40.000000000 +0000 ++++ findutils-4.2.15/find/find.c 2005-01-31 14:02:01.060964738 +0000 +@@ -217,6 +217,93 @@ + { + return lstat(name, p); + } +#ifdef WITH_SELINUX -+int (*x_getfilecon) (); ++ ++static int ++fallback_getfilecon(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 lgetfilecon(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(const char *name, security_context_t *p) ++{ ++ if (0 == state.curdepth) ++ { ++ /* This file is from the command line; deference the link (if it ++ * is a link). ++ */ ++ int rv = getfilecon(name, p); ++ if (0 == rv) ++ return 0; /* success */ ++ else ++ return fallback_getfilecon(name, p, rv); ++ } ++ else ++ { ++ /* Not a file on the command line; do not derefernce the link. ++ */ ++ return lgetfilecon(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(const char *name, security_context_t *p) ++{ ++ int rv = getfilecon(name, p); ++ if (0 == rv) ++ return 0; /* normal case. */ ++ else ++ return fallback_getfilecon(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(const char *name, security_context_t *p) ++{ ++ return lgetfilecon(name, p); ++} ++#endif /* WITH_SELINUX */ + + #ifdef DEBUG_STAT + static uintmax_t stat_count = 0u; +@@ -245,11 +332,17 @@ + { + case SYMLINK_ALWAYS_DEREF: /* -L */ + options.xstat = optionl_stat; ++#ifdef WITH_SELINUX ++ options.x_getfilecon = optionl_getfilecon; +#endif /* WITH_SELINUX */ + options.no_leaf_check = true; + break; + + case SYMLINK_NEVER_DEREF: /* -P (default) */ + options.xstat = optionp_stat; ++#ifdef WITH_SELINUX ++ options.x_getfilecon = optionp_getfilecon; ++#endif /* WITH_SELINUX */ + /* Can't turn no_leaf_check off because the user might have specified + * -noleaf anyway + */ +@@ -257,6 +350,9 @@ + + case SYMLINK_DEREF_ARGSONLY: /* -H */ + options.xstat = optionh_stat; ++#ifdef WITH_SELINUX ++ options.x_getfilecon = optionh_getfilecon; ++#endif /* WITH_SELINUX */ + options.no_leaf_check = true; + } - /* Status value to return to system. */ - int exit_status; -@@ -200,6 +203,10 @@ - xstat = debug_stat; - #else /* !DEBUG_STAT */ - xstat = lstat; +@@ -330,6 +426,9 @@ + int + main (int argc, char **argv) + { +#ifdef WITH_SELINUX + int is_selinux_enabled_flag = is_selinux_enabled()>0; -+ x_getfilecon = lgetfilecon; +#endif /* WITH_SELINUX */ - #endif /* !DEBUG_STAT */ - - human_block_size (getenv ("FIND_BLOCK_SIZE"), 0, &output_block_size); -@@ -221,6 +228,14 @@ + int i; + PFB parse_function; /* Pointer to the function which parses. */ + struct predicate *cur_pred; +@@ -447,6 +546,14 @@ if (strchr ("-!(),", argv[i][0]) == NULL) usage (_("paths must precede expression")); predicate_name = argv[i]; @@ -48,147 +159,78 @@ parse_function = find_parser (predicate_name); if (parse_function == NULL) /* Command line option not recognized */ ---- findutils-4.1.20/find/find.1.selinux 2005-01-04 16:42:22.905457133 -0500 -+++ findutils-4.1.20/find/find.1 2005-01-04 16:42:22.995446937 -0500 -@@ -243,6 +243,9 @@ - file of type \fIc\fR; if \-follow has been given, true if \fIc\fR is - `l'. In other words, for symbolic links, \-xtype checks the type of - the file that \-type does not check. +--- findutils-4.2.15/find/find.1.selinux 2005-01-23 18:29:25.000000000 +0000 ++++ findutils-4.2.15/find/find.1 2005-01-31 13:57:16.233459455 +0000 +@@ -433,6 +433,9 @@ + link to a file of type \fIc\fR; if the \-L option has been given, true + if \fIc\fR is `l'. In other words, for symbolic links, \-xtype checks + the type of the file that \-type does not check. +.IP "\-context \fIscontext\fR" +.IP "\--context \fIscontext\fR" +(SELinux only) File has the security context \fIscontext\fR. + .SS ACTIONS - .IP "\-exec \fIcommand\fR ;" - Execute \fIcommand\fR; true if 0 status is returned. All following -@@ -432,6 +435,8 @@ - File's user name, or numeric user ID if the user has no name. - .IP %U - File's numeric user ID. + .IP "\-delete\fR" +@@ -703,6 +706,8 @@ + File's type (like in ls \-l), 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). ---- findutils-4.1.20/find/pred.c.selinux 2005-01-04 16:42:22.799469141 -0500 -+++ findutils-4.1.20/find/pred.c 2005-01-04 16:44:56.582045621 -0500 -@@ -29,6 +29,14 @@ - #include "modetype.h" - #include "wait.h" - -+#ifdef WITH_SELINUX -+#include -+#endif /*WITH_SELINUX*/ -+ -+#ifndef FNM_CASEFOLD -+#define FNM_CASEFOLD (1<<4) -+#endif /*FNM_CASEFOLD*/ -+ - #if ENABLE_NLS - # include - # define _(Text) gettext (Text) -@@ -71,7 +79,6 @@ - - extern int yesno (); - -- - /* Get or fake the disk device blocksize. - Usually defined by sys/param.h (if at all). */ - #ifndef DEV_BSIZE -@@ -198,6 +205,9 @@ - {pred_used, "used "}, - {pred_user, "user "}, - {pred_xtype, "xtype "}, -+#ifdef WITH_SELINUX -+ {pred_scontext, "context"}, -+#endif /*WITH_SELINUX*/ - {0, "none "} - }; +--- findutils-4.2.15/find/Makefile.in.selinux 2005-01-29 00:50:23.000000000 +0000 ++++ findutils-4.2.15/find/Makefile.in 2005-01-31 13:58:31.031147041 +0000 +@@ -1,4 +1,4 @@ +-# Makefile.in generated by automake 1.9.4 from Makefile.am. ++# Makefile.in generated by automake 1.9.3 from Makefile.am. + # @configure_input@ -@@ -723,6 +733,26 @@ - fprintf (fp, segment->text, - human_readable ((uintmax_t) stat_buf->st_uid, hbuf, 1, 1)); - break; -+#ifdef WITH_SELINUX -+ case 'Z': /* SELinux security context */ -+ { -+ security_context_t scontext; -+ int rv; -+ rv = (*x_getfilecon)(rel_pathname, &scontext); -+ -+ if ( rv < 0 ) { -+ (void) fprintf(stderr, "getfileconf(%s): %s", -+ pathname, strerror(errno)); -+ (void) fflush(stderr); -+ } -+ else { -+ segment->text[segment->text_len] = 's'; -+ (void) fprintf (fp, segment->text, scontext); -+ freecon(scontext); -+ } -+ } -+ break ; -+#endif /* WITH_SELINUX */ - } - } - return (true); -@@ -1231,6 +1261,34 @@ - } - return (pred_type (pathname, &sbuf, pred_ptr)); - } -+ -+ -+#ifdef WITH_SELINUX -+ -+boolean -+pred_scontext ( pathname, stat_buf, pred_ptr ) -+ char *pathname; -+ struct stat *stat_buf; -+ struct predicate *pred_ptr; -+{ -+ int rv; -+ security_context_t scontext; -+ -+ rv = (* x_getfilecon)(rel_pathname, &scontext); -+ -+ if ( rv < 0 ) { -+ (void) fprintf(stderr, "getfilecon(%s): %s\n", pathname, strerror(errno)); -+ (void) fflush(stderr); -+ return ( false ); -+ } -+ -+ rv = (fnmatch(pred_ptr->args.scontext, scontext,0)==0); -+ freecon(scontext); -+ return rv; -+} -+ -+#endif /*WITH_SELINUX*/ -+ - - /* 1) fork to get a child; parent remembers the child pid - 2) child execs the command requested ---- findutils-4.1.20/find/Makefile.in.selinux 2003-05-26 14:18:11.000000000 -0400 -+++ findutils-4.1.20/find/Makefile.in 2005-01-04 16:42:23.004445917 -0500 -@@ -54,7 +54,7 @@ + # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +@@ -174,7 +174,7 @@ + CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ - DATADIRNAME = @DATADIRNAME@ -DEFS = @DEFS@ -+DEFS = @DEFS@ -DWITH_SELINUX ++DEFS = @DEFS@ -I. -I$(srcdir) -I.. -DWITH_SELINUX DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ -@@ -145,7 +145,7 @@ - bin_PROGRAMS = find +@@ -266,7 +266,7 @@ + localedir = $(datadir)/locale find_SOURCES = find.c fstype.c parser.c pred.c tree.c util.c version.c EXTRA_DIST = defs.h $(man_MANS) -LDADD = ../lib/libfind.a ../gnulib/lib/libgnulib.a @INTLLIBS@ +LDADD = ../lib/libfind.a ../gnulib/lib/libgnulib.a @INTLLIBS@ -lselinux man_MANS = find.1 SUBDIRS = testsuite - subdir = find ---- findutils-4.1.20/find/defs.h.selinux 2005-01-04 16:42:22.795469594 -0500 -+++ findutils-4.1.20/find/defs.h 2005-01-04 16:42:22.994447050 -0500 -@@ -127,6 +127,10 @@ + all: all-recursive +@@ -282,9 +282,9 @@ + exit 1;; \ + esac; \ + done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits find/Makefile'; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu find/Makefile'; \ + cd $(top_srcdir) && \ +- $(AUTOMAKE) --gnits find/Makefile ++ $(AUTOMAKE) --gnu find/Makefile + .PRECIOUS: Makefile + Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ +@@ -334,8 +334,7 @@ + f=`echo "$$p" | \ + sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + for opt in --help --version; do \ +- if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \ +- 2>c$${pid}_.err c$${pid}_.out 2> c$${pid}_.err \ + && test -n "`cat c$${pid}_.out`" \ + && test -z "`cat c$${pid}_.err`"; then :; \ + else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \ +--- findutils-4.2.15/find/defs.h.selinux 2005-01-25 00:30:40.000000000 +0000 ++++ findutils-4.2.15/find/defs.h 2005-01-31 13:57:16.244457351 +0000 +@@ -130,6 +130,10 @@ #define MODE_RWX (S_IXUSR | S_IXGRP | S_IXOTH | MODE_RW) #define MODE_ALL (S_ISUID | S_ISGID | S_ISVTX | MODE_RWX) @@ -196,11 +238,11 @@ +#include +#endif /*WITH_SELINUX*/ + - /* Not char because of type promotion; NeXT gcc can't handle it. */ - typedef int boolean; - #define true 1 -@@ -278,6 +282,9 @@ - struct perm_val perm; /* perm */ + #if 1 + #include + typedef bool boolean; +@@ -314,6 +318,9 @@ + struct dir_id fileid; /* samefile */ mode_t type; /* type */ FILE *stream; /* fprint fprint0 */ +#ifdef WITH_SELINUX @@ -209,20 +251,28 @@ struct format_val printf_vec; /* printf fprintf */ } args; -@@ -323,6 +330,11 @@ - VOID *xmalloc PARAMS((size_t n)); - VOID *xrealloc PARAMS((VOID *p, size_t n)); - +@@ -444,6 +451,9 @@ + boolean pred_used PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); + boolean pred_user PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); + boolean pred_xtype PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); +#ifdef WITH_SELINUX +boolean pred_scontext PARAMS((char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)); -+extern int (*x_getfilecon) (); -+#endif /*WITH_SELINUX*/ -+ - /* xstrdup.c */ - char *xstrdup PARAMS((char *string)); ++#endif /* WITH_SELINUX */ ---- findutils-4.1.20/find/Makefile.am.selinux 2003-05-26 14:02:34.000000000 -0400 -+++ findutils-4.1.20/find/Makefile.am 2005-01-04 16:42:22.992447277 -0500 + int launch PARAMS((const struct buildcmd_control *ctl, + struct buildcmd_state *buildstate)); +@@ -518,6 +528,9 @@ + + /* Pointer to the function used to stat files. */ + int (*xstat) (const char *name, struct stat *statbuf); ++#ifdef WITH_SELINUX ++ int (*x_getfilecon) (); ++#endif /* WITH_SELINUX */ + }; + extern struct options options; + +--- findutils-4.2.15/find/Makefile.am.selinux 2004-11-21 13:37:47.000000000 +0000 ++++ findutils-4.2.15/find/Makefile.am 2005-01-31 13:57:16.245457159 +0000 @@ -3,8 +3,9 @@ bin_PROGRAMS = find find_SOURCES = find.c fstype.c parser.c pred.c tree.c util.c version.c @@ -234,11 +284,11 @@ man_MANS = find.1 SUBDIRS = testsuite ---- findutils-4.1.20/find/parser.c.selinux 2005-01-04 16:42:22.971449656 -0500 -+++ findutils-4.1.20/find/parser.c 2005-01-04 16:42:23.000446370 -0500 -@@ -25,6 +25,10 @@ - #include "modetype.h" - #include "xstrtol.h" +--- findutils-4.2.15/find/parser.c.selinux 2005-01-31 13:57:16.145476291 +0000 ++++ findutils-4.2.15/find/parser.c 2005-01-31 13:57:16.251456012 +0000 +@@ -31,6 +31,10 @@ + #include "nextelem.h" + +#ifdef WITH_SELINUX +#include @@ -247,53 +297,37 @@ #if ENABLE_NLS # include # define _(Text) gettext (Text) -@@ -115,6 +119,9 @@ - static boolean parse_version PARAMS((char *argv[], int *arg_ptr)); - static boolean parse_xdev PARAMS((char *argv[], int *arg_ptr)); +@@ -134,6 +138,9 @@ + static boolean parse_warn PARAMS((char *argv[], int *arg_ptr)); static boolean parse_xtype PARAMS((char *argv[], int *arg_ptr)); + static boolean parse_quit PARAMS((char *argv[], int *arg_ptr)); +#ifdef WITH_SELINUX +static boolean parse_scontext PARAMS((char *argv[], int *arg_ptr)); +#endif /*WITH_SELINUX*/ static boolean insert_regex PARAMS((char *argv[], int *arg_ptr, boolean ignore_case)); static boolean insert_type PARAMS((char *argv[], int *arg_ptr, boolean (*which_pred )())); -@@ -217,7 +224,11 @@ - {"-version", parse_version}, /* GNU */ - {"xdev", parse_xdev}, - {"xtype", parse_xtype}, /* GNU */ -- {0, 0} -+#ifdef WITH_SELINUX -+ {"context", parse_scontext}, /* SELINUX */ -+ {"-context", parse_scontext}, /* SELINUX */ -+#endif /*WITH_SELINUX*/ -+ {0, 0} +@@ -261,6 +268,8 @@ + {ARG_TEST, "wholename", parse_wholename}, /* GNU, replaces -path */ + {ARG_OPTION, "xdev", parse_xdev}, + {ARG_TEST, "xtype", parse_xtype}, /* GNU */ ++ {ARG_TEST, "context", parse_scontext}, /* SELinux */ ++ {ARG_TEST, "-context", parse_scontext}, /* SELinux */ + {0, 0, 0} }; - /* Return a pointer to the parser function to invoke for predicate -@@ -467,7 +478,10 @@ - { - dereference = true; - xstat = stat; -- no_leaf_check = true; -+#ifdef WITH_SELINUX -+ x_getfilecon = getfilecon; -+#endif /* WITH_SELINUX */ -+ no_leaf_check = true; - return (true); - } - -@@ -572,6 +586,10 @@ +@@ -739,6 +748,10 @@ -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n\ - -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NAME\n\ - -xtype [bcdpfls]\n")); + -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n\ + -used N -user NAME -xtype [bcdpfls]\n")); +#ifdef WITH_SELINUX + puts (_("\ + -context CONTEXT\n")); +#endif /*WITH_SELINUX*/ puts (_("\ actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT\n\ - -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls\n")); -@@ -1198,6 +1216,32 @@ + -fls FILE -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls -delete\n\ +@@ -1591,6 +1604,32 @@ return true; } @@ -326,16 +360,112 @@ static boolean parse_xtype (char **argv, int *arg_ptr) { -@@ -1357,7 +1401,11 @@ +@@ -1766,7 +1805,11 @@ if (*scan2 == '.') for (scan2++; ISDIGIT (*scan2); scan2++) /* Do nothing. */ ; -- if (strchr ("abcdfFgGhHiklmnpPstuU", *scan2)) +#ifdef WITH_SELINUX -+ if (strchr ("abcdfFgGhHiklmnpPstuUZ", *scan2)) ++ if (strchr ("abcdDfFgGhHiklmMnpPstuUyYZ", *scan2)) +#else /* WITH_SELINUX */ -+ if (strchr ("abcdfFgGhHiklmnpPstuU", *scan2)) + if (strchr ("abcdDfFgGhHiklmMnpPstuUyY", *scan2)) +#endif /* WITH_SELINUX */ { segmentp = make_segment (segmentp, format, scan2 - format, (int) *scan2); +--- findutils-4.2.15/find/pred.c.selinux 2005-01-25 00:30:40.000000000 +0000 ++++ findutils-4.2.15/find/pred.c 2005-01-31 14:37:23.724774302 +0000 +@@ -35,6 +35,14 @@ + #include "wait.h" + #include "buildcmd.h" + ++#ifdef WITH_SELINUX ++#include ++#endif /*WITH_SELINUX*/ ++ ++#ifndef FNM_CASEFOLD ++#define FNM_CASEFOLD (1<<4) ++#endif /*FNM_CASEFOLD*/ ++ + #if ENABLE_NLS + # include + # define _(Text) gettext (Text) +@@ -78,7 +86,6 @@ + + extern int yesno (); + +- + /* Get or fake the disk device blocksize. + Usually defined by sys/param.h (if at all). */ + #ifndef DEV_BSIZE +@@ -209,6 +216,9 @@ + {pred_used, "used "}, + {pred_user, "user "}, + {pred_xtype, "xtype "}, ++#ifdef WITH_SELINUX ++ {pred_scontext, "context"}, ++#endif /*WITH_SELINUX*/ + {0, "none "} + }; + +@@ -874,6 +884,26 @@ + + } + break; ++#ifdef WITH_SELINUX ++ case 'Z': /* SELinux security context */ ++ { ++ security_context_t scontext; ++ int rv; ++ rv = (*options.x_getfilecon)(state.rel_pathname, &scontext); ++ ++ if ( rv < 0 ) { ++ (void) fprintf(stderr, "getfileconf(%s): %s", ++ pathname, strerror(errno)); ++ (void) fflush(stderr); ++ } ++ else { ++ segment->text[segment->text_len] = 's'; ++ (void) fprintf (fp, segment->text, scontext); ++ freecon(scontext); ++ } ++ } ++ break ; ++#endif /* WITH_SELINUX */ + } + } + return (true); +@@ -1477,6 +1507,34 @@ + */ + return (pred_type (pathname, &sbuf, pred_ptr)); + } ++ ++ ++#ifdef WITH_SELINUX ++ ++boolean ++pred_scontext ( pathname, stat_buf, pred_ptr ) ++ char *pathname; ++ struct stat *stat_buf; ++ struct predicate *pred_ptr; ++{ ++ int rv; ++ security_context_t scontext; ++ ++ rv = (* options.x_getfilecon)(state.rel_pathname, &scontext); ++ ++ if ( rv < 0 ) { ++ (void) fprintf(stderr, "getfilecon(%s): %s\n", pathname, strerror(errno)); ++ (void) fflush(stderr); ++ return ( false ); ++ } ++ ++ rv = (fnmatch(pred_ptr->args.scontext, scontext,0)==0); ++ freecon(scontext); ++ return rv; ++} ++ ++#endif /*WITH_SELINUX*/ ++ + + /* 1) fork to get a child; parent remembers the child pid + 2) child execs the command requested diff --git a/findutils.spec b/findutils.spec index b422eec..218e9b7 100644 --- a/findutils.spec +++ b/findutils.spec @@ -3,25 +3,15 @@ %endif Summary: The GNU versions of find utilities (find and xargs). Name: findutils -Version: 4.1.20 -Release: 8 +Version: 4.2.15 +Release: 1 Epoch: 1 License: GPL Group: Applications/File Source0: ftp://alpha.gnu.org/gnu/findutils/%{name}-%{version}.tar.gz -Patch0: findutils-53857.patch -Patch1: findutils-4.1.7-usage.patch -Patch2: findutils-4.1.7-i.patch -Patch3: findutils-d_type.patch -Patch4: findutils-4.1.7-xargs-EIL.patch -Patch5: findutils-install.patch -Patch6: findutils-size.patch -Patch7: findutils-iregex.patch Patch8: findutils-no-locate.patch Patch9: findutils-regex.patch Patch10: findutils-selinux.patch -Patch11: findutils-build.patch -Patch12: findutils-arg-size.patch Prereq: /sbin/install-info Buildroot: %{_tmppath}/%{name}-%{version}-root @@ -44,36 +34,14 @@ useful for finding things on your system. %prep %setup -q -%patch0 -p1 -b .53857 -%patch1 -p1 -b .usage -%patch2 -p1 -b .i -%patch3 -p1 -b .d_type -%patch4 -p1 -b .xargs-EIL -%patch5 -p1 -b .install -%patch6 -p1 -b .size -%patch7 -p1 -b .iregex %patch8 -p1 -b .no-locate %patch9 -p1 -b .regex %if %{WITH_SELINUX} #SELinux %patch10 -p1 -b .selinux %endif -%patch11 -p1 -b .build -%patch12 -p1 -b .arg-size - -rm -f config.guess config.sub -libtoolize --force -autoheader -aclocal -automake -autoconf - -cd gnulib -libtoolize --force -autoheader -aclocal -I m4 -automake -autoconf + +autoreconf %build %define optflags $RPM_OPT_FLAGS -D_GNU_SOURCE @@ -125,6 +93,9 @@ rm -rf %{buildroot} %{_infodir}/find.info* %changelog +* Mon Jan 31 2005 Tim Waugh 1:4.2.15-1 +- 4.2.15. Lots of patches removed due to upstream merge. + * Tue Jan 4 2005 Dan Walsh 1:4.1.20-8 - Change --context to use fnmatch instead of strcmp diff --git a/sources b/sources index 5e80974..3800c72 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -e90ce7222daadeb8616b8db461e17cbc findutils-4.1.20.tar.gz +a881b15aa7170aea045bf35cc92d48e7 findutils-4.2.15.tar.gz