[alpine-devel] [PATCH] apk-tools: archive: enable FIFO extraction
Export this patch
---
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;
}
The mode masking for mknodat() is an old bug. Let's just remove it. It
was added when the mask for other creation syscalls was changed from
0777 to 07777 to support setuid/setgid, but mknodat() really needs the
whole thing to create right type node.
Can you resubmit, or would you like me to amend your patch?
Thanks!
Timo
---
Unsubscribe: alpine-devel+unsubscribe@lists.alpinelinux.org
Help: alpine-devel+help@lists.alpinelinux.org
---
--
2.18.0
---
Unsubscribe: alpine-devel+unsubscribe@lists.alpinelinux.org
Help: alpine-devel+help@lists.alpinelinux.org
---
Hi,
On Mon, 13 Aug 2018 00:57:52 -0500
Jesse Young <jlyo@jlyo.org> wrote:
[alpine-devel] [PATCH v2] apk-tools: archive: enable FIFO extraction
Export this patch
---
src/archive.c | 6 ++++ --
1 file changed, 4 insertions(+), 2 deletions(-)
Applied. Thanks.
---
Unsubscribe: alpine-devel+unsubscribe@lists.alpinelinux.org
Help: alpine-devel+help@lists.alpinelinux.org
---
diff --git a/src/archive.c b/src/archive.c
index 9196cb2..bc36ce7 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 */
@@ -477,11 +480,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, ae->device);
if (r < 0) ret = -errno;
break;
}
--
2.18.0
---
Unsubscribe: alpine-devel+unsubscribe@lists.alpinelinux.org
Help: alpine-devel+help@lists.alpinelinux.org
---