Subject: [alpine-devel] [PATCH] apk-tools: archive: enable FIFO extraction

From: Jesse Young <[email-masked]>
Date: Mon, 13 Aug 2018 00:57:52 -0500

---
 src/archive.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/archive.c b/src/archive.c
index 9196cb2..1fc3e57 100644
--- a/src/archive.c
+++ b/src/archive.c
@@ -300,6 +300,9 @@ int apk_tar_parse(struct apk_istream *is, apk_archive_entry_parser parser,
 		case '5': /* directory */
 			entry.mode |= S_IFDIR;
 			break;
+		case '6': /* fifo */
+			entry.mode |= S_IFIFO;
+			break;
 		case 'g': /* global pax header */
 			break;
 		case 'x': /* file specific pax header */
@@ -431,6 +434,7 @@ int apk_archive_entry_extract(int atfd, const struct apk_file_info *ae,
 	struct apk_xattr *xattr;
 	char *fn = ae->name;
 	int fd, r = -1, atflags = 0, ret = 0;
+	mode_t nodmask = S_IFBLK | S_IFCHR | S_IFIFO | 07777;
 
 	if (suffix != NULL) {
 		fn = alloca(PATH_MAX);
@@ -477,11 +481,10 @@ int apk_archive_entry_extract(int atfd, const struct apk_file_info *ae,
 		if (r < 0) ret = -errno;
 		atflags |= AT_SYMLINK_NOFOLLOW;
 		break;
-	case S_IFSOCK:
 	case S_IFBLK:
 	case S_IFCHR:
 	case S_IFIFO:
-		r = mknodat(atfd, fn, ae->mode & 07777, ae->device);
+		r = mknodat(atfd, fn, ae->mode & nodmask, ae->device);
 		if (r < 0) ret = -errno;
 		break;
 	}
-- 
2.18.0

---
Unsubscribe:  [email-masked]
Help:         [email-masked]
---