- Fix selinux patch

This commit is contained in:
Daniel J Walsh 2005-10-11 21:41:28 +00:00
parent 9ca4d619fe
commit 1a1e058db1
2 changed files with 222 additions and 208 deletions

View File

@ -1,17 +1,156 @@
--- findutils-4.2.25/find/util.c.selinux 2005-06-19 20:01:58.000000000 +0000
+++ findutils-4.2.25/find/util.c 2005-09-05 10:15:31.000000000 +0000
@@ -78,6 +78,9 @@
last_pred->need_stat = true;
last_pred->need_type = true;
last_pred->args.str = NULL;
--- findutils-4.2.25/find/Makefile.am.selinux 2005-07-03 12:07:16.000000000 -0400
+++ findutils-4.2.25/find/Makefile.am 2005-10-11 17:03:51.000000000 -0400
@@ -5,8 +5,9 @@
# regexprops_SOURCES = regexprops.c
find_SOURCES = find.c fstype.c parser.c pred.c tree.c util.c version.c
EXTRA_DIST = defs.h $(man_MANS)
+DEFS = @DEFS@ -I. -I$(srcdir) -I.. -DWITH_SELINUX
INCLUDES = -I../gnulib/lib -I$(top_srcdir)/lib -I$(top_srcdir)/gnulib/lib -I../intl -DLOCALEDIR=\"$(localedir)\"
-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
--- findutils-4.2.25/find/parser.c.selinux 2005-07-31 17:01:54.000000000 -0400
+++ findutils-4.2.25/find/parser.c 2005-10-11 17:38:06.000000000 -0400
@@ -47,6 +47,10 @@
/* We need <unistd.h> for isatty(). */
#include <unistd.h>
+#ifdef WITH_SELINUX
+ last_pred->args.scontext = NULL;
+#endif
last_pred->pred_next = NULL;
last_pred->pred_left = NULL;
last_pred->pred_right = NULL;
--- findutils-4.2.25/find/find.c.selinux 2005-08-30 07:40:03.000000000 +0000
+++ findutils-4.2.25/find/find.c 2005-09-05 10:16:37.000000000 +0000
+#include <selinux/selinux.h>
+#endif /*WITH_SELINUX*/
+
#if ENABLE_NLS
# include <libintl.h>
# define _(Text) gettext (Text)
@@ -147,6 +151,9 @@
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*/
@@ -298,6 +305,8 @@
{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}
};
@@ -803,6 +812,10 @@
-nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\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\
@@ -1712,6 +1725,29 @@
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)
{
@@ -1949,7 +1985,11 @@
if (*scan2 == '.')
for (scan2++; ISDIGIT (*scan2); scan2++)
/* Do nothing. */ ;
+#ifdef WITH_SELINUX
+ if (strchr ("abcdDfFgGhHiklmMnpPstuUyYZ", *scan2))
+#else /* WITH_SELINUX */
if (strchr ("abcdDfFgGhHiklmMnpPstuUyY", *scan2))
+#endif /* WITH_SELINUX */
{
segmentp = make_segment (segmentp, format, scan2 - format,
(int) *scan2);
--- findutils-4.2.25/find/Makefile.in.selinux 2005-09-03 07:17:59.000000000 -0400
+++ findutils-4.2.25/find/Makefile.in 2005-10-11 17:04:12.000000000 -0400
@@ -175,7 +175,7 @@
CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
+DEFS = @DEFS@ -I. -I$(srcdir) -I.. -DWITH_SELINUX
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
@@ -270,7 +270,7 @@
# regexprops_SOURCES = regexprops.c
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
all: all-recursive
@@ -286,9 +286,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 \
--- findutils-4.2.25/find/find.1.selinux 2005-09-02 16:46:48.000000000 -0400
+++ findutils-4.2.25/find/find.1 2005-10-11 17:03:51.000000000 -0400
@@ -455,6 +455,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 "\-delete\fR"
@@ -753,6 +756,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.2.25/find/find.c.selinux 2005-08-30 03:40:03.000000000 -0400
+++ findutils-4.2.25/find/find.c 2005-10-11 17:14:28.000000000 -0400
@@ -244,6 +244,93 @@
{
return lstat(name, p);
@ -159,194 +298,17 @@
parse_entry = find_parser (predicate_name);
if (parse_entry == NULL)
{
--- findutils-4.2.25/find/find.1.selinux 2005-09-02 20:46:48.000000000 +0000
+++ findutils-4.2.25/find/find.1 2005-09-05 10:15:31.000000000 +0000
@@ -455,6 +455,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 "\-delete\fR"
@@ -753,6 +756,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.2.25/find/Makefile.in.selinux 2005-09-03 11:17:59.000000000 +0000
+++ findutils-4.2.25/find/Makefile.in 2005-09-05 10:15:31.000000000 +0000
@@ -175,7 +175,7 @@
CROSS_COMPILING_FALSE = @CROSS_COMPILING_FALSE@
CROSS_COMPILING_TRUE = @CROSS_COMPILING_TRUE@
CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
+DEFS = @DEFS@ -I. -I$(srcdir) -I.. -DWITH_SELINUX
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
@@ -270,7 +270,7 @@
# regexprops_SOURCES = regexprops.c
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
all: all-recursive
--- findutils-4.2.25/find/defs.h.selinux 2005-08-30 07:36:24.000000000 +0000
+++ findutils-4.2.25/find/defs.h 2005-09-05 10:17:20.000000000 +0000
@@ -131,6 +131,10 @@
#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*/
+
#if 1
#include <stdbool.h>
typedef bool boolean;
@@ -320,6 +324,9 @@
struct dir_id fileid; /* samefile */
mode_t type; /* type */
FILE *stream; /* ls fls fprint0 */
+#ifdef WITH_SELINUX
+ security_context_t scontext; /* scontext */
+#endif /*WITH_SELINUX*/
struct format_val printf_vec; /* printf fprintf fprint */
} args;
@@ -479,6 +486,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));
+#endif /* WITH_SELINUX */
@@ -568,6 +578,10 @@
* can be changed with the positional option, -regextype.
*/
int regex_options;
+
+#ifdef WITH_SELINUX
+ int (*x_getfilecon) ();
+#endif /* WITH_SELINUX */
};
extern struct options options;
--- findutils-4.2.25/find/Makefile.am.selinux 2005-07-03 16:07:16.000000000 +0000
+++ findutils-4.2.25/find/Makefile.am 2005-09-05 10:15:31.000000000 +0000
@@ -5,8 +5,9 @@
# regexprops_SOURCES = regexprops.c
find_SOURCES = find.c fstype.c parser.c pred.c tree.c util.c version.c
EXTRA_DIST = defs.h $(man_MANS)
+DEFS = @DEFS@ -I. -I$(srcdir) -I.. -DWITH_SELINUX
INCLUDES = -I../gnulib/lib -I$(top_srcdir)/lib -I$(top_srcdir)/gnulib/lib -I../intl -DLOCALEDIR=\"$(localedir)\"
-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
--- findutils-4.2.25/find/parser.c.selinux 2005-07-31 21:01:54.000000000 +0000
+++ findutils-4.2.25/find/parser.c 2005-09-05 10:20:44.000000000 +0000
@@ -47,6 +47,10 @@
/* We need <unistd.h> for isatty(). */
#include <unistd.h>
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#endif /*WITH_SELINUX*/
+
#if ENABLE_NLS
# include <libintl.h>
# define _(Text) gettext (Text)
@@ -147,6 +151,9 @@
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((char *argv[], int *arg_ptr));
+#endif /*WITH_SELINUX*/
@@ -298,6 +305,8 @@
{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, NULL}, /* SELinux */
+ {ARG_TEST, "-context", parse_scontext, NULL}, /* SELinux */
{0, 0, 0, 0}
};
@@ -803,6 +812,10 @@
-nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\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\
@@ -1712,6 +1725,32 @@
exit (0);
}
+#ifdef WITH_SELINUX
+
+static boolean
+parse_scontext ( argv, arg_ptr )
+ char *argv[];
+ int *arg_ptr;
+{
+ struct predicate *our_pred;
+
+ if ( (argv == NULL) || (argv[*arg_ptr] == NULL) )
+ return( false );
+
+ our_pred = insert_primary(pred_scontext);
+ our_pred->need_stat = 0;
+#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)
@@ -1802,7 +1909,7 @@
static void
process_dir (char *pathname, char *name, int pathlen, struct stat *statp, char *parent)
{
@@ -1949,7 +1988,11 @@
if (*scan2 == '.')
for (scan2++; ISDIGIT (*scan2); scan2++)
/* Do nothing. */ ;
+#ifdef WITH_SELINUX
+ if (strchr ("abcdDfFgGhHiklmMnpPstuUyYZ", *scan2))
+#else /* WITH_SELINUX */
if (strchr ("abcdDfFgGhHiklmMnpPstuUyY", *scan2))
+#endif /* WITH_SELINUX */
{
segmentp = make_segment (segmentp, format, scan2 - format,
(int) *scan2);
--- findutils-4.2.25/find/pred.c.selinux 2005-09-01 20:57:49.000000000 +0000
+++ findutils-4.2.25/find/pred.c 2005-09-05 10:15:31.000000000 +0000
- 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) */
int idx; /* Which entry are we on? */
struct stat stat_buf;
--- findutils-4.2.25/find/pred.c.selinux 2005-09-01 16:57:49.000000000 -0400
+++ findutils-4.2.25/find/pred.c 2005-10-11 17:03:51.000000000 -0400
@@ -38,6 +38,14 @@
#include "buildcmd.h"
#include "yesno.h"
@ -442,3 +404,59 @@
/* 1) fork to get a child; parent remembers the child pid
2) child execs the command requested
--- findutils-4.2.25/find/util.c.selinux 2005-06-19 16:01:58.000000000 -0400
+++ findutils-4.2.25/find/util.c 2005-10-11 17:03:51.000000000 -0400
@@ -78,6 +78,9 @@
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;
--- findutils-4.2.25/find/defs.h.selinux 2005-08-30 03:36:24.000000000 -0400
+++ findutils-4.2.25/find/defs.h 2005-10-11 17:03:51.000000000 -0400
@@ -131,6 +131,10 @@
#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*/
+
#if 1
#include <stdbool.h>
typedef bool boolean;
@@ -320,6 +324,9 @@
struct dir_id fileid; /* samefile */
mode_t type; /* type */
FILE *stream; /* ls fls fprint0 */
+#ifdef WITH_SELINUX
+ security_context_t scontext; /* scontext */
+#endif /*WITH_SELINUX*/
struct format_val printf_vec; /* printf fprintf fprint */
} args;
@@ -479,6 +486,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));
+#endif /* WITH_SELINUX */
@@ -568,6 +578,10 @@
* can be changed with the positional option, -regextype.
*/
int regex_options;
+
+#ifdef WITH_SELINUX
+ int (*x_getfilecon) ();
+#endif /* WITH_SELINUX */
};
extern struct options options;

View File

@ -1,10 +1,8 @@
%if %{?WITH_SELINUX:0}%{!?WITH_SELINUX:1}
%define WITH_SELINUX 1
%endif
Summary: The GNU versions of find utilities (find and xargs).
Name: findutils
Version: 4.2.25
Release: 2
Release: 3
Epoch: 1
License: GPL
Group: Applications/File
@ -16,9 +14,7 @@ Prereq: /sbin/install-info
Buildroot: %{_tmppath}/%{name}-%{version}-root
BuildRequires: libtool, automake, autoconf
BuildRequires: dejagnu, gettext-devel, texinfo
%if %{WITH_SELINUX}
BuildRequires: libselinux-devel
%endif
%description
The findutils package contains programs which will help you locate
@ -34,10 +30,7 @@ useful for finding things on your system.
%prep
%setup -q
%patch1 -p1 -b .no-locate
%if %{WITH_SELINUX}
#SELinux
%patch2 -p1 -b .selinux
%endif
autoreconf
@ -91,6 +84,9 @@ rm -rf %{buildroot}
%{_infodir}/find.info*
%changelog
* Tue Oct 11 2005 Dan Walsh <dwalsh@redhat.com> 1:4.2.25-3
- Fix selinux patch
* Mon Sep 5 2005 Tim Waugh <twaugh@redhat.com> 1:4.2.25-2
- 4.2.25.