Hello, While working on a port of keyringer, I observed the following behavior of rm(1) with the -P option: if the file does not have write permission, the file is removed without being overwritten.
This is not the same behavior as shred(1) (from sysutils/coreutils) which do not remove the file if it cannot be overwritten. If the -f option is used with shred(1), the permission of the file are changed to allow writing if necessary. Is the current behavior desired? (need to update the manpage?) Or should `rm -P` and `rm -Pf` have the same behavior as shred. That is: `rm -P` should fail without removing the file if the file cannot be overwritten and `rm -Pf` should change the permission and overwrite file. Here are excerpts from rm(1) and shred(1) manpages: rm(1) -f Attempt to remove the files without prompting for confirmation, regardless of the file's permissions. If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error. The -f option overrides any previous -i options. -P Overwrite regular files before deleting them. Files are overwritten once with a random pattern. Files with multiple links will be unlinked but not overwritten. shred(1) -f, --force change permissions to allow writing if necessary And here is a small test to demonstrate this behavior: $ echo bar > foo $ chmod -w foo $ rm -P foo override r--r--r-- daimrod/wheel for foo? y rm: foo: Permission denied $ ls -l foo ls: foo: No such file or directory $ echo bar > foo $ chmod -w foo $ rm -Pf foo rm: foo: Permission denied $ ls -l foo ls: foo: No such file or directory $ echo bar > foo $ chmod -w foo $ gshred -u foo gshred: foo: failed to open for writing: Permission denied $ ls -l foo -r--r--r-- 1 daimrod wheel 4 Mar 30 17:45 foo $ gshred -uf foo $ ls -l foo ls: foo: No such file or directory Best,