]> Dogcows Code - chaz/tar/commitdiff
Refuse to write archive contents to a tty.
authorSergey Poznyakoff <gray@gnu.org>
Thu, 27 Mar 2014 05:06:02 +0000 (07:06 +0200)
committerSergey Poznyakoff <gray@gnu.org>
Thu, 27 Mar 2014 05:06:02 +0000 (07:06 +0200)
* NEWS: Update.
* src/buffer.c (_open_archive): Refuse to write to a tty.
* tests/iotty.at: Test output to a tty.

NEWS
src/buffer.c
tests/iotty.at

diff --git a/NEWS b/NEWS
index fa241425be910da0966db3aa1426cf969cf1b24f..3f63ed79a850d954cd454b1f283f3b7cfc48253a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-GNU tar NEWS - User visible changes. 2014-02-21
+GNU tar NEWS - User visible changes. 2014-03-27
 Please send GNU tar bug reports to <bug-tar@gnu.org>
 
 \f
@@ -62,6 +62,8 @@ speed up archivation.
                           are: CVS, Git, Bazaar, Mercurial.
                          
 
+* Tar refuses to read input from and write output to a tty device.
+
 * Manpages
 
 This release includes official tar(1) and rmt(8) manpages.
index 248dd8804ce69e976b2187ba34bbc04b354b1fa9..a7d89712fc0d931dddd948403f95249a1c7f0c6e 100644 (file)
@@ -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;
index ea15c84c3bd579ae7ced532bac99b76e8bb79a1d..79589b755fe925299585e0b433398ad2732c0133 100644 (file)
@@ -33,6 +33,8 @@ ttyemu -t5 -i/dev/null tar -x
 echo $?
 ttyemu -t5 -i/dev/null tar -xz
 echo $?
+ttyemu -t5 -i/dev/null tar -c .
+echo $?
 ],
 [0],
 [tar: Refusing to read archive contents from terminal (missing -f option?)
@@ -41,6 +43,9 @@ tar: Error is not recoverable: exiting now
 tar: Refusing to read archive contents from terminal (missing -f option?)
 tar: Error is not recoverable: exiting now
 2
+tar: Refusing to write archive contents to terminal (missing -f option?)
+tar: Error is not recoverable: exiting now
+2
 ],
 [],[],[],[posix, gnu, oldgnu])
 
This page took 0.031332 seconds and 4 git commands to generate.