mirror of
https://https.git.savannah.gnu.org/git/coreutils.git
synced 2026-01-26 15:29:07 +00:00
shred: reinstate --remove file name length obfuscation
This was unintentionally removed in v8.27-60-g2ae1460 * src/shred.c (wipename): Interate through all name lengths. * tests/misc/shred-remove.sh: Add test cases. * NEWS: Mention the bug fix. Fixes https://bugs.gnu.org/28507
This commit is contained in:
parent
4cb3f4faa4
commit
c34f8d5c78
4
NEWS
4
NEWS
@ -18,6 +18,10 @@ GNU coreutils NEWS -*- outline -*-
|
||||
ptx -S no longer infloops for a pattern which returns zero-length matches.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
shred --remove will again repeatedly rename files with shortening names
|
||||
to attempt to hide the original length of the file name.
|
||||
[bug introduced in coreutils-8.28]
|
||||
|
||||
|
||||
* Noteworthy changes in release 8.28 (2017-09-01) [stable]
|
||||
|
||||
|
||||
@ -1117,7 +1117,6 @@ wipename (char *oldname, char const *qoldname, struct Options const *flags)
|
||||
first = false;
|
||||
}
|
||||
memcpy (oldname + (base - newname), base, len + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -44,4 +44,24 @@ done
|
||||
touch $file || framework_failure_
|
||||
returns_ 1 shred -n0 --remove=none $file 2>/dev/null || fail=1
|
||||
|
||||
# Ensure rename passes complete.
|
||||
# coreutils-8.28 did not do the decreasing length rename
|
||||
# which may have leaked the length of the removed file name
|
||||
printf 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_. |
|
||||
sed 's/./&\n/g' | xargs touch || framework_failure_ # test level exhaustion
|
||||
touch test 000 || framework_failure_ # test level increment
|
||||
shred -vu test 2>out || fail=1
|
||||
cat <<\EOF >exp || framework_failure_
|
||||
shred: test: removing
|
||||
shred: test: renamed to 0000
|
||||
shred: 0000: renamed to 001
|
||||
shred: 001: renamed to 00
|
||||
shred: test: removed
|
||||
EOF
|
||||
compare exp out || fail=1
|
||||
|
||||
# Ensure renames are only retried for EEXIST
|
||||
mkdir rodir && cd rodir && touch $file && chmod a-w . || framework_failure_
|
||||
returns_ 1 timeout 10 shred -u $file || fail=1
|
||||
|
||||
Exit $fail
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user