From 21db4d4173148e04e417dcb1e045e3f837c840dce68f69e9e873155b9a8b12f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Schr=C3=B6ter?= Date: Thu, 3 Oct 2024 18:01:19 +0200 Subject: [PATCH] Sync from SUSE:SLFO:Main tar revision 2b5a035fe99f6a0ca5ce22f7ff646f37 --- tar-fix-extract-unlink.patch | 113 +++++++++++++++++------------------ tar.changes | 7 +++ 2 files changed, 62 insertions(+), 58 deletions(-) diff --git a/tar-fix-extract-unlink.patch b/tar-fix-extract-unlink.patch index 3f1cf29..f79cf77 100644 --- a/tar-fix-extract-unlink.patch +++ b/tar-fix-extract-unlink.patch @@ -1,89 +1,86 @@ +From 1e6ce98e3a4ef5c807458a35973af7e3503c678c Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff +Date: Wed, 5 Jun 2024 18:19:10 +0300 +Subject: [PATCH] Fix spurious diagnostic during extraction of . with + --keep-newer-files + +Bug reported in https://savannah.gnu.org/bugs/?65838. + +Bug introduced by 79d1ac38c1. + +* src/extract.c (make_directories): Restore second argument. This +reverts the change made in 79d1ac38c1. +(maybe_recoverable, rename_directory): Update calls to make_directories. +* tests/extrac27.at: New file. +* tests/Makefile.am: Add new test. +* tests/testsuite.at: Likewise. +--- + src/extract.c | 19 ++++++++++--------- + tests/Makefile.am | 1 + + tests/extrac27.at | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + tests/testsuite.at | 1 + + 4 files changed, 58 insertions(+), 9 deletions(-) + create mode 100644 tests/extrac27.at + diff --git a/src/extract.c b/src/extract.c -index 0261134f..f913575c 100644 +index 0fef0562..41f8418f 100644 --- a/src/extract.c +++ b/src/extract.c -@@ -711,7 +711,7 @@ fixup_delayed_set_stat (char const *src, char const *dst) +@@ -709,9 +709,9 @@ fixup_delayed_set_stat (char const *src, char const *dst) + /* After a file/link/directory creation has failed due to ENOENT, + create all required directories. Return zero if all the required directories were created, nonzero (issuing a diagnostic) otherwise. - Set *INTERDIR_MADE if at least one directory was created. */ +- Set *INTERDIR_MADE if at least one directory was created. */ ++ Set *INTERDIR_MADE (unless NULL) if at least one directory was created. */ static int -make_directories (char *file_name) +make_directories (char *file_name, bool *interdir_made) { char *cursor0 = file_name + FILE_SYSTEM_PREFIX_LEN (file_name); char *cursor; /* points into the file name */ -@@ -755,6 +755,7 @@ make_directories (char *file_name) +@@ -753,7 +753,8 @@ make_directories (char *file_name) + delay_set_stat (file_name, + 0, mode & ~ current_umask, MODE_RWX, desired_mode, AT_SYMLINK_NOFOLLOW); - +- ++ if (interdir_made) ++ *interdir_made = true; print_for_mkdir (file_name, desired_mode); -+ *interdir_made = true; parent_end = NULL; } - else -@@ -910,11 +911,8 @@ maybe_recoverable (char *file_name, bool regular, bool *interdir_made) +@@ -793,6 +794,9 @@ make_directories (char *file_name) + errno = parent_errno; + mkdir_error (file_name); + } ++ else if (interdir_made) ++ *interdir_made = true; ++ + *parent_end = '/'; + + return stat_status; +@@ -910,11 +914,8 @@ maybe_recoverable (char *file_name, bool regular, bool *interdir_made) case ENOENT: /* Attempt creating missing intermediate directories. */ - if (make_directories (file_name) == 0) - { - *interdir_made = true; -+ if (make_directories (file_name, interdir_made) == 0) - return RECOVER_OK; +- return RECOVER_OK; - } ++ if (make_directories (file_name, interdir_made) == 0 && *interdir_made) ++ return RECOVER_OK; break; default: -@@ -1109,7 +1107,7 @@ extract_dir (char *file_name, int typeflag) - || old_files_option == NO_OVERWRITE_DIR_OLD_FILES - || old_files_option == DEFAULT_OLD_FILES - || old_files_option == OVERWRITE_OLD_FILES) -- { -+ { - struct stat st; - st.st_mode = 0; - -@@ -1117,21 +1115,21 @@ extract_dir (char *file_name, int typeflag) - && is_directory_link (file_name, &st)) - return 0; - -- if ((st.st_mode != 0 && fstatat_flags == 0) -- || deref_stat (file_name, &st) == 0) -- { -+ if ((st.st_mode != 0 && fstatat_flags == 0) -+ || deref_stat (file_name, &st) == 0) -+ { - current_mode = st.st_mode; - current_mode_mask = ALL_MODE_BITS; - - if (S_ISDIR (current_mode)) -- { -- if (interdir_made) -- { -- repair_delayed_set_stat (file_name, &st); -- return 0; -- } -- else if (old_files_option == NO_OVERWRITE_DIR_OLD_FILES) - { -+ if (interdir_made) -+ { -+ repair_delayed_set_stat (file_name, &st); -+ return 0; -+ } -+ else if (old_files_option == NO_OVERWRITE_DIR_OLD_FILES) -+ { - /* Temporarily change the directory mode to a safe - value, to be able to create files in it, should - the need be. -@@ -2007,11 +2005,12 @@ rename_directory (char *src, char *dst) - else - { - int e = errno; -+ bool interdir_made; - +@@ -2011,7 +2012,7 @@ rename_directory (char *src, char *dst) switch (e) { case ENOENT: - if (make_directories (dst) == 0) -+ if (make_directories (dst, &interdir_made) == 0) ++ if (make_directories (dst, NULL) == 0) { if (renameat (chdir_fd, src, chdir_fd, dst) == 0) return true; +-- +2.45.2 + diff --git a/tar.changes b/tar.changes index f7580e7..dc9db71 100644 --- a/tar.changes +++ b/tar.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Wed Jul 10 20:09:28 UTC 2024 - Antonio Teixeira + +- Updated tar-fix-extract-unlink.patch + * Replace patch with an equivalent upstreamed commit + * Fixes bsc#1225407 + ------------------------------------------------------------------- Wed Dec 6 16:04:39 UTC 2023 - Joshua Smith