diff options
author | Kenny Root <kroot@android.com> | 2012-03-31 00:53:17 +0200 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-03-31 00:53:17 +0200 |
commit | 0b1fee1b2aa7da86ffdabfe4c577ee8adb93d803 (patch) | |
tree | 46aacb687e7126a5a64949dd7ade2f284ee57c15 /minzip/Zip.c | |
parent | am 37d0f260: Reconcile with ics-mr1-release (diff) | |
parent | Merge changes Ied379f26,I09fb9d56 (diff) | |
download | android_bootable_recovery-0b1fee1b2aa7da86ffdabfe4c577ee8adb93d803.tar android_bootable_recovery-0b1fee1b2aa7da86ffdabfe4c577ee8adb93d803.tar.gz android_bootable_recovery-0b1fee1b2aa7da86ffdabfe4c577ee8adb93d803.tar.bz2 android_bootable_recovery-0b1fee1b2aa7da86ffdabfe4c577ee8adb93d803.tar.lz android_bootable_recovery-0b1fee1b2aa7da86ffdabfe4c577ee8adb93d803.tar.xz android_bootable_recovery-0b1fee1b2aa7da86ffdabfe4c577ee8adb93d803.tar.zst android_bootable_recovery-0b1fee1b2aa7da86ffdabfe4c577ee8adb93d803.zip |
Diffstat (limited to '')
-rw-r--r-- | minzip/Zip.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/minzip/Zip.c b/minzip/Zip.c index 46d2f829e..54d5d55a3 100644 --- a/minzip/Zip.c +++ b/minzip/Zip.c @@ -930,7 +930,8 @@ static const char *targetEntryPath(MzPathHelper *helper, ZipEntry *pEntry) bool mzExtractRecursive(const ZipArchive *pArchive, const char *zipDir, const char *targetDir, int flags, const struct utimbuf *timestamp, - void (*callback)(const char *fn, void *), void *cookie) + void (*callback)(const char *fn, void *), void *cookie, + struct selabel_handle *sehnd) { if (zipDir[0] == '/') { LOGE("mzExtractRecursive(): zipDir must be a relative path.\n"); @@ -1045,7 +1046,7 @@ bool mzExtractRecursive(const ZipArchive *pArchive, if (pEntry->fileName[pEntry->fileNameLen-1] == '/') { if (!(flags & MZ_EXTRACT_FILES_ONLY)) { int ret = dirCreateHierarchy( - targetFile, UNZIP_DIRMODE, timestamp, false); + targetFile, UNZIP_DIRMODE, timestamp, false, sehnd); if (ret != 0) { LOGE("Can't create containing directory for \"%s\": %s\n", targetFile, strerror(errno)); @@ -1059,7 +1060,7 @@ bool mzExtractRecursive(const ZipArchive *pArchive, * the containing directory exists. */ int ret = dirCreateHierarchy( - targetFile, UNZIP_DIRMODE, timestamp, true); + targetFile, UNZIP_DIRMODE, timestamp, true, sehnd); if (ret != 0) { LOGE("Can't create containing directory for \"%s\": %s\n", targetFile, strerror(errno)); @@ -1113,7 +1114,25 @@ bool mzExtractRecursive(const ZipArchive *pArchive, /* The entry is a regular file. * Open the target for writing. */ + +#ifdef HAVE_SELINUX + char *secontext = NULL; + + if (sehnd) { + selabel_lookup(sehnd, &secontext, targetFile, UNZIP_FILEMODE); + setfscreatecon(secontext); + } +#endif + int fd = creat(targetFile, UNZIP_FILEMODE); + +#ifdef HAVE_SELINUX + if (secontext) { + freecon(secontext); + setfscreatecon(NULL); + } +#endif + if (fd < 0) { LOGE("Can't create target file \"%s\": %s\n", targetFile, strerror(errno)); |