e2fsdroid: use libselinux function to read file context on device
When e2fsdroid runs on device, location of selinux file contexts
should be determined by libselinux instead of using arbitrary paths.
Bug: 35219933
Change-Id: I413b198422eddb212599498b532ba2c4d8bb36c6
Merged-In: I413b198422eddb212599498b532ba2c4d8bb36c6
diff --git a/contrib/android/perms.c b/contrib/android/perms.c
index 9a7a93f..9ae8e58 100644
--- a/contrib/android/perms.c
+++ b/contrib/android/perms.c
@@ -297,6 +297,7 @@
struct selabel_handle *sehnd = NULL;
/* Retrieve file contexts */
+#if !defined(__ANDROID__)
if (nopt > 0) {
sehnd = selabel_open(SELABEL_CTX_FILE, seopts, nopt);
if (!sehnd) {
@@ -306,6 +307,14 @@
return -EINVAL;
}
}
+#else
+ sehnd = selinux_android_file_context_handle();
+ if (!sehnd) {
+ com_err(__func__, -EINVAL,
+ _("while opening android file_contexts"));
+ return -EINVAL;
+ }
+#endif
/* Load the FS config */
if (fs_config_file) {
diff --git a/contrib/android/perms.h b/contrib/android/perms.h
index 9955bb5..c404cb9 100644
--- a/contrib/android/perms.h
+++ b/contrib/android/perms.h
@@ -25,7 +25,7 @@
# else
# include <selinux/selinux.h>
# include <selinux/label.h>
-# if !defined(HOST)
+# if defined(__ANDROID__)
# include <selinux/android.h>
# endif
# include <private/android_filesystem_config.h>