summaryrefslogtreecommitdiff
path: root/src/buffer.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2014-03-27 07:06:02 +0200
committerSergey Poznyakoff <gray@gnu.org>2014-03-27 07:06:02 +0200
commit7808b6981b2c7f828684148e2a65f9640958a59a (patch)
treeb531988ea811e691e80feee16be7bb06bca8e63d /src/buffer.c
parent852895847f41f9b5f268fc84f892c94497f4ffbe (diff)
downloadtar-7808b6981b2c7f828684148e2a65f9640958a59a.tar.gz
Refuse to write archive contents to a tty.
* NEWS: Update. * src/buffer.c (_open_archive): Refuse to write to a tty. * tests/iotty.at: Test output to a tty.
Diffstat (limited to 'src/buffer.c')
-rw-r--r--src/buffer.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 248dd880..a7d89712 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -668,6 +668,22 @@ init_buffer (void)
record_end = record_start + blocking_factor;
}
+static void
+check_tty (enum access_mode mode)
+{
+ /* Refuse to read archive from and write it to a tty. */
+ if (strcmp (archive_name_array[0], "-") == 0
+ && isatty (mode == ACCESS_READ ? STDIN_FILENO : STDOUT_FILENO))
+ {
+ FATAL_ERROR ((0, 0,
+ mode == ACCESS_READ
+ ? _("Refusing to read archive contents from terminal "
+ "(missing -f option?)")
+ : _("Refusing to write archive contents to terminal "
+ "(missing -f option?)")));
+ }
+}
+
/* Open an archive file. The argument specifies whether we are
reading or writing, or both. */
static void
@@ -688,17 +704,8 @@ _open_archive (enum access_mode wanted_access)
/* When updating the archive, we start with reading. */
access_mode = wanted_access == ACCESS_UPDATE ? ACCESS_READ : wanted_access;
+ check_tty (access_mode);
- /* Refuse to read archive from a tty.
- Do not fail if the tar's output goes directly to tty because such
- behavior would go against GNU Coding Standards:
- http://lists.gnu.org/archive/html/bug-tar/2014-03/msg00042.html */
- if (strcmp (archive_name_array[0], "-") == 0
- && wanted_access == ACCESS_READ && isatty (STDIN_FILENO))
- FATAL_ERROR ((0, 0,
- _("Refusing to read archive contents from terminal "
- "(missing -f option?)")));
-
read_full_records = read_full_records_option;
records_read = 0;