psss / rpms / libselinux

Forked from rpms/libselinux 5 years ago
Clone
cvsdist f9343dd
--- /dev/null	2004-02-23 16:02:56.000000000 -0500
cvsdist f9343dd
+++ libselinux-1.13/src/selinux_config.c	2004-05-26 15:03:15.506622384 -0400
cvsdist f9343dd
@@ -0,0 +1,119 @@
cvsdist f9343dd
+#include <stdio.h>
cvsdist f9343dd
+#include <string.h>
cvsdist f9343dd
+#include <ctype.h>
cvsdist f9343dd
+#include <stdlib.h>
cvsdist f9343dd
+#include <limits.h>
cvsdist f9343dd
+
cvsdist f9343dd
+#define SELINUXDIR "/etc/selinux/"
cvsdist f9343dd
+#define SELINUXDEFAULT "targeted"
cvsdist f9343dd
+#define SELINUXTYPETAG "SELINUXTYPE="
cvsdist f9343dd
+#define SELINUXTAG "SELINUX="
cvsdist f9343dd
+
cvsdist f9343dd
+static char *file_context=NULL;
cvsdist f9343dd
+static char *default_type=NULL;
cvsdist f9343dd
+static char *default_policy=NULL;
cvsdist f9343dd
+static char *default_context=NULL;
cvsdist f9343dd
+static char *failsafe_context=NULL;
cvsdist f9343dd
+
cvsdist f9343dd
+int selinux_getenforcemode(int *enforce) {
cvsdist f9343dd
+  int ret=-1;
cvsdist f9343dd
+  FILE *cfg = fopen("/etc/sysconfig/selinux","r");
cvsdist f9343dd
+  char buf[4097];
cvsdist f9343dd
+  int len=sizeof(SELINUXTAG)-1;
cvsdist f9343dd
+  if (cfg) {
cvsdist f9343dd
+    while (fgets(buf, 4096, cfg)) {
cvsdist f9343dd
+      if (strncmp(buf,SELINUXTAG,len))
cvsdist f9343dd
+	continue;
cvsdist f9343dd
+      if (!strncmp(buf+len,"enforcing",sizeof("enforcing")-1)) {
cvsdist f9343dd
+	*enforce = 1;
cvsdist f9343dd
+	ret=0;
cvsdist f9343dd
+	break;
cvsdist f9343dd
+      } else if (!strncmp(buf+len,"permissive",sizeof("permissive")-1)) {
cvsdist f9343dd
+	*enforce = 0;
cvsdist f9343dd
+	ret=0;
cvsdist f9343dd
+	break;
cvsdist f9343dd
+      } else if (!strncmp(buf+len,"disabled",sizeof("disabled")-1)) {
cvsdist f9343dd
+	*enforce = -1;
cvsdist f9343dd
+	ret=0;
cvsdist f9343dd
+	break;
cvsdist f9343dd
+      }
cvsdist f9343dd
+    }
cvsdist f9343dd
+    fclose(cfg);
cvsdist f9343dd
+  }
cvsdist f9343dd
+  return ret;
cvsdist f9343dd
+}
cvsdist f9343dd
+
cvsdist f9343dd
+static char *selinux_policyroot = NULL;
cvsdist f9343dd
+
cvsdist f9343dd
+static void init_selinux_policyroot(void) __attribute__ ((constructor));
cvsdist f9343dd
+
cvsdist f9343dd
+static void init_selinux_policyroot(void)
cvsdist f9343dd
+{
cvsdist f9343dd
+  char *type=SELINUXDEFAULT;
cvsdist f9343dd
+  int i=0, len=sizeof(SELINUXTYPETAG)-1;
cvsdist f9343dd
+  char buf[4097];
cvsdist f9343dd
+  FILE *cfg;
cvsdist f9343dd
+  if (selinux_policyroot) return;
cvsdist f9343dd
+  cfg = fopen("/etc/sysconfig/selinux","r");
cvsdist f9343dd
+  if (cfg) {
cvsdist f9343dd
+    while (fgets(buf, 4096, cfg)) {
cvsdist f9343dd
+      if (strncmp(buf,SELINUXTYPETAG,len))
cvsdist f9343dd
+	continue;
cvsdist f9343dd
+      type=buf+len;
cvsdist f9343dd
+    }
cvsdist f9343dd
+    fclose(cfg);
cvsdist f9343dd
+  }
cvsdist f9343dd
+  i=strlen(type)-1;
cvsdist f9343dd
+  while ((i>=0) && 
cvsdist f9343dd
+	 (isspace(type[i]) || iscntrl(type[i]))) {
cvsdist f9343dd
+    type[i]=0;
cvsdist f9343dd
+    i--;
cvsdist f9343dd
+  }
cvsdist f9343dd
+  len=sizeof(SELINUXDIR) + strlen(type);
cvsdist f9343dd
+  selinux_policyroot=malloc(len);
cvsdist f9343dd
+  snprintf(selinux_policyroot,len, "%s%s", SELINUXDIR, type);
cvsdist f9343dd
+}
cvsdist f9343dd
+
cvsdist f9343dd
+char *selinux_default_type_path() {
cvsdist f9343dd
+  if (!default_type) {
cvsdist f9343dd
+    default_type=malloc(PATH_MAX);
cvsdist f9343dd
+    snprintf(default_type, PATH_MAX, "%s/contexts/default_type", selinux_policyroot);
cvsdist f9343dd
+  }
cvsdist f9343dd
+  return default_type;
cvsdist f9343dd
+}
cvsdist f9343dd
+
cvsdist f9343dd
+char *selinux_policy_root() {
cvsdist f9343dd
+  return selinux_policyroot;
cvsdist f9343dd
+}
cvsdist f9343dd
+
cvsdist f9343dd
+char *selinux_default_context_path() {
cvsdist f9343dd
+  if (!default_context) {
cvsdist f9343dd
+    default_context=malloc(PATH_MAX);
cvsdist f9343dd
+    snprintf(default_context, PATH_MAX, "%s/contexts/default_contexts", selinux_policyroot);
cvsdist f9343dd
+  }
cvsdist f9343dd
+  return default_context;
cvsdist f9343dd
+}
cvsdist f9343dd
+
cvsdist f9343dd
+char *selinux_failsafe_context_path() {
cvsdist f9343dd
+  if (!failsafe_context) {
cvsdist f9343dd
+    failsafe_context=malloc(PATH_MAX);
cvsdist f9343dd
+    snprintf(failsafe_context, PATH_MAX, "%s/contexts/failsafe_contexts", selinux_policyroot);
cvsdist f9343dd
+  }
cvsdist f9343dd
+  return failsafe_context;
cvsdist f9343dd
+}
cvsdist f9343dd
+
cvsdist f9343dd
+char *selinux_binary_policy_path() {
cvsdist f9343dd
+  if (!default_policy) {
cvsdist f9343dd
+    default_policy=malloc(PATH_MAX);
cvsdist f9343dd
+    snprintf(default_policy, PATH_MAX, "%s/policy/policy", selinux_policyroot);
cvsdist f9343dd
+  }
cvsdist f9343dd
+  return default_policy;
cvsdist f9343dd
+}
cvsdist f9343dd
+
cvsdist f9343dd
+char *selinux_file_context_path() {
cvsdist f9343dd
+  if (!file_context) {
cvsdist f9343dd
+    file_context=malloc(PATH_MAX);
cvsdist f9343dd
+    snprintf(file_context, PATH_MAX-1, "%s/contexts/file_contexts", selinux_policyroot);
cvsdist f9343dd
+  }
cvsdist f9343dd
+  return file_context;
cvsdist f9343dd
+}
cvsdist f9343dd
--- libselinux-1.13/src/matchpathcon.c.rhat	2004-05-25 08:52:21.000000000 -0400
cvsdist f9343dd
+++ libselinux-1.13/src/matchpathcon.c	2004-05-26 14:36:00.588167768 -0400
cvsdist f9343dd
@@ -196,7 +196,7 @@
cvsdist f9343dd
 	spec_t *spec_copy;
cvsdist f9343dd
 
cvsdist f9343dd
 	/* Open the specification file. */
cvsdist f9343dd
-	if ((fp = fopen(FILECONTEXTS, "r")) == NULL)
cvsdist f9343dd
+	if ((fp = fopen(selinux_file_context_path(), "r")) == NULL)
cvsdist f9343dd
 		return -1;
cvsdist f9343dd
 
cvsdist f9343dd
 	/* 
cvsdist f9343dd
--- libselinux-1.13/src/get_context_list.c.rhat	2004-05-25 08:52:21.000000000 -0400
cvsdist f9343dd
+++ libselinux-1.13/src/get_context_list.c	2004-05-26 14:36:00.591167312 -0400
cvsdist f9343dd
@@ -255,7 +255,7 @@
cvsdist f9343dd
     }
cvsdist f9343dd
     else if (which == SYSTEMPRIORITY)
cvsdist f9343dd
     {
cvsdist f9343dd
-        config_file = fopen (_DEFCONTEXT_PATH, "r");
cvsdist f9343dd
+        config_file = fopen (selinux_default_context_path(), "r");
cvsdist f9343dd
     }
cvsdist f9343dd
     else
cvsdist f9343dd
     {
cvsdist f9343dd
@@ -390,7 +390,7 @@
cvsdist f9343dd
 	size_t plen, nlen;
cvsdist f9343dd
 	int rc;
cvsdist f9343dd
 
cvsdist f9343dd
-	fp = fopen(_FAILSAFECONTEXT_PATH, "r");
cvsdist f9343dd
+	fp = fopen(selinux_failsafe_context_path(), "r");
cvsdist f9343dd
 	if (!fp)
cvsdist f9343dd
 		return -1;
cvsdist f9343dd
 
cvsdist f9343dd
--- libselinux-1.13/src/get_default_type.c.rhat	2004-05-25 08:52:21.000000000 -0400
cvsdist f9343dd
+++ libselinux-1.13/src/get_default_type.c	2004-05-26 14:36:00.593167008 -0400
cvsdist f9343dd
@@ -10,7 +10,7 @@
cvsdist f9343dd
 {
cvsdist f9343dd
   FILE* fp=NULL;
cvsdist f9343dd
     
cvsdist f9343dd
-  fp = fopen (_DEFTYPE_PATH, "r");
cvsdist f9343dd
+  fp = fopen (selinux_default_type_path(), "r");
cvsdist f9343dd
   if (!fp)
cvsdist f9343dd
 	  return -1;
cvsdist f9343dd
 
cvsdist f9343dd
--- libselinux-1.13/include/selinux/get_default_type.h.rhat	2004-05-25 08:52:21.000000000 -0400
cvsdist f9343dd
+++ libselinux-1.13/include/selinux/get_default_type.h	2004-05-26 14:37:35.995663624 -0400
cvsdist f9343dd
@@ -5,7 +5,7 @@
cvsdist f9343dd
 #ifndef _SELINUX_GET_DEFAULT_TYPE_H_
cvsdist f9343dd
 #define _SELINUX_GET_DEFAULT_TYPE_H_
cvsdist f9343dd
 
cvsdist f9343dd
-#define _DEFTYPE_PATH "/etc/security/default_type"
cvsdist f9343dd
+char *selinux_default_type_path();
cvsdist f9343dd
 
cvsdist f9343dd
 /* Get the default type (domain) for 'role' and set 'type' to refer to it.
cvsdist f9343dd
    Caller must free via free().
cvsdist f9343dd
--- libselinux-1.13/include/selinux/selinux.h.rhat	2004-05-25 08:52:21.000000000 -0400
cvsdist f9343dd
+++ libselinux-1.13/include/selinux/selinux.h	2004-05-26 15:06:05.799733896 -0400
cvsdist f9343dd
@@ -72,12 +72,6 @@
cvsdist f9343dd
 
cvsdist f9343dd
 /* Wrappers for the selinuxfs (policy) API. */
cvsdist f9343dd
 
cvsdist f9343dd
-/* Mount point for selinuxfs. */
cvsdist f9343dd
-#define SELINUXMNT "/selinux/"
cvsdist f9343dd
-
cvsdist f9343dd
-/* Default pathname for policy configuration, without version number. */
cvsdist f9343dd
-#define SELINUXPOLICY "/etc/security/selinux/policy"
cvsdist f9343dd
-
cvsdist f9343dd
 typedef unsigned int access_vector_t;
cvsdist f9343dd
 typedef unsigned short security_class_t;
cvsdist f9343dd
 
cvsdist f9343dd
@@ -168,4 +162,22 @@
cvsdist f9343dd
 		 mode_t mode,
cvsdist f9343dd
 		 security_context_t *con);
cvsdist f9343dd
 
cvsdist f9343dd
+/*
cvsdist f9343dd
+  selinux_getenforcemode reads the /etc/sysconfig/selinux file and determines 
cvsdist f9343dd
+  whether the machine should be started in enforcing (1), permissive (0) or 
cvsdist f9343dd
+  disabled (-1) mode.
cvsdist f9343dd
+ */
cvsdist f9343dd
+int selinux_getenforcemode(int *enforce);
cvsdist f9343dd
+
cvsdist f9343dd
+/*
cvsdist f9343dd
+  selinux_policy_root is set within the init_selinux_policyroot constructor 
cvsdist f9343dd
+  which reads the /etc/sysconfig/selinux file and determines 
cvsdist f9343dd
+  where the compiled policy file and contexts files exist.
cvsdist f9343dd
+ */
cvsdist f9343dd
+char *selinux_policy_root();
cvsdist f9343dd
+char *selinux_binary_policy_path();
cvsdist f9343dd
+char *selinux_failsafe_context_path();
cvsdist f9343dd
+char *selinux_default_context_path();
cvsdist f9343dd
+char *selinux_file_context_path();
cvsdist f9343dd
+
cvsdist f9343dd
 #endif
cvsdist f9343dd
--- libselinux-1.13/include/selinux/get_context_list.h.rhat	2004-05-25 08:52:21.000000000 -0400
cvsdist f9343dd
+++ libselinux-1.13/include/selinux/get_context_list.h	2004-05-26 14:36:00.595166704 -0400
cvsdist f9343dd
@@ -3,8 +3,6 @@
cvsdist f9343dd
 
cvsdist f9343dd
 #include <selinux/selinux.h>
cvsdist f9343dd
 
cvsdist f9343dd
-#define _DEFCONTEXT_PATH "/etc/security/default_contexts"
cvsdist f9343dd
-#define _FAILSAFECONTEXT_PATH "/etc/security/failsafe_context"
cvsdist f9343dd
 #define SELINUX_DEFAULTUSER "user_u"
cvsdist f9343dd
 
cvsdist f9343dd
 /* Get an ordered list of authorized security contexts for a user session
cvsdist f9343dd
--- /dev/null	2004-02-23 16:02:56.000000000 -0500
cvsdist f9343dd
+++ libselinux-1.13/man/man3/selinux_policyroot.3	2004-05-26 14:36:00.596166552 -0400
cvsdist f9343dd
@@ -0,0 +1,17 @@
cvsdist f9343dd
+.TH "selinux_policyroot" "3" "25 May 2004" "dwalsh@redhat.com" "SE Linux API documentation"
cvsdist f9343dd
+.SH "NAME"
cvsdist f9343dd
+selinux_policyroot \- return the path of the SELinux policy files for this machine.
cvsdist f9343dd
+.SH "SYNOPSIS"
cvsdist f9343dd
+.B #include <selinux/selinux.h>
cvsdist f9343dd
+.sp
cvsdist f9343dd
+.B char *selinux_policyroot();
cvsdist f9343dd
+.br
cvsdist f9343dd
+
cvsdist f9343dd
+.SH "DESCRIPTION"
cvsdist f9343dd
+.B selinux_policyroot
cvsdist f9343dd
+Reads the contents of the /etc/sysconfig/selinux file to determine which policy files should be used for this machine.
cvsdist f9343dd
+.SH "RETURN VALUE"
cvsdist f9343dd
+On success, returns a directory path containing the SELinux policy files.
cvsdist f9343dd
+On failure, NULL is returned.
cvsdist f9343dd
+
cvsdist f9343dd
+
cvsdist f9343dd
--- /dev/null	2004-02-23 16:02:56.000000000 -0500
cvsdist f9343dd
+++ libselinux-1.13/man/man3/selinux_getenforcemode.3	2004-05-26 14:36:00.597166400 -0400
cvsdist f9343dd
@@ -0,0 +1,22 @@
cvsdist f9343dd
+.TH "selinux_getenforcemode" "3" "25 May 2004" "dwalsh@redhat.com" "SE Linux API documentation"
cvsdist f9343dd
+.SH "NAME"
cvsdist f9343dd
+selinux_getenforcemode \- get the enforcing state of SE Linux
cvsdist f9343dd
+.SH "SYNOPSIS"
cvsdist f9343dd
+.B #include <selinux/selinux.h>
cvsdist f9343dd
+.sp
cvsdist f9343dd
+.B int selinux_getenforcemode(int *enforce);
cvsdist f9343dd
+.br
cvsdist f9343dd
+
cvsdist f9343dd
+.SH "DESCRIPTION"
cvsdist f9343dd
+.B selinux_getenforcemode
cvsdist f9343dd
+Reads the contents of the /etc/sysconfig/selinux file to determine how the 
cvsdist f9343dd
+system was setup to run SELinux.
cvsdist f9343dd
+.br
cvsdist f9343dd
+Sets the value of enforce to 1 if SELinux should be run in enforcing mode.
cvsdist f9343dd
+Sets the value of enforce to 0 if SELinux should be run in permissive mode.
cvsdist f9343dd
+Sets the value of enforce to -1 if SELinux should be disabled.
cvsdist f9343dd
+.SH "RETURN VALUE"
cvsdist f9343dd
+On success, zero is returned.
cvsdist f9343dd
+On failure, -1 is returned.
cvsdist f9343dd
+
cvsdist f9343dd
+
cvsdist f9343dd
--- /dev/null	2004-02-23 16:02:56.000000000 -0500
cvsdist f9343dd
+++ libselinux-1.13/utils/getenforcemode.c	2004-05-26 14:36:00.598166248 -0400
cvsdist f9343dd
@@ -0,0 +1,31 @@
cvsdist f9343dd
+#include <unistd.h>
cvsdist f9343dd
+#include <stdio.h>
cvsdist f9343dd
+#include <stdlib.h>
cvsdist f9343dd
+#include <selinux/selinux.h>
cvsdist f9343dd
+
cvsdist f9343dd
+int main(int argc __attribute__ ((unused)), char **argv) 
cvsdist f9343dd
+{
cvsdist f9343dd
+	int ret;
cvsdist f9343dd
+	int enforce;
cvsdist f9343dd
+	ret = selinux_getenforcemode(&enforce);
cvsdist f9343dd
+	if (ret) {
cvsdist f9343dd
+		fprintf(stderr, "%s:  selinux_getenforcemode() failed\n", argv[0]);
cvsdist f9343dd
+		exit(2);
cvsdist f9343dd
+	}
cvsdist f9343dd
+
cvsdist f9343dd
+	switch(enforce) {
cvsdist f9343dd
+	case 1:
cvsdist f9343dd
+	  printf("Enforcing\n");
cvsdist f9343dd
+	  break;
cvsdist f9343dd
+
cvsdist f9343dd
+	case 0:
cvsdist f9343dd
+	  printf("Permissive\n");
cvsdist f9343dd
+	  break;
cvsdist f9343dd
+
cvsdist f9343dd
+	case -1:
cvsdist f9343dd
+	  printf("Disabled\n");
cvsdist f9343dd
+	  break;
cvsdist f9343dd
+
cvsdist f9343dd
+	}
cvsdist f9343dd
+	exit(0);
cvsdist f9343dd
+}
cvsdist f9343dd
--- /dev/null	2004-02-23 16:02:56.000000000 -0500
cvsdist f9343dd
+++ libselinux-1.13/utils/selinuxconfig.c	2004-05-26 15:05:07.827547008 -0400
cvsdist f9343dd
@@ -0,0 +1,17 @@
cvsdist f9343dd
+#include <unistd.h>
cvsdist f9343dd
+#include <stdio.h>
cvsdist f9343dd
+#include <stdlib.h>
cvsdist f9343dd
+#include <selinux/selinux.h>
cvsdist f9343dd
+#include <selinux/get_default_type.h>
cvsdist f9343dd
+
cvsdist f9343dd
+int main(int argc __attribute__ ((unused)), char **argv) 
cvsdist f9343dd
+{
cvsdist f9343dd
+	printf("policypath=\"%s\"\n", selinux_policy_root());
cvsdist f9343dd
+	printf("default_type_path=\"%s\"\n", selinux_default_type_path());
cvsdist f9343dd
+	printf("default_context_path=\"%s\"\n", selinux_default_context_path());
cvsdist f9343dd
+	printf("default_failsafe_context_path=\"%s\"\n", selinux_failsafe_context_path());
cvsdist f9343dd
+	printf("binary_policy_path=\"%s\"\n", selinux_binary_policy_path());
cvsdist f9343dd
+	printf("file_contexts_path=\"%s\"\n", selinux_file_context_path());
cvsdist f9343dd
+	exit(0);
cvsdist f9343dd
+
cvsdist f9343dd
+}