diff -purN findutils-4.4.2.orig/find/Makefile.am findutils-4.4.2/find/Makefile.am
--- findutils-4.4.2.orig/find/Makefile.am	2009-05-16 15:17:01.000000000 +0000
+++ findutils-4.4.2/find/Makefile.am	2010-04-25 03:58:33.762402367 +0000
@@ -2,6 +2,7 @@ AUTOMAKE_OPTIONS = std-options
 localedir = $(datadir)/locale
 # noinst_PROGRAMS = regexprops
 # regexprops_SOURCES = regexprops.c
+DEFS = @DEFS@ -I. -I$(srcdir) -I.. -DWITH_SELINUX
 
 noinst_LIBRARIES = libfindtools.a
 libfindtools_a_SOURCES = finddata.c fstype.c parser.c pred.c tree.c util.c
@@ -26,7 +27,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@ -lselinux
 man_MANS = find.1
 SUBDIRS = . testsuite
 
diff -purN findutils-4.4.2.orig/find/Makefile.in findutils-4.4.2/find/Makefile.in
--- findutils-4.4.2.orig/find/Makefile.in	2009-05-16 15:28:13.000000000 +0000
+++ findutils-4.4.2/find/Makefile.in	2010-04-25 03:58:33.762402367 +0000
@@ -275,7 +275,7 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFAULT_ARG_SIZE = @DEFAULT_ARG_SIZE@
-DEFS = @DEFS@
+DEFS = @DEFS@ -I. -I$(srcdir) -I.. -DWITH_SELINUX
 DEPDIR = @DEPDIR@
 DIRENT_H = @DIRENT_H@
 ECHO_C = @ECHO_C@
@@ -607,7 +607,7 @@ libfindtools_a_SOURCES = finddata.c fsty
 @WITH_FTS_TRUE@oldfind_SOURCES = find.c
 @WITH_FTS_FALSE@ftsfind_SOURCES = ftsfind.c
 EXTRA_DIST = defs.h $(man_MANS)
-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@ -lselinux
 man_MANS = find.1
 SUBDIRS = . testsuite
 all: all-recursive
diff -purN findutils-4.4.2.orig/find/defs.h findutils-4.4.2/find/defs.h
--- findutils-4.4.2.orig/find/defs.h	2009-05-16 15:17:01.000000000 +0000
+++ findutils-4.4.2/find/defs.h	2010-04-25 03:58:33.762402367 +0000
@@ -91,6 +91,9 @@ int get_statinfo PARAMS((const char *pat
 #define MODE_RWX	(S_IXUSR | S_IXGRP | S_IXOTH | MODE_RW)
 #define MODE_ALL	(S_ISUID | S_ISGID | S_ISVTX | MODE_RWX)
 
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#endif /*WITH_SELINUX*/
 
 struct predicate;
 struct options;
@@ -315,6 +318,9 @@ 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 */
+#ifdef WITH_SELINUX
+    security_context_t scontext; /* scontext */
+#endif /*WITH_SELINUX*/
   } args;
 
   /* The next predicate in the user input sequence,
@@ -459,7 +465,9 @@ PREDICATEFUNCTION pred_used;
 PREDICATEFUNCTION pred_user;
 PREDICATEFUNCTION pred_writable;
 PREDICATEFUNCTION pred_xtype;
-
+#ifdef WITH_SELINUX
+PREDICATEFUNCTION pred_scontext;
+#endif /* WITH_SELINUX */
 
 
 int launch PARAMS((const struct buildcmd_control *ctl,
@@ -605,10 +613,13 @@ struct options
    */
   unsigned short optimisation_level;
 
-
   /* How should we quote filenames in error messages and so forth?
    */
   enum quoting_style err_quoting_style;
+
+#ifdef WITH_SELINUX
+  int (*x_getfilecon)();
+#endif /* WITH_SELINUX */
 };
 extern struct options options;
 
diff -purN findutils-4.4.2.orig/find/find.1 findutils-4.4.2/find/find.1
--- findutils-4.4.2.orig/find/find.1	2009-05-16 15:17:01.000000000 +0000
+++ findutils-4.4.2/find/find.1	2010-04-25 03:58:33.762402367 +0000
@@ -934,6 +934,10 @@ checks the type of the file that 
 .B \-type
 does not check.
 
+.IP "\-context \fIscontext\fR"
+.IP "\--context \fIscontext\fR"
+(SELinux only) File has the security context \fIscontext\fR.
+
 .SS ACTIONS
 .IP "\-delete\fR"
 Delete files; true if removal succeeded.  If the removal failed, an
@@ -1354,6 +1358,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 -purN findutils-4.4.2.orig/find/find.c findutils-4.4.2/find/find.c
--- findutils-4.4.2.orig/find/find.c	2009-05-16 15:17:01.000000000 +0000
+++ findutils-4.4.2/find/find.c	2010-04-25 03:58:33.764899827 +0000
@@ -1270,7 +1270,7 @@ process_path (char *pathname, char *name
 static void
 process_dir (char *pathname, char *name, int pathlen, const struct stat *statp, char *parent)
 {
-  int subdirs_left;		/* Number of unexamined subdirs in PATHNAME. */
+  int subdirs_left=0;		/* Number of unexamined subdirs in PATHNAME. */
   boolean subdirs_unreliable;	/* if true, cannot use dir link count as subdir limif (if false, it may STILL be unreliable) */
   unsigned int idx;		/* Which entry are we on? */
   struct stat stat_buf;
diff -purN findutils-4.4.2.orig/find/parser.c findutils-4.4.2/find/parser.c
--- findutils-4.4.2.orig/find/parser.c	2009-05-16 15:17:01.000000000 +0000
+++ findutils-4.4.2/find/parser.c	2010-04-25 03:58:33.764899827 +0000
@@ -53,6 +53,13 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+int optionh_getfilecon(const char *name, security_context_t *p);
+int optionl_getfilecon(const char *name, security_context_t *p);
+int optionp_getfilecon(const char *name, security_context_t *p);
+#endif /*WITH_SELINUX*/
+
 #if ENABLE_NLS
 # include <libintl.h>
 # define _(Text) gettext (Text)
@@ -155,6 +162,9 @@ static boolean parse_noignore_race PARAM
 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));
+#ifdef WITH_SELINUX
+static boolean parse_scontext      PARAMS((const struct parser_table*, char *argv[], int *arg_ptr));
+#endif /*WITH_SELINUX*/
 
 boolean parse_print             PARAMS((const struct parser_table*, char *argv[], int *arg_ptr));
 
@@ -340,6 +350,8 @@ static struct parser_table const parse_t
   {ARG_TEST, "-help",                 parse_help,    NULL},       /* GNU */
   {ARG_TEST, "version",               parse_version, NULL},	  /* GNU */
   {ARG_TEST, "-version",              parse_version, NULL},	  /* GNU */
+  {ARG_TEST, "context",               parse_scontext, pred_scontext},	/* SELinux */
+  {ARG_TEST, "-context",              parse_scontext, pred_scontext},	/* SELinux */
   {0, 0, 0, 0}
 };
 
@@ -451,10 +463,16 @@ set_follow_state(enum SymlinkOption opt)
 	case SYMLINK_ALWAYS_DEREF:  /* -L */
 	  options.xstat = optionl_stat;
 	  options.no_leaf_check = true;
+#ifdef WITH_SELINUX
+	  options.x_getfilecon = optionl_getfilecon;
+#endif /* WITH_SELINUX */
 	  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
 	   */
@@ -463,6 +481,9 @@ set_follow_state(enum SymlinkOption opt)
 	case SYMLINK_DEREF_ARGSONLY: /* -H */
 	  options.xstat = optionh_stat;
 	  options.no_leaf_check = true;
+#ifdef WITH_SELINUX
+	  options.x_getfilecon = optionh_getfilecon;
+#endif /* WITH_SELINUX */
 	}
     }
   options.symlink_handling = opt;
@@ -670,6 +691,94 @@ collect_arg_stat_info(char **argv, int *
 
    The predicate structure is updated with the new information. */
 
+#ifdef WITH_SELINUX
+
+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 */
+
 
 static boolean
 parse_and (const struct parser_table* entry, char **argv, int *arg_ptr)
@@ -1128,6 +1237,10 @@ tests (N can be +N or -N or N): -amin N 
       -readable -writable -executable\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: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print \n\
       -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit\n\
@@ -2552,6 +2665,29 @@ parse_version (const struct parser_table
   exit (0);
 }
 
+#ifdef WITH_SELINUX
+
+static boolean
+parse_scontext ( const struct parser_table* entry, char **argv, int *arg_ptr)
+{
+  struct predicate *our_pred;
+
+  if ( (argv == NULL) || (argv[*arg_ptr] == NULL) )
+    return( false );
+
+  our_pred = insert_primary(entry);
+  our_pred->need_stat = false;
+#ifdef DEBUG
+  our_pred->p_name = find_pred_name (pred_scontext);
+#endif /*DEBUG*/
+  our_pred->args.scontext = argv[*arg_ptr];;
+
+  (*arg_ptr)++;
+  return( true );
+}
+
+#endif /*WITH_SELINUX*/
+
 static boolean
 parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr)
 {
@@ -2803,7 +2939,11 @@ insert_fprintf (struct format_val *vec,
 	  if (*scan2 == '.')
 	    for (scan2++; ISDIGIT (*scan2); scan2++)
 	      /* Do nothing. */ ;
+#ifdef WITH_SELINUX
+	  if (strchr ("abcdDfFgGhHiklmMnpPsStuUyYZ", *scan2))
+#else
 	  if (strchr ("abcdDfFgGhHiklmMnpPsStuUyY", *scan2))
+#endif
 	    {
 	      segmentp = make_segment (segmentp, format, scan2 - format,
 				       KIND_FORMAT, *scan2, 0,
diff -purN findutils-4.4.2.orig/find/pred.c findutils-4.4.2/find/pred.c
--- findutils-4.4.2.orig/find/pred.c	2009-05-16 15:17:01.000000000 +0000
+++ findutils-4.4.2/find/pred.c	2010-04-25 03:58:33.764899827 +0000
@@ -48,6 +48,14 @@
 #include "error.h"
 #include "verify.h"
 
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#endif /*WITH_SELINUX*/
+
+#ifndef FNM_CASEFOLD
+#define FNM_CASEFOLD (1<<4)
+#endif  /*FNM_CASEFOLD*/
+
 #if ENABLE_NLS
 # include <libintl.h>
 # define _(Text) gettext (Text)
@@ -230,6 +238,9 @@ struct pred_assoc pred_table[] =
   {pred_user, "user    "},
   {pred_writable, "writable "},
   {pred_xtype, "xtype   "},
+#ifdef WITH_SELINUX
+  {pred_scontext, "context"},
+#endif /*WITH_SELINUX*/
   {0, "none    "}
 };
 #endif
@@ -1054,6 +1065,26 @@ do_fprintf(struct format_val *dest,
 			     mode_to_filetype(stat_buf->st_mode & S_IFMT));
 	  }
 	  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 ) {
+            fprintf(stderr, "getfileconf(%s): %s",
+                           pathname, strerror(errno));
+            fflush(stderr);
+          }
+          else {
+	      segment->text[segment->text_len] = 's';
+	      checked_fprintf (dest, segment->text, scontext);
+	      freecon(scontext);
+          }
+        }
+        break ;
+#endif /* WITH_SELINUX */
 	}
       /* end of KIND_FORMAT case */
       break;
@@ -1844,6 +1875,31 @@ pred_xtype (const char *pathname, struct
    */
   return (pred_type (pathname, &sbuf, pred_ptr));
 }
+  
+
+#ifdef WITH_SELINUX
+
+boolean
+pred_scontext (const 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 -purN findutils-4.4.2.orig/find/tree.c findutils-4.4.2/find/tree.c
--- findutils-4.4.2.orig/find/tree.c	2009-05-16 15:17:01.000000000 +0000
+++ findutils-4.4.2/find/tree.c	2010-04-25 03:58:33.764899827 +0000
@@ -1195,6 +1195,10 @@ build_expression_tree(int argc, char *ar
   const struct parser_table *entry_close, *entry_print, *entry_open;
   int i, oldi;
 
+#ifdef WITH_SELINUX
+  int is_selinux_enabled_flag = is_selinux_enabled()>0;
+#endif /* WITH_SELINUX */
+
   predicates = NULL;
   
   /* Find where in ARGV the predicates begin by skipping the list of
@@ -1230,6 +1234,16 @@ build_expression_tree(int argc, char *ar
 	}
 
       predicate_name = argv[i];
+
+#ifdef WITH_SELINUX
+      if (! is_selinux_enabled_flag) {
+	if ((strncmp(predicate_name,"-context",strlen("-context"))==0) ||
+	    (strncmp(predicate_name,"--context",strlen("--context"))==0)) {
+	  error (1, 0,_("Error: invalid predicate %s: the kernel is not selinux-enabled.\n"),predicate_name);
+	}
+      }
+#endif
+
       parse_entry = find_parser (predicate_name);
       if (parse_entry == NULL)
 	{
@@ -1434,6 +1448,9 @@ get_new_pred (const struct parser_table 
   last_pred->need_stat = true;
   last_pred->need_type = true;
   last_pred->args.str = NULL;
+#ifdef WITH_SELINUX
+  last_pred->args.scontext = NULL;
+#endif
   last_pred->pred_next = NULL;
   last_pred->pred_left = NULL;
   last_pred->pred_right = NULL;
