diff options
author | Dees_Troy <dees_troy@teamw.in> | 2013-09-03 21:39:41 +0200 |
---|---|---|
committer | Dees_Troy <dees_troy@teamw.in> | 2013-09-05 15:06:16 +0200 |
commit | 512376ccc75a2564fe8df671e4e05a3b100b5ee5 (patch) | |
tree | 2c435577fc5608f8a63e0e515df3c4dab404e8ee /updater/updater.c | |
parent | Update to latest AOSP master (diff) | |
download | android_bootable_recovery-512376ccc75a2564fe8df671e4e05a3b100b5ee5.tar android_bootable_recovery-512376ccc75a2564fe8df671e4e05a3b100b5ee5.tar.gz android_bootable_recovery-512376ccc75a2564fe8df671e4e05a3b100b5ee5.tar.bz2 android_bootable_recovery-512376ccc75a2564fe8df671e4e05a3b100b5ee5.tar.lz android_bootable_recovery-512376ccc75a2564fe8df671e4e05a3b100b5ee5.tar.xz android_bootable_recovery-512376ccc75a2564fe8df671e4e05a3b100b5ee5.tar.zst android_bootable_recovery-512376ccc75a2564fe8df671e4e05a3b100b5ee5.zip |
Diffstat (limited to '')
-rw-r--r-- | updater/updater.c | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/updater/updater.c b/updater/updater.c index 58ac27f9e..15d3d412f 100644 --- a/updater/updater.c +++ b/updater/updater.c @@ -17,6 +17,7 @@ #include <stdio.h> #include <unistd.h> #include <stdlib.h> +#include <fcntl.h> #include "edify/expr.h" #include "updater.h" @@ -31,6 +32,8 @@ // Where in the package we expect to find the edify script to execute. // (Note it's "updateR-script", not the older "update-script".) #define SCRIPT_NAME "META-INF/com/google/android/updater-script" +#define SELINUX_CONTEXTS_ZIP "file_contexts" +#define SELINUX_CONTEXTS_TMP "/tmp/file_contexts" struct selabel_handle *sehandle; @@ -87,6 +90,23 @@ int main(int argc, char** argv) { } script[script_entry->uncompLen] = '\0'; + const ZipEntry* file_contexts_entry = mzFindZipEntry(&za, SELINUX_CONTEXTS_ZIP); + if (script_entry != NULL) { + int file_contexts_fd = creat(SELINUX_CONTEXTS_TMP, 0644); + if (file_contexts_fd < 0) { + fprintf(stderr, "Could not extract %s to '%s'\n", SELINUX_CONTEXTS_ZIP, SELINUX_CONTEXTS_TMP); + return 3; + } + + int ret_val = mzExtractZipEntryToFile(&za, file_contexts_entry, file_contexts_fd); + close(file_contexts_fd); + + if (!ret_val) { + fprintf(stderr, "Could not extract '%s'\n", SELINUX_CONTEXTS_ZIP); + return 3; + } + } + // Configure edify's functions. RegisterBuiltins(); @@ -105,11 +125,19 @@ int main(int argc, char** argv) { return 6; } - struct selinux_opt seopts[] = { - { SELABEL_OPT_PATH, "/file_contexts" } - }; + if (access(SELINUX_CONTEXTS_TMP, R_OK) == 0) { + struct selinux_opt seopts[] = { + { SELABEL_OPT_PATH, SELINUX_CONTEXTS_TMP } + }; - sehandle = selabel_open(SELABEL_CTX_FILE, seopts, 1); + sehandle = selabel_open(SELABEL_CTX_FILE, seopts, 1); + } else { + struct selinux_opt seopts[] = { + { SELABEL_OPT_PATH, "/file_contexts" } + }; + + sehandle = selabel_open(SELABEL_CTX_FILE, seopts, 1); + } if (!sehandle) { fprintf(stderr, "Warning: No file_contexts\n"); |