]> Dogcows Code - chaz/tar/commitdiff
* NEWS: Remove support for mangled names.
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 30 Nov 2006 06:39:29 +0000 (06:39 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 30 Nov 2006 06:39:29 +0000 (06:39 +0000)
* doc/tar.texi (verbose tutorial): Likewise.
* src/Makefile.am (tar_SOURCES): Remove mangle.c.
* src/common.h (extract_mangle): Remove decl.
* src/extract.c (extract_mangle_wrapper): Remove.
(prepare_to_extract): Remove support for mangled names.
* src/list.c (read_and, print_header): Likewise.
* src/mangle.c: Remove.
* src/tar.h (GNUTYPE_NAMES): Remove.

ChangeLog
NEWS
doc/tar.texi
src/Makefile.am
src/common.h
src/extract.c
src/list.c
src/mangle.c [deleted file]
src/tar.h

index b8c79f7a26f48783d2d336642685c75865b3927b..9a3f252a40856ecd43a266287a3aa29648e4bfa1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2006-11-29  Paul Eggert  <eggert@cs.ucla.edu>
 
 2006-11-29  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * NEWS: Remove support for mangled names.
+       * doc/tar.texi (verbose tutorial): Likewise.
+       * src/Makefile.am (tar_SOURCES): Remove mangle.c.
+       * src/common.h (extract_mangle): Remove decl.
+       * src/extract.c (extract_mangle_wrapper): Remove.
+       (prepare_to_extract): Remove support for mangled names.
+       * src/list.c (read_and, print_header): Likewise.
+       * src/mangle.c: Remove.
+       * src/tar.h (GNUTYPE_NAMES): Remove.
+
        Port to latest gnulib.  There were a lot of changes, so the
        simplest way to get this up and running was to switch to coreutils
        bootstrap procedure.  I noticed one feature missing after this
        Port to latest gnulib.  There were a lot of changes, so the
        simplest way to get this up and running was to switch to coreutils
        bootstrap procedure.  I noticed one feature missing after this
diff --git a/NEWS b/NEWS
index deb3baf246ea6b85ac7de95b0a3329cd353dfeee..47ef203a0b7c2f1b90c396eed0af43f36ce87cd1 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,14 @@
 GNU tar NEWS - User visible changes.
 Please send GNU tar bug reports to <bug-tar@gnu.org>
 \f
 GNU tar NEWS - User visible changes.
 Please send GNU tar bug reports to <bug-tar@gnu.org>
 \f
+* Support for reading ustar type 'N' header logical records has been removed.
+  This GNU extension was generated only by very old versions of GNU 'tar'.
+  Unfortunately its implementation had security holes; see
+  <http://archives.neohapsis.com/archives/fulldisclosure/2006-11/0344.html>.
+  We don't expect that any tar archives in practical use have type 'N'
+  records, but if you have one and you trust its contents, you can
+  decode it with GNU tar 1.16 or earlier.
+
 version 1.16 - Sergey Poznyakoff, 2006-10-21
 
 * After creating an archive, tar exits with code 1 if some files were
 version 1.16 - Sergey Poznyakoff, 2006-10-21
 
 * After creating an archive, tar exits with code 1 if some files were
index cbd01071aba9c046937e45a812913af7de74b9f3..621ce6063071ae0d83f6d16150e06010269a38b4 100644 (file)
@@ -1000,12 +1000,6 @@ Encountered only at the beginning of a multi-volume archive
 from the previous volume. The number @var{n} gives the offset where
 the original file was split.
 
 from the previous volume. The number @var{n} gives the offset where
 the original file was split.
 
-@item --Mangled file names--
-This archive member contains @dfn{mangled file names} declarations,
-a special member type that was used by early versions of @GNUTAR{}.
-You probably will never encounter this, unless you are reading a very
-old archive.
-
 @item  unknown file type @var{c}
 An archive member of unknown type. @var{c} is the type character from
 the archive header.  If you encounter such a message, it means that
 @item  unknown file type @var{c}
 An archive member of unknown type. @var{c} is the type character from
 the archive header.  If you encounter such a message, it means that
index e5af026a102d23f828e364271ba57f8f2b773baf..61f6cbd9fc04a9681e87e700e6dc0be1a9e9ab34 100644 (file)
@@ -30,7 +30,6 @@ tar_SOURCES = \
  xheader.c\
  incremen.c\
  list.c\
  xheader.c\
  incremen.c\
  list.c\
- mangle.c\
  misc.c\
  names.c\
  sparse.c\
  misc.c\
  names.c\
  sparse.c\
index 4aea8b5c0424a4460582916e2cfa627c1e3cfeec..e7f4c684176f42932b652f09b88cf0ffecd343ad 100644 (file)
@@ -546,10 +546,6 @@ enum read_header tar_checksum (union block *header, bool silent);
 void skip_file (off_t size);
 void skip_member (void);
 
 void skip_file (off_t size);
 void skip_member (void);
 
-/* Module mangle.c.  */
-
-void extract_mangle (void);
-
 /* Module misc.c.  */
 
 void assign_string (char **dest, const char *src);
 /* Module misc.c.  */
 
 void assign_string (char **dest, const char *src);
index 26c83b1bb4e100b30a076a711e551b8a4f16ea4e..d391e3e3372c0340b58e398203f2b5e6197ce5fe 100644 (file)
@@ -1023,13 +1023,6 @@ extract_fifo (char *file_name, int typeflag)
 }
 #endif
 
 }
 #endif
 
-static int
-extract_mangle_wrapper (char *file_name, int typeflag)
-{
-  extract_mangle ();
-  return 0;
-}
-
 static int
 extract_volhdr (char *file_name, int typeflag)
 {
 static int
 extract_volhdr (char *file_name, int typeflag)
 {
@@ -1121,10 +1114,6 @@ prepare_to_extract (char const *file_name, int typeflag, tar_extractor_t *fun)
       *fun = extract_volhdr;
       break;
 
       *fun = extract_volhdr;
       break;
 
-    case GNUTYPE_NAMES:
-      *fun = extract_mangle_wrapper;
-      break;
-
     case GNUTYPE_MULTIVOL:
       ERROR ((0, 0,
              _("%s: Cannot extract -- file is continued from another volume"),
     case GNUTYPE_MULTIVOL:
       ERROR ((0, 0,
              _("%s: Cannot extract -- file is continued from another volume"),
index 33c1d533ef95577817b4451bb8ca7c51f6bd3046..4bf302e6d629fbc57726ea9ac071483c009ad3a5 100644 (file)
@@ -107,7 +107,6 @@ read_and (void (*do_something) (void))
                {
                case GNUTYPE_VOLHDR:
                case GNUTYPE_MULTIVOL:
                {
                case GNUTYPE_VOLHDR:
                case GNUTYPE_MULTIVOL:
-               case GNUTYPE_NAMES:
                  break;
 
                case DIRTYPE:
                  break;
 
                case DIRTYPE:
@@ -1047,10 +1046,6 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
          modes[0] = 'M';
          break;
 
          modes[0] = 'M';
          break;
 
-       case GNUTYPE_NAMES:
-         modes[0] = 'N';
-         break;
-
        case GNUTYPE_LONGNAME:
        case GNUTYPE_LONGLINK:
          modes[0] = 'L';
        case GNUTYPE_LONGNAME:
        case GNUTYPE_LONGLINK:
          modes[0] = 'L';
@@ -1234,10 +1229,6 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
                   uintbuf));
          fprintf (stdlis, _("--Continued at byte %s--\n"), size);
          break;
                   uintbuf));
          fprintf (stdlis, _("--Continued at byte %s--\n"), size);
          break;
-
-       case GNUTYPE_NAMES:
-         fprintf (stdlis, _("--Mangled file names--\n"));
-         break;
        }
     }
   fflush (stdlis);
        }
     }
   fflush (stdlis);
diff --git a/src/mangle.c b/src/mangle.c
deleted file mode 100644 (file)
index fe37f64..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/* Encode long filenames for GNU tar.
-   Copyright 1988, 92, 94, 96, 97, 99, 2000 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published by the
-   Free Software Foundation; either version 2, or (at your option) any later
-   version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
-   Public License for more details.
-
-   You should have received a copy of the GNU General Public License along
-   with this program; if not, write to the Free Software Foundation, Inc.,
-   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <system.h>
-#include "common.h"
-#include <quotearg.h>
-
-struct mangled
-  {
-    struct mangled *next;
-    int type;
-    char mangled[NAME_FIELD_SIZE];
-    char *linked_to;
-    char normal[1];
-  };
-
-/* Extract a GNUTYPE_NAMES record contents.  It seems that such are
-   not produced anymore by GNU tar, but we leave the reading code
-   around nevertheless, for salvaging old tapes.  */
-void
-extract_mangle (void)
-{
-  off_t size = current_stat_info.stat.st_size;
-  char *buffer = xmalloc ((size_t) (size + 1));
-  char *copy = buffer;
-  char *cursor = buffer;
-
-  if (size != (size_t) size || size == (size_t) -1)
-    xalloc_die ();
-
-  buffer[size] = '\0';
-
-  while (size > 0)
-    {
-      union block *block = find_next_block ();
-      size_t available;
-
-      if (!block)
-       {
-         ERROR ((0, 0, _("Unexpected EOF in mangled names")));
-         return;
-       }
-      available = available_space_after (block);
-      if (available > size)
-       available = size;
-      memcpy (copy, block->buffer, available);
-      copy += available;
-      size -= available;
-      set_next_block_after ((union block *) (block->buffer + available - 1));
-    }
-
-  while (*cursor)
-    {
-      char *next_cursor;
-      char *name;
-      char *name_end;
-
-      next_cursor = strchr (cursor, '\n');
-      *next_cursor++ = '\0';
-
-      if (!strncmp (cursor, "Rename ", 7))
-       {
-
-         name = cursor + 7;
-         name_end = strchr (name, ' ');
-         while (strncmp (name_end, " to ", 4))
-           {
-             name_end++;
-             name_end = strchr (name_end, ' ');
-           }
-         *name_end = '\0';
-         if (next_cursor[-2] == '/')
-           next_cursor[-2] = '\0';
-         unquote_string (name_end + 4);
-         if (rename (name, name_end + 4))
-           ERROR ((0, errno, _("%s: Cannot rename to %s"),
-                   quotearg_colon (name), quote_n (1, name_end + 4)));
-         else if (verbose_option)
-           WARN ((0, 0, _("Renamed %s to %s"), name, name_end + 4));
-       }
-#ifdef HAVE_SYMLINK
-      else if (!strncmp (cursor, "Symlink ", 8))
-       {
-         name = cursor + 8;
-         name_end = strchr (name, ' ');
-         while (strncmp (name_end, " to ", 4))
-           {
-             name_end++;
-             name_end = strchr (name_end, ' ');
-           }
-         *name_end = '\0';
-         unquote_string (name);
-         unquote_string (name_end + 4);
-         if (symlink (name, name_end + 4)
-             && (unlink (name_end + 4) || symlink (name, name_end + 4)))
-           ERROR ((0, errno, _("%s: Cannot symlink to %s"),
-                   quotearg_colon (name), quote_n (1, name_end + 4)));
-         else if (verbose_option)
-           WARN ((0, 0, _("Symlinked %s to %s"), name, name_end + 4));
-       }
-#endif
-      else
-       ERROR ((0, 0, _("Unknown demangling command %s"), cursor));
-
-      cursor = next_cursor;
-    }
-}
index 4595bd67295f78b23a698913796ef3f3b3a1ec39..fa6a625e5b260270ae78092b07d5973ce198caed 100644 (file)
--- a/src/tar.h
+++ b/src/tar.h
@@ -165,6 +165,7 @@ struct oldgnu_header
    'A' Solaris Access Control List
    'E' Solaris Extended Attribute File
    'I' Inode only, as in 'star'
    'A' Solaris Access Control List
    'E' Solaris Extended Attribute File
    'I' Inode only, as in 'star'
+   'N' Obsolete GNU tar, for file names that do not fit into the main header.
    'X' POSIX 1003.1-2001 eXtended (VU version)  */
 
 /* This is a dir entry that contains the names of files that were in the
    'X' POSIX 1003.1-2001 eXtended (VU version)  */
 
 /* This is a dir entry that contains the names of files that were in the
@@ -180,9 +181,6 @@ struct oldgnu_header
 /* This is the continuation of a file that began on another volume.  */
 #define GNUTYPE_MULTIVOL 'M'
 
 /* This is the continuation of a file that began on another volume.  */
 #define GNUTYPE_MULTIVOL 'M'
 
-/* For storing filenames that do not fit into the main header.  */
-#define GNUTYPE_NAMES 'N'
-
 /* This is for sparse files.  */
 #define GNUTYPE_SPARSE 'S'
 
 /* This is for sparse files.  */
 #define GNUTYPE_SPARSE 'S'
 
This page took 0.054893 seconds and 4 git commands to generate.