Prompt user before truncating a file to zero bytes. Bug #922.

This commit is contained in:
Todd C. Miller
2020-07-22 07:42:40 -06:00
parent bcf96c153f
commit 6ee98cf453
3 changed files with 17 additions and 2 deletions

View File

@@ -25,7 +25,7 @@
.nr BA @BAMAN@
.nr LC @LCMAN@
.nr PS @PSMAN@
.TH "SUDO" "@mansectsu@" "May 7, 2020" "Sudo @PACKAGE_VERSION@" "System Manager's Manual"
.TH "SUDO" "@mansectsu@" "July 22, 2020" "Sudo @PACKAGE_VERSION@" "System Manager's Manual"
.nh
.if n .ad l
.SH "NAME"
@@ -354,6 +354,8 @@ If the specified file does not exist, it will be created.
Note that unlike most commands run by
\fIsudo\fR,
the editor is run with the invoking user's environment unmodified.
If the temporary file becomes empty after editing, the user will
be prompted before it is installed.
If, for some reason,
\fBsudo\fR
is unable to update a file with its edited version, the user will

View File

@@ -24,7 +24,7 @@
.nr BA @BAMAN@
.nr LC @LCMAN@
.nr PS @PSMAN@
.Dd May 7, 2020
.Dd July 22, 2020
.Dt SUDO @mansectsu@
.Os Sudo @PACKAGE_VERSION@
.Sh NAME
@@ -336,6 +336,8 @@ If the specified file does not exist, it will be created.
Note that unlike most commands run by
.Em sudo ,
the editor is run with the invoking user's environment unmodified.
If the temporary file becomes empty after editing, the user will
be prompted before it is installed.
If, for some reason,
.Nm
is unable to update a file with its edited version, the user will

View File

@@ -86,6 +86,17 @@ sudo_copy_file(const char *src, int src_fd, off_t src_len, const char *dst,
ssize_t nwritten, nread;
debug_decl(sudo_copy_file, SUDO_DEBUG_UTIL);
/* Prompt the user before zeroing out an existing file. */
if (dst_len > 0 && src_len == 0) {
fprintf(stderr, U_("%s: truncate %s to zero bytes? (y/n) [n] "),
getprogname(), dst);
if (fgets(buf, sizeof(buf), stdin) == NULL ||
(buf[0] != 'y' && buf[0] != 'Y')) {
sudo_warnx(U_("not overwriting %s"), dst);
debug_return_int(0);
}
}
/* Extend the file to the new size if larger before copying. */
if (dst_len > 0 && src_len > dst_len) {
if (sudo_extend_file(dst_fd, dst, src_len) == -1)