Update SuperSU for 4.3 SELinux, 2.6.1.0

Change-Id: Ib7f882db8a8c61d1156c03468208205124132b6c
diff --git a/prebuilt/99SuperSUDaemon b/prebuilt/99SuperSUDaemon
new file mode 100755
index 0000000..de738c1
--- /dev/null
+++ b/prebuilt/99SuperSUDaemon
@@ -0,0 +1,2 @@
+#!/system/bin/sh
+/system/xbin/daemonsu --auto-daemon &
diff --git a/prebuilt/Android.mk b/prebuilt/Android.mk
index 73432b3..08e09ac 100644
--- a/prebuilt/Android.mk
+++ b/prebuilt/Android.mk
@@ -234,6 +234,24 @@
 	LOCAL_SRC_FILES := $(LOCAL_MODULE)
 	include $(BUILD_PREBUILT)
 
+       #install-recovery.sh
+	include $(CLEAR_VARS)
+	LOCAL_MODULE := install-recovery.sh
+	LOCAL_MODULE_TAGS := eng
+	LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+	LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/supersu
+	LOCAL_SRC_FILES := $(LOCAL_MODULE)
+	include $(BUILD_PREBUILT)
+
+       #99SuperSUDaemon
+	include $(CLEAR_VARS)
+	LOCAL_MODULE := 99SuperSUDaemon
+	LOCAL_MODULE_TAGS := eng
+	LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+	LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/supersu
+	LOCAL_SRC_FILES := $(LOCAL_MODULE)
+	include $(BUILD_PREBUILT)
+
 	#SuperSU special installer APK
 	include $(CLEAR_VARS)
 	LOCAL_MODULE := Superuser.apk
diff --git a/prebuilt/chattr b/prebuilt/chattr
new file mode 100755
index 0000000..12ccf86
--- /dev/null
+++ b/prebuilt/chattr
Binary files differ
diff --git a/prebuilt/install-recovery.sh b/prebuilt/install-recovery.sh
new file mode 100755
index 0000000..9b43745
--- /dev/null
+++ b/prebuilt/install-recovery.sh
@@ -0,0 +1,19 @@
+#!/system/bin/sh
+
+# If you're implementing this in a custom kernel/firmware,
+# I suggest you use a different script name, and add a service
+# to launch it from init.rc
+
+# Launches SuperSU in daemon mode only on Android 4.3+.
+# Nothing will happen on 4.2.x or older.
+# If you want to force loading the daemon, use "--daemon" instead
+
+/system/xbin/daemonsu --auto-daemon &
+
+# Some apps like to run stuff from this script as well, but the
+# installer will have done "chattr +i" on this file to prevent
+# accidental modification and deletion. In your code, just search 
+# this file for "install-recovery-2.sh", and if present, write
+# there instead.
+
+/system/etc/install-recovery-2.sh
diff --git a/prebuilt/su b/prebuilt/su
index 7d31770..da77f0a 100755
--- a/prebuilt/su
+++ b/prebuilt/su
Binary files differ
diff --git a/twrp-functions.cpp b/twrp-functions.cpp
index e54e760..3c379d1 100644
--- a/twrp-functions.cpp
+++ b/twrp-functions.cpp
@@ -560,6 +560,17 @@
 			return false;
 		}
 	}
+	file = "/system/xbin/daemonsu";
+	if (TWFunc::Path_Exists(file)) {
+		if (chown(file.c_str(), 0, 0) != 0) {
+			LOGERR("Failed to chown '%s'\n", file.c_str());
+			return false;
+		}
+		if (tw_chmod(file, "6755") != 0) {
+			LOGERR("Failed to chmod '%s'\n", file.c_str());
+			return false;
+		}
+	}
 	file = "/system/bin/.ext/.su";
 	if (TWFunc::Path_Exists(file)) {
 		if (chown(file.c_str(), 0, 0) != 0) {
@@ -571,6 +582,28 @@
 			return false;
 		}
 	}
+	file = "/system/etc/install-recovery.sh";
+	if (TWFunc::Path_Exists(file)) {
+		if (chown(file.c_str(), 0, 0) != 0) {
+			LOGERR("Failed to chown '%s'\n", file.c_str());
+			return false;
+		}
+		if (tw_chmod(file, "0755") != 0) {
+			LOGERR("Failed to chmod '%s'\n", file.c_str());
+			return false;
+		}
+	}
+	file = "/system/etc/init.d/99SuperSUDaemon";
+	if (TWFunc::Path_Exists(file)) {
+		if (chown(file.c_str(), 0, 0) != 0) {
+			LOGERR("Failed to chown '%s'\n", file.c_str());
+			return false;
+		}
+		if (tw_chmod(file, "0755") != 0) {
+			LOGERR("Failed to chmod '%s'\n", file.c_str());
+			return false;
+		}
+	}
 	file = "/system/app/Superuser.apk";
 	if (TWFunc::Path_Exists(file)) {
 		if (chown(file.c_str(), 0, 0) != 0) {
@@ -696,13 +729,42 @@
 }
 
 bool TWFunc::Install_SuperSU(void) {
+	string status;
+
 	if (!PartitionManager.Mount_By_Path("/system", true))
 		return false;
 
+	TWFunc::Exec_Cmd("/sbin/chattr -i /system/xbin/su", status);
 	if (copy_file("/supersu/su", "/system/xbin/su", 0755) != 0) {
 		LOGERR("Failed to copy su binary to /system/bin\n");
 		return false;
 	}
+	if (!Path_Exists("/system/bin/.ext")) {
+		mkdir("/system/bin/.ext", 0777);
+	}
+	TWFunc::Exec_Cmd("/sbin/chattr -i /system/bin/.ext/su", status);
+	if (copy_file("/supersu/su", "/system/bin/.ext/su", 0755) != 0) {
+		LOGERR("Failed to copy su binary to /system/bin/.ext/su\n");
+		return false;
+	}
+	TWFunc::Exec_Cmd("/sbin/chattr -i /system/xbin/daemonsu", status);
+	if (copy_file("/supersu/su", "/system/xbin/daemonsu", 0755) != 0) {
+		LOGERR("Failed to copy su binary to /system/xbin/daemonsu\n");
+		return false;
+	}
+	if (Path_Exists("/system/etc/init.d")) {
+		TWFunc::Exec_Cmd("/sbin/chattr -i /system/etc/init.d/99SuperSUDaemon", status);
+		if (copy_file("/supersu/99SuperSUDaemon", "/system/etc/init.d/99SuperSUDaemon", 0755) != 0) {
+			LOGERR("Failed to copy 99SuperSUDaemon to /system/etc/init.d/99SuperSUDaemon\n");
+			return false;
+		}
+	} else {
+		TWFunc::Exec_Cmd("/sbin/chattr -i /system/etc/install-recovery.sh", status);
+		if (copy_file("/supersu/install-recovery.sh", "/system/etc/install-recovery.sh", 0755) != 0) {
+			LOGERR("Failed to copy install-recovery.sh to /system/etc/install-recovery.sh\n");
+			return false;
+		}
+	}
 	if (copy_file("/supersu/Superuser.apk", "/system/app/Superuser.apk", 0644) != 0) {
 		LOGERR("Failed to copy Superuser app to /system/app\n");
 		return false;
diff --git a/variables.h b/variables.h
index b8a9380..8c88e91 100644
--- a/variables.h
+++ b/variables.h
@@ -17,7 +17,7 @@
 #ifndef _VARIABLES_HEADER_
 #define _VARIABLES_HEADER_
 
-#define TW_VERSION_STR              "2.6.0.4"
+#define TW_VERSION_STR              "2.6.1.0"
 
 #define TW_USE_COMPRESSION_VAR      "tw_use_compression"
 #define TW_FILENAME                 "tw_filename"