|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
From 291d0c218e256750228b731a693e6b96e7ed5449 Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
From: Martin Matuska <martin@matuska.org>
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
Date: Fri, 22 May 2020 13:03:55 +0200
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
Subject: [PATCH] test_write_disk_secure: properly check if lchmod() is
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
---
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
libarchive/test/test_write_disk_secure.c | 34 +++++++++++++++++++++---
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
1 file changed, 30 insertions(+), 4 deletions(-)
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
diff --git a/libarchive/test/test_write_disk_secure.c b/libarchive/test/test_write_disk_secure.c
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
index 7cd66c4..44b9ea0 100644
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
--- a/libarchive/test/test_write_disk_secure.c
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+++ b/libarchive/test/test_write_disk_secure.c
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
@@ -40,6 +40,10 @@ DEFINE_TEST(test_write_disk_secure)
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
struct archive *a;
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
struct archive_entry *ae;
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
struct stat st;
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+#if defined(HAVE_LCHMOD) && defined(HAVE_SYMLINK) && \
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ defined(S_IRUSR) && defined(S_IWUSR) && defined(S_IXUSR)
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ int working_lchmod;
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
/* Start with a known umask. */
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
assertUmask(UMASK);
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
@@ -251,10 +255,32 @@ DEFINE_TEST(test_write_disk_secure)
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
assert(0 == lstat("link_to_dir", &st);;
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
failure("link_to_dir: st.st_mode=%o", st.st_mode);
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
assert(S_ISLNK(st.st_mode));
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
-#if HAVE_LCHMOD
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
- /* Systems that lack lchmod() can't set symlink perms, so skip this. */
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
- failure("link_to_dir: st.st_mode=%o", st.st_mode);
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
- assert((st.st_mode & 07777) == 0755);
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+#if defined(HAVE_SYMLINK) && defined(HAVE_LCHMOD) && \
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ defined(S_IRUSR) && defined(S_IWUSR) && defined(S_IXUSR)
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ /* Verify if we are able to lchmod() */
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ if (symlink("dir", "testlink_to_dir") == 0) {
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ if (lchmod("testlink_to_dir",
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ S_IRUSR | S_IWUSR | S_IXUSR) != 0) {
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ switch (errno) {
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ case ENOTSUP:
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ case ENOSYS:
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+#if ENOTSUP != EOPNOTSUPP
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ case EOPNOTSUPP:
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ working_lchmod = 0;
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ default:
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ working_lchmod = 1;
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ working_lchmod = 1;
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ working_lchmod = 0;
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ if (working_lchmod) {
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ failure("link_to_dir: st.st_mode=%o", st.st_mode);
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ assert((st.st_mode & 07777) == 0755);
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
#endif
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
assert(0 == lstat("dir/filea", &st);;
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
--
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
2.24.1
|
|
![](https://seccdn.libravatar.org/avatar/e6a06097825cba5fa2c16e4c0251bc79f196bd8c0ecf20e7bb4a49d71416be95?s=16&d=retro) |
fe44045 |
|