summaryrefslogtreecommitdiffstats
path: root/minzip/Zip.c
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2012-03-31 05:48:34 +0200
committerKenny Root <kroot@google.com>2012-03-31 06:26:01 +0200
commit41dda82d847ae8c261b09c383806b412d680f935 (patch)
tree98edeec4fa5d9df2d0104624d66b1608cecdaf50 /minzip/Zip.c
parentMerge "fail edify script if set_perm() or symlink() fails" (diff)
parentam 155cd3c1: Merge changes Ied379f26,I09fb9d56 (diff)
downloadandroid_bootable_recovery-41dda82d847ae8c261b09c383806b412d680f935.tar
android_bootable_recovery-41dda82d847ae8c261b09c383806b412d680f935.tar.gz
android_bootable_recovery-41dda82d847ae8c261b09c383806b412d680f935.tar.bz2
android_bootable_recovery-41dda82d847ae8c261b09c383806b412d680f935.tar.lz
android_bootable_recovery-41dda82d847ae8c261b09c383806b412d680f935.tar.xz
android_bootable_recovery-41dda82d847ae8c261b09c383806b412d680f935.tar.zst
android_bootable_recovery-41dda82d847ae8c261b09c383806b412d680f935.zip
Diffstat (limited to 'minzip/Zip.c')
-rw-r--r--minzip/Zip.c25
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));