Be more reasonable when overwrite mode is specified while there

is hard links.  Overwritting when links > 1 would cause data
loss, which is usually undesired.

Inspired by:	discussion on -hackers@
Suggested by:	elessar at bsdforen de
Obtained from:	OpenBSD
This commit is contained in:
Xin LI 2006-10-30 03:32:09 +00:00
parent 4e33ba36b8
commit 0b6f55b77c
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=163777
2 changed files with 8 additions and 1 deletions

View File

@ -32,7 +32,7 @@
.\" @(#)rm.1 8.5 (Berkeley) 12/5/94
.\" $FreeBSD$
.\"
.Dd September 29, 2005
.Dd October 30, 2006
.Dt RM 1
.Os
.Sh NAME
@ -88,6 +88,8 @@ yet provides almost the same level of protection against mistakes.
Overwrite regular files before deleting them.
Files are overwritten three times, first with the byte pattern 0xff,
then 0x00, and then 0xff again, before they are deleted.
Files with multiple links will not be overwritten.
.Pp
Specifying this flag for a read only file will cause
.Nm
to generate an error message and exit.

View File

@ -400,6 +400,11 @@ rm_overwrite(char *file, struct stat *sbp)
}
if (!S_ISREG(sbp->st_mode))
return (1);
if (sbp->st_nlink > 1) {
warnx("%s (inode %u): not overwritten due to multiple links",
file, sbp->st_ino);
return (1);
}
if ((fd = open(file, O_WRONLY, 0)) == -1)
goto err;
if (fstatfs(fd, &fsb) == -1)