- Eliminate forth param from mls context when mls is not enabled.
This commit is contained in:
		
							parent
							
								
									017ea0e76c
								
							
						
					
					
						commit
						bc0a935c8c
					
				| @ -1,22 +1,22 @@ | |||||||
| diff --exclude-from=exclude -N -u -r nsalibselinux/include/selinux/selinux.h libselinux-1.25.7/include/selinux/selinux.h
 | diff --exclude-from=exclude -N -u -r nsalibselinux/include/selinux/selinux.h libselinux-1.26/include/selinux/selinux.h
 | ||||||
| --- nsalibselinux/include/selinux/selinux.h	2005-09-01 11:17:40.000000000 -0400
 | --- nsalibselinux/include/selinux/selinux.h	2005-09-01 11:17:40.000000000 -0400
 | ||||||
| +++ libselinux-1.25.7/include/selinux/selinux.h	2005-09-12 11:33:32.000000000 -0400
 | +++ libselinux-1.26/include/selinux/selinux.h	2005-09-12 17:05:36.000000000 -0400
 | ||||||
| @@ -304,6 +304,12 @@
 | @@ -304,6 +304,12 @@
 | ||||||
|  extern int selinux_getenforcemode(int *enforce); |  extern int selinux_getenforcemode(int *enforce); | ||||||
|   |   | ||||||
|  /* |  /* | ||||||
| +  selinux_gettype reads the /etc/selinux/config file and determines 
 | +  selinux_getpolicytype reads the /etc/selinux/config file and determines 
 | ||||||
| +  whether the policy tyep for this machine, type must be freed.
 | +  whether the policy tyep for this machine, type must be freed.
 | ||||||
| + */
 | + */
 | ||||||
| +extern void selinux_gettype(char **type);
 | +extern void selinux_getpolicytype(char **type);
 | ||||||
| +
 | +
 | ||||||
| +/*
 | +/*
 | ||||||
|    selinux_policy_root reads the /etc/selinux/config file and returns  |    selinux_policy_root reads the /etc/selinux/config file and returns  | ||||||
|    the directory path under which the compiled policy file and context  |    the directory path under which the compiled policy file and context  | ||||||
|    configuration files exist. |    configuration files exist. | ||||||
| diff --exclude-from=exclude -N -u -r nsalibselinux/src/init.c libselinux-1.25.7/src/init.c
 | diff --exclude-from=exclude -N -u -r nsalibselinux/src/init.c libselinux-1.26/src/init.c
 | ||||||
| --- nsalibselinux/src/init.c	2005-09-01 13:21:11.000000000 -0400
 | --- nsalibselinux/src/init.c	2005-09-01 13:21:11.000000000 -0400
 | ||||||
| +++ libselinux-1.25.7/src/init.c	2005-09-12 11:36:33.000000000 -0400
 | +++ libselinux-1.26/src/init.c	2005-09-12 17:13:20.000000000 -0400
 | ||||||
| @@ -8,6 +8,7 @@
 | @@ -8,6 +8,7 @@
 | ||||||
|  #include <asm/page.h> |  #include <asm/page.h> | ||||||
|  #include <stdio.h> |  #include <stdio.h> | ||||||
| @ -34,25 +34,108 @@ diff --exclude-from=exclude -N -u -r nsalibselinux/src/init.c libselinux-1.25.7/ | |||||||
|  	int (*lib_trans_init)(void) = NULL; |  	int (*lib_trans_init)(void) = NULL; | ||||||
| -
 | -
 | ||||||
| -	translation_lib_handle = dlopen("libsetrans.so.0", RTLD_NOW);
 | -	translation_lib_handle = dlopen("libsetrans.so.0", RTLD_NOW);
 | ||||||
| +	selinux_gettype(&type);
 | +	selinux_getpolicytype(&type);
 | ||||||
| +	if (!type) return;
 | +	if (!type) return;
 | ||||||
| +	snprintf(path, PATH_MAX-1, "/lib/selinux/lib%s.so.0", type);
 | +	snprintf(path, PATH_MAX-1, "/$LIB/selinux/%s/libsetrans.so.0", type);
 | ||||||
| +	free(type);
 | +	free(type);
 | ||||||
| +	translation_lib_handle = dlopen(path, RTLD_NOW);
 | +	translation_lib_handle = dlopen(path, RTLD_NOW);
 | ||||||
|  	if (!translation_lib_handle) |  	if (!translation_lib_handle) | ||||||
|  		return; |  		return; | ||||||
|   |   | ||||||
| diff --exclude-from=exclude -N -u -r nsalibselinux/src/selinux_config.c libselinux-1.25.7/src/selinux_config.c
 | diff --exclude-from=exclude -N -u -r nsalibselinux/src/matchpathcon.c libselinux-1.26/src/matchpathcon.c
 | ||||||
|  | --- nsalibselinux/src/matchpathcon.c	2005-08-24 09:07:11.000000000 -0400
 | ||||||
|  | +++ libselinux-1.26/src/matchpathcon.c	2005-09-12 17:05:37.000000000 -0400
 | ||||||
|  | @@ -25,6 +25,20 @@
 | ||||||
|  |  	va_end(ap); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +#define STRIP_LEVEL(CON) \
 | ||||||
|  | +		if (! mls_enabled) { \
 | ||||||
|  | +			int i=0; \
 | ||||||
|  | +			int ctr=0; \
 | ||||||
|  | +			while (CON[i]) { \
 | ||||||
|  | +				if (CON[i] == ':') ctr++; \
 | ||||||
|  | +				if (ctr==3) { \
 | ||||||
|  | +				  CON[i]=0; \
 | ||||||
|  | +				  break; \
 | ||||||
|  | +				} \
 | ||||||
|  | +				i++; \
 | ||||||
|  | +			} \
 | ||||||
|  | +		} 
 | ||||||
|  | +
 | ||||||
|  |  static void (*myprintf)(const char *fmt, ...) = &default_printf; | ||||||
|  |   | ||||||
|  |  void set_matchpathcon_printf(void (*f)(const char *fmt, ...)) | ||||||
|  | @@ -415,7 +429,7 @@
 | ||||||
|  |  	} | ||||||
|  |  	return; | ||||||
|  |  } | ||||||
|  | -static int process_line( const char *path, char *line_buf, int pass, unsigned lineno) {
 | ||||||
|  | +static int process_line( const char *path, char *line_buf, int pass, unsigned lineno, int mls_enabled) {
 | ||||||
|  |  	int items, len, regerr; | ||||||
|  |  	char *buf_p; | ||||||
|  |  	char *regex, *type, *context; | ||||||
|  | @@ -438,6 +452,7 @@
 | ||||||
|  |  	} else if (items == 2) { | ||||||
|  |  		/* The type field is optional. */ | ||||||
|  |  		free(context); | ||||||
|  | +		STRIP_LEVEL(type)
 | ||||||
|  |  		context = type; | ||||||
|  |  		type = 0; | ||||||
|  |  	} | ||||||
|  | @@ -510,7 +525,7 @@
 | ||||||
|  |  		} | ||||||
|  |  		 | ||||||
|  |  	skip_type: | ||||||
|  | -		
 | ||||||
|  | +		STRIP_LEVEL(context)
 | ||||||
|  |  		spec_arr[nspec].context = context; | ||||||
|  |  		 | ||||||
|  |  		if (strcmp(context, "<<none>>")) { | ||||||
|  | @@ -557,6 +572,7 @@
 | ||||||
|  |  	unsigned int lineno, pass, i, j, maxnspec; | ||||||
|  |  	spec_t *spec_copy=NULL; | ||||||
|  |  	int status=-1; | ||||||
|  | +	int mls_enabled=is_selinux_mls_enabled();
 | ||||||
|  |   | ||||||
|  |  	/* Open the specification file. */ | ||||||
|  |  	if (!path) | ||||||
|  | @@ -590,20 +606,20 @@
 | ||||||
|  |  		lineno = 0; | ||||||
|  |  		nspec = 0; | ||||||
|  |  		while (getline(&line_buf, &line_len, fp) > 0 && nspec < maxnspec) { | ||||||
|  | -			if (process_line(path, line_buf, pass, ++lineno) != 0)
 | ||||||
|  | +			if (process_line(path, line_buf, pass, ++lineno, mls_enabled) != 0)
 | ||||||
|  |  				goto finish; | ||||||
|  |  		} | ||||||
|  |  		lineno = 0; | ||||||
|  |  		if (homedirfp)  | ||||||
|  |  			while (getline(&line_buf, &line_len, homedirfp) > 0 && nspec < maxnspec) { | ||||||
|  | -				if (process_line(homedir_path, line_buf, pass, ++lineno) != 0)
 | ||||||
|  | +				if (process_line(homedir_path, line_buf, pass, ++lineno, mls_enabled) != 0)
 | ||||||
|  |  					goto finish; | ||||||
|  |  			} | ||||||
|  |   | ||||||
|  |  		lineno = 0; | ||||||
|  |  		if (localfp)  | ||||||
|  |  			while (getline(&line_buf, &line_len, localfp) > 0 && nspec < maxnspec) { | ||||||
|  | -				if (process_line(local_path, line_buf, pass, ++lineno) != 0)
 | ||||||
|  | +				if (process_line(local_path, line_buf, pass, ++lineno, mls_enabled) != 0)
 | ||||||
|  |  					goto finish; | ||||||
|  |  			} | ||||||
|  |   | ||||||
|  | diff --exclude-from=exclude -N -u -r nsalibselinux/src/selinux_config.c libselinux-1.26/src/selinux_config.c
 | ||||||
| --- nsalibselinux/src/selinux_config.c	2005-03-17 14:56:21.000000000 -0500
 | --- nsalibselinux/src/selinux_config.c	2005-03-17 14:56:21.000000000 -0500
 | ||||||
| +++ libselinux-1.25.7/src/selinux_config.c	2005-09-12 11:35:35.000000000 -0400
 | +++ libselinux-1.26/src/selinux_config.c	2005-09-13 12:46:22.682193000 -0400
 | ||||||
| @@ -85,6 +85,28 @@
 | @@ -85,6 +85,29 @@
 | ||||||
|   |   | ||||||
|  static int use_compat_file_path; |  static int use_compat_file_path; | ||||||
|   |   | ||||||
| +void selinux_gettype(char **rtype) {
 | +void selinux_getpolicytype(char **rtype) {
 | ||||||
| +	char *type=SELINUXDEFAULT;
 | +	char *type=SELINUXDEFAULT;
 | ||||||
| +	char buf[4097];
 | +	char buf[4097];
 | ||||||
| +	int len, i;
 | +	int i=0;
 | ||||||
|  | +	int len=sizeof(SELINUXTYPETAG)-1;
 | ||||||
| +	FILE *cfg = fopen(SELINUXCONFIG,"r");
 | +	FILE *cfg = fopen(SELINUXCONFIG,"r");
 | ||||||
| +	if (cfg) {
 | +	if (cfg) {
 | ||||||
| +		while (fgets_unlocked(buf, 4096, cfg)) {
 | +		while (fgets_unlocked(buf, 4096, cfg)) {
 | ||||||
| @ -74,15 +157,16 @@ diff --exclude-from=exclude -N -u -r nsalibselinux/src/selinux_config.c libselin | |||||||
|  int selinux_getenforcemode(int *enforce) { |  int selinux_getenforcemode(int *enforce) { | ||||||
|    int ret=-1; |    int ret=-1; | ||||||
|    FILE *cfg = fopen(SELINUXCONFIG,"r"); |    FILE *cfg = fopen(SELINUXCONFIG,"r"); | ||||||
| @@ -122,38 +144,24 @@
 | @@ -122,38 +145,24 @@
 | ||||||
|   |   | ||||||
|  static void init_selinux_policyroot(void) |  static void init_selinux_policyroot(void) | ||||||
|  { |  { | ||||||
| -  char *type=SELINUXDEFAULT;
 | -  char *type=SELINUXDEFAULT;
 | ||||||
| +  char *type=NULL;
 | -  int i=0, len=sizeof(SELINUXTYPETAG)-1, len2;
 | ||||||
|    int i=0, len=sizeof(SELINUXTYPETAG)-1, len2; |  | ||||||
| -  char buf[4097];
 | -  char buf[4097];
 | ||||||
| -  FILE *cfg;
 | -  FILE *cfg;
 | ||||||
|  | +  char *type=NULL;
 | ||||||
|  | +  int i=0, len, len2;
 | ||||||
|    if (selinux_policyroot) return; |    if (selinux_policyroot) return; | ||||||
|    if (access(SELINUXDIR, F_OK) != 0) { |    if (access(SELINUXDIR, F_OK) != 0) { | ||||||
|  	  selinux_policyroot = SECURITYDIR; |  	  selinux_policyroot = SECURITYDIR; | ||||||
| @ -105,7 +189,7 @@ diff --exclude-from=exclude -N -u -r nsalibselinux/src/selinux_config.c libselin | |||||||
| -    type[i]=0;
 | -    type[i]=0;
 | ||||||
| -    i--;
 | -    i--;
 | ||||||
| -  }
 | -  }
 | ||||||
| +  selinux_gettype(&type);
 | +  selinux_getpolicytype(&type);
 | ||||||
| +  if (!type) return;
 | +  if (!type) return;
 | ||||||
|    len=sizeof(SELINUXDIR) + strlen(type); |    len=sizeof(SELINUXDIR) + strlen(type); | ||||||
|    selinux_policyroot=malloc(len); |    selinux_policyroot=malloc(len); | ||||||
|  | |||||||
| @ -1,11 +1,11 @@ | |||||||
| Summary: SELinux library and simple utilities | Summary: SELinux library and simple utilities | ||||||
| Name: libselinux | Name: libselinux | ||||||
| Version: 1.26 | Version: 1.26 | ||||||
| Release: 1 | Release: 2 | ||||||
| License: Public domain (uncopyrighted) | License: Public domain (uncopyrighted) | ||||||
| Group: System Environment/Libraries | Group: System Environment/Libraries | ||||||
| Source: http://www.nsa.gov/selinux/archives/%{name}-%{version}.tgz | Source: http://www.nsa.gov/selinux/archives/%{name}-%{version}.tgz | ||||||
| Prereq: libsetrans >= 0.1.4-2 | Prereq: libsetrans >= 0.1.4-3 | ||||||
| Patch: libselinux-rhat.patch | Patch: libselinux-rhat.patch | ||||||
| 
 | 
 | ||||||
| BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot | BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot | ||||||
| @ -86,6 +86,9 @@ rm -rf ${RPM_BUILD_ROOT} | |||||||
| %{_mandir}/man8/* | %{_mandir}/man8/* | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Mon Sep 12 2005 Dan Walsh <dwalsh@redhat.com> 1.26-2 | ||||||
|  | - Eliminate forth param from mls context when mls is not enabled. | ||||||
|  | 
 | ||||||
| * Tue Sep 6 2005 Dan Walsh <dwalsh@redhat.com> 1.25.7-1 | * Tue Sep 6 2005 Dan Walsh <dwalsh@redhat.com> 1.25.7-1 | ||||||
| - Update from NSA | - Update from NSA | ||||||
| 	* Merged modified form of patch to avoid dlopen/dlclose by | 	* Merged modified form of patch to avoid dlopen/dlclose by | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user