psss / rpms / libselinux

Forked from rpms/libselinux 5 years ago
Clone
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/include/selinux/setrans.h libselinux-1.30.3/include/selinux/setrans.h
98a597a
--- nsalibselinux/include/selinux/setrans.h	1969-12-31 19:00:00.000000000 -0500
98a597a
+++ libselinux-1.30.3/include/selinux/setrans.h	2006-05-03 09:25:00.000000000 -0400
98a597a
@@ -0,0 +1,32 @@
98a597a
+/* Copyright (c) 2006 Trusted Computer Solutions, Inc. */
98a597a
+
98a597a
+#ifndef _SETRANS_H
98a597a
+#define _SETRANS_H
98a597a
+
98a597a
+#ifdef __cplusplus
98a597a
+extern "C" {
98a597a
+#endif
98a597a
+
98a597a
+/* This must be called once, prior to calling any other 
98a597a
+   translation function.
98a597a
+   Returns nonzero if translations cannot be performed, 
98a597a
+   or 0 otherwise. */
98a597a
+int init_context_translations(void);
98a597a
+
98a597a
+/* Perform context translation.
98a597a
+   Caller must free the resulting context.
98a597a
+   Returns nonzero if error or 0 otherwise. */
98a597a
+int translate_context(const char *, char **);
98a597a
+int untranslate_context(const char *, char **);
98a597a
+
98a597a
+#ifdef __cplusplus
98a597a
+}
98a597a
+#endif
98a597a
+
98a597a
+#define SETRANS_UNIX_SOCKET "/var/run/setrans/.setrans-unix"
98a597a
+
98a597a
+#define SETRANS_INIT		1
98a597a
+#define RAW_TO_TRANS_CONTEXT		2
98a597a
+#define TRANS_TO_RAW_CONTEXT		3
98a597a
+
98a597a
+#endif /* _SETRANS_H */
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/canonicalize_context.c libselinux-1.30.3/src/canonicalize_context.c
e0ab958
--- nsalibselinux/src/canonicalize_context.c	2005-11-08 09:34:17.000000000 -0500
98a597a
+++ libselinux-1.30.3/src/canonicalize_context.c	2006-05-03 11:00:33.000000000 -0400
a925159
@@ -5,7 +5,6 @@
a925159
 #include <stdio.h>
a925159
 #include <errno.h>
a925159
 #include <string.h>
a925159
-#include <asm/page.h>
a925159
 #include "selinux_internal.h"
a925159
 #include "policy.h"
a925159
 #include <limits.h>
a925159
@@ -23,7 +22,7 @@
e0ab958
 	if (fd < 0)
e0ab958
 		return -1;
e0ab958
 
e0ab958
-	size = PAGE_SIZE;
e0ab958
+	size = selinux_page_size;
e0ab958
 	buf = malloc(size);
e0ab958
 	if (!buf) {
e0ab958
 		ret = -1;
98a597a
@@ -64,22 +63,16 @@
98a597a
 	security_context_t rcon = con;
98a597a
 	security_context_t rcanoncon;
98a597a
 
98a597a
-	if (context_translations && trans_to_raw_context(con, &rcon))
98a597a
+
98a597a
+	if (selinux_trans_to_raw_context(con, &rcon))
98a597a
 		return -1;
98a597a
 
98a597a
  	ret = security_canonicalize_context_raw(rcon, &rcanoncon);
98a597a
 
98a597a
-	if (context_translations) {
98a597a
-		freecon(rcon);
98a597a
-		if (!ret) {
98a597a
-			if (raw_to_trans_context(rcanoncon, canoncon)) {
98a597a
-				*canoncon = NULL;
98a597a
-				ret = -1;
98a597a
-			}
98a597a
-			freecon(rcanoncon);
98a597a
-		}
98a597a
-	} else if (!ret) {
98a597a
-		*canoncon = rcanoncon;
98a597a
+	freecon(rcon);
98a597a
+	if (!ret) {
98a597a
+		ret = selinux_raw_to_trans_context(rcanoncon, canoncon);
98a597a
+		freecon(rcanoncon);
98a597a
 	}
98a597a
 
98a597a
 	return ret;
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/check_context.c libselinux-1.30.3/src/check_context.c
98a597a
--- nsalibselinux/src/check_context.c	2005-08-23 13:34:34.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/check_context.c	2006-05-03 10:59:57.000000000 -0400
98a597a
@@ -32,13 +32,12 @@
98a597a
 	int ret;
98a597a
 	security_context_t rcon = con;
98a597a
 
98a597a
-	if (context_translations && trans_to_raw_context(con, &rcon))
98a597a
+	if (selinux_trans_to_raw_context(con, &rcon))
98a597a
 		return -1;
98a597a
 
98a597a
  	ret = security_check_context_raw(rcon);
98a597a
 
98a597a
-	if (context_translations)
98a597a
-		freecon(rcon);
98a597a
+	freecon(rcon);
98a597a
 
98a597a
 	return ret;
98a597a
 }
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/compute_av.c libselinux-1.30.3/src/compute_av.c
e0ab958
--- nsalibselinux/src/compute_av.c	2005-08-23 13:34:34.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/compute_av.c	2006-05-03 11:00:48.000000000 -0400
a925159
@@ -5,7 +5,6 @@
a925159
 #include <stdio.h>
a925159
 #include <errno.h>
a925159
 #include <string.h>
a925159
-#include <asm/page.h>
a925159
 #include "selinux_internal.h"
a925159
 #include "policy.h"
a925159
 #include <limits.h>
a925159
@@ -26,7 +25,7 @@
e0ab958
 	if (fd < 0) 
e0ab958
 		return -1;
e0ab958
 
e0ab958
-	len = PAGE_SIZE;
e0ab958
+	len = selinux_page_size;
e0ab958
 	buf = malloc(len);
e0ab958
 	if (!buf) {
e0ab958
 		ret = -1;
98a597a
@@ -70,21 +69,17 @@
98a597a
 	security_context_t rscon = scon;
98a597a
 	security_context_t rtcon = tcon;
98a597a
 
98a597a
-	if (context_translations) {
98a597a
-		if (trans_to_raw_context(scon, &rscon))
98a597a
-			return -1;
98a597a
-		if (trans_to_raw_context(tcon, &rtcon)) {
98a597a
-			freecon(rscon);
98a597a
-			return -1;
98a597a
-		}
98a597a
+	if (selinux_trans_to_raw_context(scon, &rscon))
98a597a
+		return -1;
98a597a
+	if (selinux_trans_to_raw_context(tcon, &rtcon)) {
98a597a
+		freecon(rscon);
98a597a
+		return -1;
98a597a
 	}
98a597a
 
98a597a
  	ret = security_compute_av_raw(rscon, rtcon, tclass, requested, avd);
98a597a
 
98a597a
-	if (context_translations) {
98a597a
-		freecon(rscon);
98a597a
-		freecon(rtcon);
98a597a
-	}
98a597a
+	freecon(rscon);
98a597a
+	freecon(rtcon);
98a597a
 
98a597a
 	return ret;
98a597a
 }
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/compute_create.c libselinux-1.30.3/src/compute_create.c
e0ab958
--- nsalibselinux/src/compute_create.c	2005-08-23 13:34:34.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/compute_create.c	2006-05-03 11:04:26.000000000 -0400
a925159
@@ -5,7 +5,6 @@
a925159
 #include <stdio.h>
a925159
 #include <errno.h>
a925159
 #include <string.h>
a925159
-#include <asm/page.h>
a925159
 #include "selinux_internal.h"
a925159
 #include "policy.h"
a925159
 #include <limits.h>
a925159
@@ -25,7 +24,7 @@
e0ab958
 	if (fd < 0)
e0ab958
 		return -1;
e0ab958
 
e0ab958
-	size = PAGE_SIZE;
e0ab958
+	size = selinux_page_size;
e0ab958
 	buf = malloc(size);
e0ab958
 	if (!buf) {
e0ab958
 		ret = -1;
98a597a
@@ -66,29 +65,21 @@
98a597a
 	security_context_t rtcon = tcon;
98a597a
 	security_context_t rnewcon;
98a597a
 
98a597a
-	if (context_translations) {
98a597a
-		if (trans_to_raw_context(scon, &rscon))
98a597a
-			return -1;
98a597a
-		if (trans_to_raw_context(tcon, &rtcon)) {
98a597a
-			freecon(rscon);
98a597a
-			return -1;
98a597a
-		}
98a597a
+	if (selinux_trans_to_raw_context(scon, &rscon))
98a597a
+		return -1;
98a597a
+	if (selinux_trans_to_raw_context(tcon, &rtcon)) {
98a597a
+		freecon(rscon);
98a597a
+		return -1;
98a597a
 	}
98a597a
 
98a597a
  	ret = security_compute_create_raw(rscon, rtcon, tclass, &rnewcon);
98a597a
 
98a597a
-	if (context_translations) {
98a597a
-		freecon(rscon);
98a597a
-		freecon(rtcon);
98a597a
-		if (!ret) {
98a597a
-			if (raw_to_trans_context(rnewcon, newcon)) {
98a597a
-				*newcon = NULL;
98a597a
-				ret = -1;
98a597a
-			}
98a597a
-			freecon(rnewcon);
98a597a
-		}
98a597a
-	} else if (!ret)
98a597a
-		*newcon = rnewcon;
98a597a
+	freecon(rscon);
98a597a
+	freecon(rtcon);
98a597a
+	if (!ret) {
98a597a
+		ret = selinux_raw_to_trans_context(rnewcon, newcon);
98a597a
+		freecon(rnewcon);
98a597a
+	}
98a597a
 
98a597a
 	return ret;
98a597a
 }
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/compute_member.c libselinux-1.30.3/src/compute_member.c
e0ab958
--- nsalibselinux/src/compute_member.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/compute_member.c	2006-05-03 11:01:44.000000000 -0400
a925159
@@ -5,7 +5,6 @@
a925159
 #include <stdio.h>
a925159
 #include <errno.h>
a925159
 #include <string.h>
a925159
-#include <asm/page.h>
a925159
 #include "selinux_internal.h"
a925159
 #include "policy.h"
a925159
 #include <limits.h>
a925159
@@ -25,7 +24,7 @@
e0ab958
 	if (fd < 0)
e0ab958
 		return -1;
e0ab958
 
e0ab958
-	size = PAGE_SIZE;
e0ab958
+	size = selinux_page_size;
e0ab958
 	buf = malloc(size);
e0ab958
 	if (!buf) {
e0ab958
 		ret = -1;
98a597a
@@ -66,29 +65,24 @@
98a597a
 	security_context_t rtcon = tcon;
98a597a
 	security_context_t rnewcon;
98a597a
 
98a597a
-	if (context_translations) {
98a597a
-		if (trans_to_raw_context(scon, &rscon))
98a597a
-			return -1;
98a597a
-		if (trans_to_raw_context(tcon, &rtcon)) {
98a597a
-			freecon(rscon);
98a597a
-			return -1;
98a597a
-		}
98a597a
+	if (selinux_trans_to_raw_context(scon, &rscon))
98a597a
+		return -1;
98a597a
+	if (selinux_trans_to_raw_context(tcon, &rtcon)) {
98a597a
+		freecon(rscon);
98a597a
+		return -1;
98a597a
 	}
98a597a
 
98a597a
  	ret = security_compute_member_raw(rscon, rtcon, tclass, &rnewcon);
98a597a
 
98a597a
-	if (context_translations) {
98a597a
-		freecon(rscon);
98a597a
-		freecon(rtcon);
98a597a
-		if (!ret) {
98a597a
-			if (raw_to_trans_context(rnewcon, newcon)) {
98a597a
-				*newcon = NULL;
98a597a
-				ret = -1;
98a597a
-			}
98a597a
-			freecon(rnewcon);
98a597a
+	freecon(rscon);
98a597a
+	freecon(rtcon);
98a597a
+	if (!ret) {
98a597a
+		if (selinux_raw_to_trans_context(rnewcon, newcon)) {
98a597a
+			*newcon = NULL;
98a597a
+			ret = -1;
98a597a
 		}
98a597a
-	} else if (!ret)
98a597a
-		*newcon = rnewcon;
98a597a
+		freecon(rnewcon);
98a597a
+	}
98a597a
 
98a597a
 	return ret;
98a597a
 }
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/compute_relabel.c libselinux-1.30.3/src/compute_relabel.c
e0ab958
--- nsalibselinux/src/compute_relabel.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/compute_relabel.c	2006-05-03 11:04:30.000000000 -0400
a925159
@@ -5,7 +5,6 @@
a925159
 #include <stdio.h>
a925159
 #include <errno.h>
a925159
 #include <string.h>
a925159
-#include <asm/page.h>
a925159
 #include "selinux_internal.h"
a925159
 #include "policy.h"
a925159
 #include <limits.h>
a925159
@@ -25,7 +24,7 @@
e0ab958
 	if (fd < 0)
e0ab958
 		return -1;
e0ab958
 
e0ab958
-	size = PAGE_SIZE;
e0ab958
+	size = selinux_page_size;
e0ab958
 	buf = malloc(size);
e0ab958
 	if (!buf) {
e0ab958
 		ret = -1;
98a597a
@@ -66,29 +65,21 @@
98a597a
 	security_context_t rtcon = tcon;
98a597a
 	security_context_t rnewcon;
98a597a
 
98a597a
-	if (context_translations) {
98a597a
-		if (trans_to_raw_context(scon, &rscon))
98a597a
-			return -1;
98a597a
-		if (trans_to_raw_context(tcon, &rtcon)) {
98a597a
-			freecon(rscon);
98a597a
-			return -1;
98a597a
-		}
98a597a
+	if (selinux_trans_to_raw_context(scon, &rscon))
98a597a
+		return -1;
98a597a
+	if (selinux_trans_to_raw_context(tcon, &rtcon)) {
98a597a
+		freecon(rscon);
98a597a
+		return -1;
98a597a
 	}
98a597a
 
98a597a
  	ret = security_compute_relabel_raw(rscon, rtcon, tclass, &rnewcon);
98a597a
 
98a597a
-	if (context_translations) {
98a597a
-		freecon(rscon);
98a597a
-		freecon(rtcon);
98a597a
-		if (!ret) {
98a597a
-			if (raw_to_trans_context(rnewcon, newcon)) {
98a597a
-				*newcon = NULL;
98a597a
-				ret = -1;
98a597a
-			}
98a597a
-			freecon(rnewcon);
98a597a
-		}
98a597a
-	} else if (!ret)
98a597a
-		*newcon = rnewcon;
98a597a
+	freecon(rscon);
98a597a
+	freecon(rtcon);
98a597a
+	if (!ret) {
98a597a
+		ret=selinux_raw_to_trans_context(rnewcon, newcon);
98a597a
+		freecon(rnewcon);
98a597a
+	}
98a597a
 
98a597a
 	return ret;
98a597a
 }
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/compute_user.c libselinux-1.30.3/src/compute_user.c
e0ab958
--- nsalibselinux/src/compute_user.c	2005-08-23 13:34:34.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/compute_user.c	2006-05-03 11:02:16.000000000 -0400
a925159
@@ -5,7 +5,6 @@
a925159
 #include <stdio.h>
a925159
 #include <errno.h>
a925159
 #include <string.h>
a925159
-#include <asm/page.h>
a925159
 #include "selinux_internal.h"
a925159
 #include "policy.h"
a925159
 #include <limits.h>
a925159
@@ -26,7 +25,7 @@
e0ab958
 	if (fd < 0)
e0ab958
 		return -1;
e0ab958
 
e0ab958
-	size = PAGE_SIZE;
e0ab958
+	size = selinux_page_size;
e0ab958
 	buf = malloc(size);
e0ab958
 	if (!buf) {
e0ab958
 		ret = -1;
98a597a
@@ -82,24 +81,22 @@
98a597a
 	int ret;
98a597a
 	security_context_t rscon = scon;
98a597a
 
98a597a
-	if (context_translations && trans_to_raw_context(scon, &rscon))
98a597a
+	if (selinux_trans_to_raw_context(scon, &rscon))
98a597a
 		return -1;
98a597a
 
98a597a
  	ret = security_compute_user_raw(rscon, user, con);
98a597a
 
98a597a
-	if (context_translations) {
98a597a
-		freecon(rscon);
98a597a
-		if (!ret) {
98a597a
-			security_context_t *ptr, tmpcon;
98a597a
-			for (ptr = *con; *ptr; ptr++) {
98a597a
-				if (raw_to_trans_context(*ptr, &tmpcon)) {
98a597a
-					freeconary(*con);
98a597a
-					*con = NULL;
98a597a
-					return -1;
98a597a
-				}
98a597a
-				freecon(*ptr);
98a597a
-				*ptr = tmpcon;
98a597a
+	freecon(rscon);
98a597a
+	if (!ret) {
98a597a
+		security_context_t *ptr, tmpcon;
98a597a
+		for (ptr = *con; *ptr; ptr++) {
98a597a
+			if (selinux_raw_to_trans_context(*ptr, &tmpcon)) {
98a597a
+				freeconary(*con);
98a597a
+				*con = NULL;
98a597a
+				return -1;
98a597a
 			}
98a597a
+			freecon(*ptr);
98a597a
+			*ptr = tmpcon;
98a597a
 		}
98a597a
 	}
98a597a
 
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/enabled.c libselinux-1.30.3/src/enabled.c
e0ab958
--- nsalibselinux/src/enabled.c	2005-08-23 13:34:34.000000000 -0400
a925159
+++ libselinux-1.30.3/src/enabled.c	2006-05-02 14:48:35.000000000 -0400
a925159
@@ -5,7 +5,6 @@
a925159
 #include <stdlib.h>
a925159
 #include <errno.h>
a925159
 #include <limits.h>
a925159
-#include <asm/page.h>
a925159
 #include <stdio.h>
a925159
 #include "policy.h"
a925159
 
a925159
@@ -22,7 +21,7 @@
e0ab958
 	if (fd < 0)
e0ab958
 		return -1;
e0ab958
 
e0ab958
-	size = PAGE_SIZE;
e0ab958
+	size = selinux_page_size;
e0ab958
 	buf = malloc(size);
e0ab958
 	if (!buf) {
e0ab958
 		enabled = -1;
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/fgetfilecon.c libselinux-1.30.3/src/fgetfilecon.c
98a597a
--- nsalibselinux/src/fgetfilecon.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/fgetfilecon.c	2006-05-03 10:55:46.000000000 -0400
98a597a
@@ -52,14 +52,10 @@
98a597a
 
98a597a
  	ret = fgetfilecon_raw(fd, &rcontext);
98a597a
 
98a597a
-	if (context_translations && ret > 0) {
98a597a
-		if (raw_to_trans_context(rcontext, context)) {
98a597a
-			*context = NULL;
98a597a
-			ret = -1;
98a597a
-		}
98a597a
+	if (ret > 0) {
98a597a
+		ret=selinux_raw_to_trans_context(rcontext, context);
98a597a
 		freecon(rcontext);
98a597a
-	} else if (ret > 0)
98a597a
-		*context = rcontext;
98a597a
+	} 
98a597a
 
98a597a
 	return ret;
98a597a
 }
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/fsetfilecon.c libselinux-1.30.3/src/fsetfilecon.c
98a597a
--- nsalibselinux/src/fsetfilecon.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/fsetfilecon.c	2006-05-03 11:02:20.000000000 -0400
98a597a
@@ -18,13 +18,12 @@
98a597a
 	int ret;
98a597a
 	security_context_t rcontext = context;
98a597a
 
98a597a
-	if (context_translations && trans_to_raw_context(context, &rcontext))
98a597a
+	if (selinux_trans_to_raw_context(context, &rcontext))
98a597a
 		return -1;
98a597a
 
98a597a
  	ret = fsetfilecon_raw(fd, rcontext);
98a597a
 
98a597a
-	if (context_translations)
98a597a
-		freecon(rcontext);
98a597a
+	freecon(rcontext);
98a597a
 
98a597a
 	return ret;
98a597a
 }
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/getcon.c libselinux-1.30.3/src/getcon.c
e0ab958
--- nsalibselinux/src/getcon.c	2005-08-23 13:34:34.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/getcon.c	2006-05-03 11:02:25.000000000 -0400
a925159
@@ -4,7 +4,6 @@
a925159
 #include "selinux_internal.h"
a925159
 #include <stdlib.h>
a925159
 #include <errno.h>
a925159
-#include <asm/page.h>
a925159
 #include "policy.h"
a925159
 
a925159
 int getcon_raw(security_context_t *context)
a925159
@@ -18,7 +17,7 @@
e0ab958
 	if (fd < 0)
e0ab958
 		return -1;
e0ab958
 
e0ab958
-	size = PAGE_SIZE;
e0ab958
+	size = selinux_page_size;
e0ab958
 	buf = malloc(size);
e0ab958
 	if (!buf) {
e0ab958
 		ret = -1;
98a597a
@@ -51,14 +50,13 @@
98a597a
 
98a597a
  	ret = getcon_raw(&rcontext);
98a597a
 
98a597a
-	if (context_translations && !ret) {
98a597a
-		if (raw_to_trans_context(rcontext, context)) {
98a597a
+	if (!ret) {
98a597a
+		if (selinux_raw_to_trans_context(rcontext, context)) {
98a597a
 			*context = NULL;
98a597a
 			ret = -1;
98a597a
 		}
98a597a
 		freecon(rcontext);
98a597a
-	} else if (!ret)
98a597a
-		*context = rcontext;
98a597a
+	} 
98a597a
 
98a597a
 	return ret;
98a597a
 }
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/getexeccon.c libselinux-1.30.3/src/getexeccon.c
e0ab958
--- nsalibselinux/src/getexeccon.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/getexeccon.c	2006-05-03 11:04:35.000000000 -0400
a925159
@@ -3,7 +3,6 @@
a925159
 #include <string.h>
a925159
 #include <stdlib.h>
a925159
 #include <errno.h>
a925159
-#include <asm/page.h>
a925159
 #include "selinux_internal.h"
a925159
 #include "policy.h"
a925159
 
a925159
@@ -18,7 +17,7 @@
e0ab958
 	if (fd < 0)
e0ab958
 		return -1;
e0ab958
 
e0ab958
-	size = PAGE_SIZE;
e0ab958
+	size = selinux_page_size;
e0ab958
 	buf = malloc(size);
e0ab958
 	if (!buf) {
e0ab958
 		ret = -1;
98a597a
@@ -56,14 +55,10 @@
98a597a
 
98a597a
  	ret = getexeccon_raw(&rcontext);
98a597a
 
98a597a
-	if (context_translations && !ret) {
98a597a
-		if (raw_to_trans_context(rcontext, context)) {
98a597a
-			*context = NULL;
98a597a
-			ret = -1;
98a597a
-		}
98a597a
+	if (!ret) {
98a597a
+		ret = selinux_raw_to_trans_context(rcontext, context);
98a597a
 		freecon(rcontext);
98a597a
-	} else if (!ret)
98a597a
-		*context = rcontext;
98a597a
+	} 
98a597a
 
98a597a
 	return ret;
98a597a
 }
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/getfilecon.c libselinux-1.30.3/src/getfilecon.c
98a597a
--- nsalibselinux/src/getfilecon.c	2005-08-23 13:34:34.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/getfilecon.c	2006-05-03 10:54:32.000000000 -0400
98a597a
@@ -52,14 +52,10 @@
98a597a
 
98a597a
  	ret = getfilecon_raw(path, &rcontext);
98a597a
 
98a597a
-	if (context_translations && ret > 0) {
98a597a
-		if (raw_to_trans_context(rcontext, context)) {
98a597a
-			*context = NULL;
98a597a
-			ret = -1;
98a597a
-		}
98a597a
+	if (ret > 0) {
98a597a
+		ret = selinux_raw_to_trans_context(rcontext, context);
98a597a
 		freecon(rcontext);
98a597a
-	} else if (ret > 0)
98a597a
-		*context = rcontext;
98a597a
+	} 
98a597a
 
98a597a
 	return ret;
98a597a
 }
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/getfscreatecon.c libselinux-1.30.3/src/getfscreatecon.c
e0ab958
--- nsalibselinux/src/getfscreatecon.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/getfscreatecon.c	2006-05-03 11:04:45.000000000 -0400
a925159
@@ -3,7 +3,6 @@
a925159
 #include <string.h>
a925159
 #include <stdlib.h>
a925159
 #include <errno.h>
a925159
-#include <asm/page.h>
a925159
 #include "selinux_internal.h"
a925159
 #include "policy.h"
a925159
 
a925159
@@ -18,7 +17,7 @@
e0ab958
 	if (fd < 0)
e0ab958
 		return -1;
e0ab958
 
e0ab958
-	size = PAGE_SIZE;
e0ab958
+	size = selinux_page_size;
e0ab958
 	buf = malloc(size);
e0ab958
 	if (!buf) {
e0ab958
 		ret = -1;
98a597a
@@ -56,14 +55,10 @@
98a597a
 
98a597a
  	ret = getfscreatecon_raw(&rcontext);
98a597a
 
98a597a
-	if (context_translations && !ret) {
98a597a
-		if (raw_to_trans_context(rcontext, context)) {
98a597a
-			*context = NULL;
98a597a
-			ret = -1;
98a597a
-		}
98a597a
+	if (!ret) {
98a597a
+		ret = selinux_raw_to_trans_context(rcontext, context);
98a597a
 		freecon(rcontext);
98a597a
-	} else if (!ret)
98a597a
-		*context = rcontext;
98a597a
+	} 
98a597a
 
98a597a
 	return ret;
98a597a
 }
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/getpeercon.c libselinux-1.30.3/src/getpeercon.c
98a597a
--- nsalibselinux/src/getpeercon.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/getpeercon.c	2006-05-03 11:03:09.000000000 -0400
98a597a
@@ -51,14 +51,10 @@
98a597a
 
98a597a
  	ret = getpeercon_raw(fd, &rcontext);
98a597a
 
98a597a
-	if (context_translations && !ret) {
98a597a
-		if (raw_to_trans_context(rcontext, context)) {
98a597a
-			*context = NULL;
98a597a
-			ret = -1;
98a597a
-		}
98a597a
+	if (!ret) {
98a597a
+		ret = selinux_raw_to_trans_context(rcontext, context);
98a597a
 		freecon(rcontext);
98a597a
-	} else if (!ret)
98a597a
-		*context = rcontext;
98a597a
+	} 
98a597a
 
98a597a
 	return ret;
98a597a
 }
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/getpidcon.c libselinux-1.30.3/src/getpidcon.c
e0ab958
--- nsalibselinux/src/getpidcon.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/getpidcon.c	2006-05-03 11:03:33.000000000 -0400
a925159
@@ -4,7 +4,6 @@
a925159
 #include <stdio.h>
a925159
 #include <stdlib.h>
a925159
 #include <errno.h>
a925159
-#include <asm/page.h>
a925159
 #include "selinux_internal.h"
a925159
 #include "policy.h"
a925159
 
a925159
@@ -22,7 +21,7 @@
e0ab958
 	if (fd < 0)
e0ab958
 		return -1;
e0ab958
 
e0ab958
-	size = PAGE_SIZE;
e0ab958
+	size = selinux_page_size;
e0ab958
 	buf = malloc(size);
e0ab958
 	if (!buf) {
e0ab958
 		ret = -1;
98a597a
@@ -55,14 +54,10 @@
98a597a
 
98a597a
  	ret = getpidcon_raw(pid, &rcontext);
98a597a
 
98a597a
-	if (context_translations && !ret) {
98a597a
-		if (raw_to_trans_context(rcontext, context)) {
98a597a
-			*context = NULL;
98a597a
-			ret = -1;
98a597a
-		}
98a597a
+	if (!ret) {
98a597a
+		ret = selinux_raw_to_trans_context(rcontext, context);
98a597a
 		freecon(rcontext);
98a597a
-	} else if (!ret)
98a597a
-		*context = rcontext;
98a597a
+	} 
98a597a
 
98a597a
 	return ret;
98a597a
 }
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/getprevcon.c libselinux-1.30.3/src/getprevcon.c
e0ab958
--- nsalibselinux/src/getprevcon.c	2005-08-23 13:34:34.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/getprevcon.c	2006-05-03 11:03:45.000000000 -0400
a925159
@@ -4,7 +4,6 @@
a925159
 #include "selinux_internal.h"
a925159
 #include <stdlib.h>
a925159
 #include <errno.h>
a925159
-#include <asm/page.h>
a925159
 #include "policy.h"
a925159
 
a925159
 int getprevcon_raw(security_context_t *context)
a925159
@@ -18,7 +17,7 @@
e0ab958
 	if (fd < 0)
e0ab958
 		return -1;
e0ab958
 
e0ab958
-	size = PAGE_SIZE;
e0ab958
+	size = selinux_page_size;
e0ab958
 	buf = malloc(size);
e0ab958
 	if (!buf) {
e0ab958
 		ret = -1;
98a597a
@@ -51,14 +50,10 @@
98a597a
 
98a597a
  	ret = getprevcon_raw(&rcontext);
98a597a
 
98a597a
-	if (context_translations && !ret) {
98a597a
-		if (raw_to_trans_context(rcontext, context)) {
98a597a
-			*context = NULL;
98a597a
-			ret = -1;
98a597a
-		}
98a597a
+	if (!ret) {
98a597a
+		ret = selinux_raw_to_trans_context(rcontext, context);
98a597a
 		freecon(rcontext);
98a597a
-	} else if (!ret)
98a597a
-		*context = rcontext;
98a597a
+	} 
98a597a
 
98a597a
 	return ret;
98a597a
 }
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/init.c libselinux-1.30.3/src/init.c
e0ab958
--- nsalibselinux/src/init.c	2005-12-14 14:16:46.000000000 -0500
98a597a
+++ libselinux-1.30.3/src/init.c	2006-05-03 10:30:57.000000000 -0400
a925159
@@ -4,15 +4,16 @@
a925159
 #include <stdlib.h>
a925159
 #include <errno.h>
a925159
 #include <ctype.h>
a925159
-#include <asm/page.h>
e0ab958
 #include <stdio.h>
e0ab958
 #include <dlfcn.h>
e0ab958
+#include <unistd.h>
e0ab958
 
e0ab958
 #include "dso.h"
e0ab958
 #include "policy.h"
e0ab958
 #include "selinux_internal.h"
e0ab958
 
e0ab958
 char *selinux_mnt = NULL;
e0ab958
+int selinux_page_size=0;
e0ab958
 
e0ab958
 static void init_selinuxmnt(void)
e0ab958
 {
a925159
@@ -27,11 +28,12 @@
e0ab958
 	if (!fp)
e0ab958
 		return;
e0ab958
 
e0ab958
-	size = PAGE_SIZE;
e0ab958
+	size = selinux_page_size;
e0ab958
+
e0ab958
 	buf = malloc(size);
e0ab958
 	if (!buf)
e0ab958
 		goto out;
e0ab958
-		
e0ab958
+
e0ab958
 	memset(buf, 0, size);
e0ab958
 
e0ab958
 	while(( bufp = fgets_unlocked(buf, size, fp)))
98a597a
@@ -75,65 +77,15 @@
98a597a
 }
98a597a
 hidden_def(set_selinuxmnt)
98a597a
  
98a597a
-int context_translations hidden;
98a597a
-void *translation_lib_handle hidden;
98a597a
-
98a597a
-/* from libsetrans.c */
98a597a
-extern int hidden (*lib_trans_to_raw_context)(char *trans, char **rawp);
98a597a
-extern int hidden (*lib_raw_to_trans_context)(char *raw, char **transp);
98a597a
-
98a597a
-
98a597a
 static void init_translations(void)
98a597a
 {
98a597a
-#ifdef SHARED
98a597a
-	int (*lib_trans_init)(void) = NULL;
98a597a
-
98a597a
-	translation_lib_handle = dlopen("libsetrans.so.0", RTLD_NOW);
98a597a
-	if (!translation_lib_handle)
98a597a
-		return;
98a597a
-
98a597a
-	dlerror();
98a597a
-
98a597a
-	lib_trans_init = dlsym(translation_lib_handle,
98a597a
-	                       "init_context_translations");
98a597a
-	if (dlerror() || lib_trans_init())
98a597a
-		return;
98a597a
-
98a597a
-	lib_raw_to_trans_context = dlsym(translation_lib_handle,
98a597a
-	                                 "translate_context");
98a597a
-	if (dlerror())
98a597a
-		return;
98a597a
-
98a597a
-	lib_trans_to_raw_context = dlsym(translation_lib_handle,
98a597a
-	                                 "untranslate_context");
98a597a
-	if (dlerror())
98a597a
-		return;
98a597a
-
98a597a
-	context_translations = 1;
98a597a
-#endif
98a597a
-}
98a597a
-
98a597a
-static void fini_translations(void)
98a597a
-{
98a597a
-#ifdef SHARED
98a597a
-	context_translations = 0;
98a597a
-	if (translation_lib_handle) {
98a597a
-		int (*lib_trans_finish)(void) = NULL;
98a597a
-
98a597a
-		lib_trans_finish = dlsym(translation_lib_handle,
98a597a
-					 "finish_context_translations");
98a597a
-		if (! dlerror()) 
98a597a
-			lib_trans_finish();
98a597a
-		
98a597a
-		dlclose(translation_lib_handle);
98a597a
-		translation_lib_handle = NULL;
98a597a
-	}
98a597a
-#endif
98a597a
+	init_context_translations();
98a597a
 }
98a597a
 
e0ab958
 static void init_lib(void) __attribute__ ((constructor));
e0ab958
 static void init_lib(void)
e0ab958
 {
e0ab958
+	selinux_page_size = sysconf(_SC_PAGE_SIZE);
e0ab958
 	init_selinuxmnt();
e0ab958
 	init_translations();
e0ab958
 }
98a597a
@@ -141,6 +93,5 @@
98a597a
 static void fini_lib(void) __attribute__ ((destructor));
98a597a
 static void fini_lib(void)
98a597a
 {
98a597a
-	fini_translations();
98a597a
 	fini_selinuxmnt();
98a597a
 }
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/lgetfilecon.c libselinux-1.30.3/src/lgetfilecon.c
98a597a
--- nsalibselinux/src/lgetfilecon.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/lgetfilecon.c	2006-05-03 10:55:25.000000000 -0400
98a597a
@@ -52,14 +52,10 @@
98a597a
 
98a597a
  	ret = lgetfilecon_raw(path, &rcontext);
98a597a
 
98a597a
-	if (context_translations && ret > 0) {
98a597a
-		if (raw_to_trans_context(rcontext, context)) {
98a597a
-			*context = NULL;
98a597a
-			ret = -1;
98a597a
-		}
98a597a
+	if (ret > 0) {
98a597a
+		ret = selinux_raw_to_trans_context(rcontext, context);
98a597a
 		freecon(rcontext);
98a597a
-	} else if (ret > 0)
98a597a
-		*context = rcontext;
98a597a
+	} 
98a597a
 
98a597a
 	return ret;
98a597a
 }
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/lsetfilecon.c libselinux-1.30.3/src/lsetfilecon.c
98a597a
--- nsalibselinux/src/lsetfilecon.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/lsetfilecon.c	2006-05-03 11:03:50.000000000 -0400
98a597a
@@ -18,13 +18,12 @@
98a597a
 	int ret;
98a597a
 	security_context_t rcontext = context;
98a597a
 
98a597a
-	if (context_translations && trans_to_raw_context(context, &rcontext))
98a597a
+	if (selinux_trans_to_raw_context(context, &rcontext))
98a597a
 		return -1;
98a597a
 
98a597a
  	ret = lsetfilecon_raw(path, rcontext);
98a597a
 
98a597a
-	if (context_translations)
98a597a
-		freecon(rcontext);
98a597a
+	freecon(rcontext);
98a597a
 
98a597a
 	return ret;
98a597a
 }
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/matchmediacon.c libselinux-1.30.3/src/matchmediacon.c
98a597a
--- nsalibselinux/src/matchmediacon.c	2005-08-23 13:34:34.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/matchmediacon.c	2006-05-03 11:03:54.000000000 -0400
98a597a
@@ -59,13 +59,10 @@
98a597a
 		return -1;
98a597a
 	}
98a597a
 
98a597a
-	if (context_translations) {
98a597a
-		if (raw_to_trans_context(ptr2, con)) {
98a597a
-			*con = NULL;
98a597a
-			return -1;
98a597a
-		}
98a597a
-	} else
98a597a
-		*con = strdup(ptr2);
98a597a
+	if (selinux_raw_to_trans_context(ptr2, con)) {
98a597a
+		*con = NULL;
98a597a
+		return -1;
98a597a
+	}
98a597a
 
98a597a
 	return 0;
98a597a
 }
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/matchpathcon.c libselinux-1.30.3/src/matchpathcon.c
98a597a
--- nsalibselinux/src/matchpathcon.c	2006-04-14 07:21:23.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/matchpathcon.c	2006-05-03 11:04:01.000000000 -0400
98a597a
@@ -591,19 +591,14 @@
98a597a
 			if (myflags & MATCHPATHCON_NOTRANS)
98a597a
 				goto skip_trans;
98a597a
 
98a597a
-			if (context_translations) {
98a597a
-				if (raw_to_trans_context(context, &tmpcon)) {
98a597a
-					myprintf("%s: line %u has invalid "
98a597a
-					         "context %s\n",
98a597a
-					         path, lineno, context);
98a597a
-					return 0;
98a597a
-				}
98a597a
-				free(context);
98a597a
-				context = tmpcon;
98a597a
-			} else {
98a597a
-				if (STRIP_LEVEL(&context, mls_enabled))
98a597a
-					return -1;
98a597a
+			if (selinux_raw_to_trans_context(context, &tmpcon)) {
98a597a
+				myprintf("%s: line %u has invalid "
98a597a
+					 "context %s\n",
98a597a
+					 path, lineno, context);
98a597a
+				return 0;
98a597a
 			}
98a597a
+			free(context);
98a597a
+			context = tmpcon;
98a597a
 
98a597a
 skip_trans:
98a597a
 			if (myflags & MATCHPATHCON_VALIDATE) {
e0ab958
diff --exclude-from=exclude -N -u -r nsalibselinux/src/selinux_internal.h libselinux-1.30.3/src/selinux_internal.h
e0ab958
--- nsalibselinux/src/selinux_internal.h	2005-12-01 10:10:32.000000000 -0500
98a597a
+++ libselinux-1.30.3/src/selinux_internal.h	2006-05-03 10:56:53.000000000 -0400
98a597a
@@ -65,9 +65,6 @@
98a597a
 hidden_proto(selinux_translations_path);
98a597a
 hidden_proto(selinux_getenforcemode);
e0ab958
 
98a597a
-extern int context_translations hidden;
98a597a
-extern int hidden trans_to_raw_context(char *trans, char **rawp);
98a597a
-extern int hidden raw_to_trans_context(char *raw, char **transp);
98a597a
-
e0ab958
 extern int load_setlocaldefs hidden;
e0ab958
 extern int require_seusers hidden;
e0ab958
+extern int selinux_page_size hidden;
75c50e4
diff --exclude-from=exclude -N -u -r nsalibselinux/src/selinuxswig.i libselinux-1.30.3/src/selinuxswig.i
75c50e4
--- nsalibselinux/src/selinuxswig.i	2006-04-14 07:21:23.000000000 -0400
75c50e4
+++ libselinux-1.30.3/src/selinuxswig.i	2006-05-02 13:08:05.000000000 -0400
75c50e4
@@ -28,9 +28,18 @@
75c50e4
 %typemap(in, numinputs=0) security_context_t *(security_context_t temp) {
c8030dc
 	$1 = &tem;;
c8030dc
 }
75c50e4
-%typemap(argout) security_context_t * {
75c50e4
-	$result = SWIG_Python_AppendOutput($result, PyString_FromString(*$1));
75c50e4
+%typemap(argout) security_context_t * (char *temp) {
75c50e4
+	if (*$1)
75c50e4
+		temp = *$1;
75c50e4
+	else
75c50e4
+		temp = "";
75c50e4
+	$result = SWIG_Python_AppendOutput($result, PyString_FromString(temp));
75c50e4
+}
75c50e4
+
75c50e4
+%typemap(in) security_context_t {
75c50e4
+	$1 = (security_context_t)PyString_AsString($input);
c8030dc
 }
75c50e4
+
75c50e4
 %typedef unsigned mode_t;
c8030dc
 
c8030dc
 extern int is_selinux_enabled(void);
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/setcon.c libselinux-1.30.3/src/setcon.c
98a597a
--- nsalibselinux/src/setcon.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/setcon.c	2006-05-03 11:04:05.000000000 -0400
98a597a
@@ -32,13 +32,12 @@
98a597a
 	int ret;
98a597a
 	security_context_t rcontext = context;
98a597a
 
98a597a
-	if (context_translations && trans_to_raw_context(context, &rcontext))
98a597a
+	if (selinux_trans_to_raw_context(context, &rcontext))
98a597a
 		return -1;
98a597a
 
98a597a
  	ret = setcon_raw(rcontext);
98a597a
 
98a597a
-	if (context_translations)
98a597a
-		freecon(rcontext);
98a597a
+	freecon(rcontext);
98a597a
 
98a597a
 	return ret;
98a597a
 }
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/setexeccon.c libselinux-1.30.3/src/setexeccon.c
98a597a
--- nsalibselinux/src/setexeccon.c	2005-08-23 13:34:34.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/setexeccon.c	2006-05-03 11:04:09.000000000 -0400
98a597a
@@ -28,13 +28,12 @@
98a597a
 	int ret;
98a597a
 	security_context_t rcontext = context;
98a597a
 
98a597a
-	if (context_translations && trans_to_raw_context(context, &rcontext))
98a597a
+	if (selinux_trans_to_raw_context(context, &rcontext))
98a597a
 		return -1;
98a597a
 
98a597a
  	ret = setexeccon_raw(rcontext);
98a597a
 
98a597a
-	if (context_translations)
98a597a
-		freecon(rcontext);
98a597a
+	freecon(rcontext);
98a597a
 
98a597a
 	return ret;
98a597a
 }
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/setfilecon.c libselinux-1.30.3/src/setfilecon.c
98a597a
--- nsalibselinux/src/setfilecon.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/setfilecon.c	2006-05-03 11:04:13.000000000 -0400
98a597a
@@ -18,13 +18,12 @@
98a597a
 	int ret;
98a597a
 	security_context_t rcontext = context;
98a597a
 
98a597a
-	if (context_translations && trans_to_raw_context(context, &rcontext))
98a597a
+	if (selinux_trans_to_raw_context(context, &rcontext))
98a597a
 		return -1;
98a597a
 
98a597a
  	ret = setfilecon_raw(path, rcontext);
98a597a
 
98a597a
-	if (context_translations)
98a597a
-		freecon(rcontext);
98a597a
+	freecon(rcontext);
98a597a
 
98a597a
 	return ret;
98a597a
 }
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/setfscreatecon.c libselinux-1.30.3/src/setfscreatecon.c
98a597a
--- nsalibselinux/src/setfscreatecon.c	2005-08-25 11:32:02.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/setfscreatecon.c	2006-05-03 11:04:17.000000000 -0400
98a597a
@@ -28,13 +28,12 @@
98a597a
 	int ret;
98a597a
 	security_context_t rcontext = context;
98a597a
 
98a597a
-	if (context_translations && trans_to_raw_context(context, &rcontext))
98a597a
+	if (selinux_trans_to_raw_context(context, &rcontext))
98a597a
 		return -1;
98a597a
 
98a597a
  	ret = setfscreatecon_raw(rcontext);
98a597a
 
98a597a
-	if (context_translations)
98a597a
-		freecon(rcontext);
98a597a
+	freecon(rcontext);
98a597a
 
98a597a
 	return ret;
98a597a
 }
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/setrans_client.c libselinux-1.30.3/src/setrans_client.c
98a597a
--- nsalibselinux/src/setrans_client.c	1969-12-31 19:00:00.000000000 -0500
98a597a
+++ libselinux-1.30.3/src/setrans_client.c	2006-05-03 10:56:24.000000000 -0400
98a597a
@@ -0,0 +1,246 @@
98a597a
+/* Copyright (c) 2006 Trusted Computer Solutions, Inc. */
98a597a
+
98a597a
+#include <sys/types.h>
98a597a
+#include <sys/socket.h>
98a597a
+#include <sys/un.h>
98a597a
+
98a597a
+#include <errno.h>
98a597a
+#include <stdlib.h>
98a597a
+#include <netdb.h>
98a597a
+
98a597a
+#include <stdio.h>
98a597a
+#include <string.h>
98a597a
+#include <ctype.h>
98a597a
+#include <unistd.h>
98a597a
+#include <selinux/selinux.h>
98a597a
+#include "selinux/setrans.h"
98a597a
+#include "dso.h"
98a597a
+
98a597a
+
98a597a
+/*
98a597a
+ * setransd_open
98a597a
+ *
98a597a
+ * This function opens a socket to the setransd.
98a597a
+ * Returns:  on success, a file descriptor ( >= 0 ) to the socket
98a597a
+ *           on error, a negative value
98a597a
+ */
98a597a
+static int
98a597a
+setransd_open(void)
98a597a
+{
98a597a
+	struct sockaddr_un addr;
98a597a
+	int fd;
98a597a
+
98a597a
+	fd = socket(PF_UNIX, SOCK_STREAM, 0);
98a597a
+	if (fd < 0)	{
98a597a
+		return -1;
98a597a
+	}
98a597a
+
98a597a
+	memset(&addr, 0, sizeof(addr));
98a597a
+	addr.sun_family = AF_UNIX;
98a597a
+	strcpy(addr.sun_path, SETRANS_UNIX_SOCKET);
98a597a
+	if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
98a597a
+		close(fd);
98a597a
+		return -1;
98a597a
+	}
98a597a
+
98a597a
+	return fd;
98a597a
+}
98a597a
+
98a597a
+/* Returns: 0 on success, <0 on failure */
98a597a
+static int
98a597a
+send_request(int fd, uint32_t function, const char *data1, const char *data2)
98a597a
+{
98a597a
+	struct iovec req_hdr[4];
98a597a
+	uint32_t data1_size;
98a597a
+	uint32_t data2_size;
98a597a
+	struct iovec req_data[2];
98a597a
+	ssize_t count;
98a597a
+
98a597a
+	if (fd < 0)
98a597a
+		return -1;
98a597a
+
98a597a
+	if (!data1)
98a597a
+		data1 = "";
98a597a
+	if (!data2)
98a597a
+		data2 = "";
98a597a
+
98a597a
+	data1_size = strlen(data1) + 1;
98a597a
+	data2_size = strlen(data2) + 1;
98a597a
+
98a597a
+	req_hdr[0].iov_base = &function;
98a597a
+	req_hdr[0].iov_len = sizeof(function);
98a597a
+	req_hdr[1].iov_base = &data1_size;
98a597a
+	req_hdr[1].iov_len = sizeof(data1_size);
98a597a
+	req_hdr[2].iov_base = &data2_size;
98a597a
+	req_hdr[2].iov_len = sizeof(data2_size);
98a597a
+
98a597a
+	while (((count = writev(fd, req_hdr, 3)) < 0) && (errno == EINTR));
98a597a
+	if (count != (sizeof(function) + sizeof(data1_size) +
98a597a
+	              sizeof(data2_size) )) {
98a597a
+		return -1;
98a597a
+	}
98a597a
+
98a597a
+	req_data[0].iov_base = (char *)data1;
98a597a
+	req_data[0].iov_len = data1_size;
98a597a
+	req_data[1].iov_base = (char *)data2;
98a597a
+	req_data[1].iov_len = data2_size;
98a597a
+
98a597a
+	while (((count = writev(fd, req_data, 2)) < 0) && (errno == EINTR));
98a597a
+	if (count < 0 || (uint32_t)count != (data1_size + data2_size)) {
98a597a
+		return -1;
98a597a
+	}
98a597a
+
98a597a
+	return 0;
98a597a
+}
98a597a
+
98a597a
+/* Returns: 0 on success, <0 on failure */
98a597a
+static int
98a597a
+receive_response(int fd, uint32_t function, char **outdata, int32_t *ret_val)
98a597a
+{
98a597a
+	struct iovec resp_hdr[3];
98a597a
+	uint32_t func;
98a597a
+	uint32_t data_size;
98a597a
+	char *data;
98a597a
+	struct iovec resp_data;
98a597a
+	ssize_t count;
98a597a
+
98a597a
+	if (fd < 0)
98a597a
+		return -1;
98a597a
+
98a597a
+	resp_hdr[0].iov_base = &func;
98a597a
+	resp_hdr[0].iov_len = sizeof(func);
98a597a
+	resp_hdr[1].iov_base = &data_size;
98a597a
+	resp_hdr[1].iov_len = sizeof(data_size);
98a597a
+	resp_hdr[2].iov_base = ret_val;
98a597a
+	resp_hdr[2].iov_len = sizeof(*ret_val);
98a597a
+
98a597a
+	while (((count = readv(fd, resp_hdr, 3)) < 0) && (errno == EINTR));
98a597a
+	if (count != (sizeof(func) + sizeof(data_size) + sizeof(*ret_val))) {
98a597a
+		return -1;
98a597a
+	}
98a597a
+
98a597a
+	if (func != function || !data_size) {
98a597a
+		return -1;
98a597a
+	}
98a597a
+
98a597a
+	data = malloc(data_size);
98a597a
+	if (!data) {
98a597a
+		return -1; 
98a597a
+	}
98a597a
+
98a597a
+	resp_data.iov_base = data;
98a597a
+	resp_data.iov_len = data_size;
98a597a
+
98a597a
+	while (((count = readv(fd, &resp_data, 1))) < 0 && (errno == EINTR));
98a597a
+	if (count < 0 || (uint32_t)count != data_size || data[data_size - 1] != '\0') {
98a597a
+		free(data);
98a597a
+		return -1;
98a597a
+	}
98a597a
+
98a597a
+	*outdata = data;
98a597a
+	return 0;
98a597a
+}
98a597a
+
98a597a
+static int raw_to_trans_context(char *raw, char **transp) 
98a597a
+{
98a597a
+	int ret;
98a597a
+	int32_t ret_val;
98a597a
+	int fd;
98a597a
+
98a597a
+	*transp = NULL;
98a597a
+
98a597a
+	fd = setransd_open();
98a597a
+	if (fd < 0)
98a597a
+                return fd;
98a597a
+
98a597a
+	ret = send_request(fd, RAW_TO_TRANS_CONTEXT, raw, NULL);
98a597a
+	if (ret)
98a597a
+		goto out;
98a597a
+
98a597a
+	ret = receive_response(fd, RAW_TO_TRANS_CONTEXT, transp, &ret_val);
98a597a
+	if (ret)
98a597a
+		goto out;
98a597a
+
98a597a
+	ret = ret_val;
98a597a
+out:
98a597a
+	close(fd);
98a597a
+	return ret;
98a597a
+}
98a597a
+
98a597a
+static int trans_to_raw_context(char *trans, char **rawp)
98a597a
+{
98a597a
+	int ret;
98a597a
+	int32_t ret_val;
98a597a
+	int fd;
98a597a
+
98a597a
+	*rawp = NULL;
98a597a
+
98a597a
+	fd = setransd_open();
98a597a
+	if (fd < 0)
98a597a
+                return fd;
98a597a
+	ret = send_request(fd, TRANS_TO_RAW_CONTEXT, trans, NULL);
98a597a
+	if (ret)
98a597a
+		goto out;
98a597a
+
98a597a
+	ret = receive_response(fd, TRANS_TO_RAW_CONTEXT, rawp, &ret_val);
98a597a
+	if (ret)
98a597a
+		goto out;
98a597a
+
98a597a
+	ret = ret_val;
98a597a
+out:
98a597a
+	close(fd);
98a597a
+	return ret_val;
98a597a
+}
98a597a
+
98a597a
+
98a597a
+int
98a597a
+init_context_translations(void)
98a597a
+{
98a597a
+	int ret, fd;
98a597a
+	int32_t ret_val;
98a597a
+	char *out = NULL;
98a597a
+
98a597a
+	fd = setransd_open();
98a597a
+	if (fd < 0)
98a597a
+		return fd;
98a597a
+
98a597a
+	ret = send_request(fd, SETRANS_INIT, NULL, NULL);
98a597a
+	if (ret)
98a597a
+		goto out;
98a597a
+
98a597a
+	ret = receive_response(fd, SETRANS_INIT, &out, &ret_val);
98a597a
+	free(out);
98a597a
+	if (!ret)
98a597a
+		ret = ret_val;
98a597a
+out:
98a597a
+	close(fd);
98a597a
+	return ret;
98a597a
+}
98a597a
+
98a597a
+
98a597a
+int selinux_trans_to_raw_context(security_context_t trans, 
98a597a
+				 security_context_t *rawp)
98a597a
+{
98a597a
+	if (!trans) {
98a597a
+		*rawp = NULL;
98a597a
+		return 0;
98a597a
+	}
98a597a
+
98a597a
+	if (trans_to_raw_context(trans, rawp))
98a597a
+		*rawp = strdup(trans);
98a597a
+	return *rawp ? 0 : -1;
98a597a
+}
98a597a
+
98a597a
+int selinux_raw_to_trans_context(security_context_t raw, 
98a597a
+				 security_context_t *transp)
98a597a
+{
98a597a
+	if (!raw) {
98a597a
+		*transp = NULL;
98a597a
+		return 0;
98a597a
+	}
98a597a
+
98a597a
+	if (raw_to_trans_context(raw, transp)) 
98a597a
+		*transp = strdup(raw);
98a597a
+
98a597a
+	return *transp ? 0 : -1;
98a597a
+}
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/setrans_internal.h libselinux-1.30.3/src/setrans_internal.h
98a597a
--- nsalibselinux/src/setrans_internal.h	1969-12-31 19:00:00.000000000 -0500
98a597a
+++ libselinux-1.30.3/src/setrans_internal.h	2006-05-03 09:18:19.000000000 -0400
98a597a
@@ -0,0 +1,8 @@
98a597a
+/* Copyright (c) 2006 Trusted Computer Solutions, Inc. */
98a597a
+
98a597a
+#define SETRANS_UNIX_SOCKET "/var/.setrans-unix"
98a597a
+
98a597a
+#define SETRANS_INIT		1
98a597a
+#define RAW_TO_TRANS_CONTEXT		2
98a597a
+#define TRANS_TO_RAW_CONTEXT		3
98a597a
+
98a597a
diff --exclude-from=exclude -N -u -r nsalibselinux/src/trans.c libselinux-1.30.3/src/trans.c
98a597a
--- nsalibselinux/src/trans.c	2005-08-31 12:33:10.000000000 -0400
98a597a
+++ libselinux-1.30.3/src/trans.c	1969-12-31 19:00:00.000000000 -0500
98a597a
@@ -1,59 +0,0 @@
98a597a
-#include "selinux_internal.h"
98a597a
-#include <string.h>
98a597a
-
98a597a
-int (*lib_trans_to_raw_context)(char *trans, char **rawp) hidden;
98a597a
-int (*lib_raw_to_trans_context)(char *raw, char **transp) hidden;
98a597a
-
98a597a
-int hidden trans_to_raw_context(char *trans, char **rawp)
98a597a
-{
98a597a
-	*rawp = NULL;
98a597a
-	if (!trans)
98a597a
-		return 0;
98a597a
-
98a597a
-	if (trans && lib_trans_to_raw_context(trans, rawp))
98a597a
-		*rawp = strdup(trans);
98a597a
-
98a597a
-	return *rawp ? 0 : -1;
98a597a
-}
98a597a
-
98a597a
-int selinux_trans_to_raw_context(security_context_t trans, 
98a597a
-				 security_context_t *rawp)
98a597a
-{
98a597a
-	if (context_translations)
98a597a
-		return trans_to_raw_context(trans, rawp);
98a597a
-
98a597a
-	if (!trans) {
98a597a
-		*rawp = NULL;
98a597a
-		return 0;
98a597a
-	}
98a597a
-
98a597a
-	*rawp = strdup(trans);
98a597a
-	return *rawp ? 0 : -1;
98a597a
-}
98a597a
-
98a597a
-int hidden raw_to_trans_context(char *raw, char **transp) 
98a597a
-{
98a597a
-	*transp = NULL;
98a597a
-	if (!raw)
98a597a
-		return 0;
98a597a
-
98a597a
-	if (raw && lib_raw_to_trans_context(raw, transp))
98a597a
-		*transp = strdup(raw);
98a597a
-
98a597a
-	return *transp ? 0 : -1;
98a597a
-}
98a597a
-
98a597a
-int selinux_raw_to_trans_context(security_context_t raw, 
98a597a
-				 security_context_t *transp)
98a597a
-{
98a597a
-	if (context_translations)
98a597a
-		return raw_to_trans_context(raw, transp);
98a597a
-
98a597a
-	if (!raw) {
98a597a
-		*transp = NULL;
98a597a
-		return 0;
98a597a
-	}
98a597a
-
98a597a
-	*transp = strdup(raw);
98a597a
-	return *transp ? 0 : -1;
98a597a
-}