4
0
Эх сурвалжийг харах

* 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.

Paul Eggert 18 жил өмнө
parent
commit
49ea4c5057
9 өөрчлөгдсөн 19 нэмэгдсэн , 155 устгасан
  1. 10 0
      ChangeLog
  2. 8 0
      NEWS
  3. 0 6
      doc/tar.texi
  4. 0 1
      src/Makefile.am
  5. 0 4
      src/common.h
  6. 0 11
      src/extract.c
  7. 0 9
      src/list.c
  8. 0 121
      src/mangle.c
  9. 1 3
      src/tar.h

+ 10 - 0
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
 	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
 	simplest way to get this up and running was to switch to coreutils
 	bootstrap procedure.  I noticed one feature missing after this
 	bootstrap procedure.  I noticed one feature missing after this

+ 8 - 0
NEWS

@@ -1,6 +1,14 @@
 GNU tar NEWS - User visible changes.
 GNU tar NEWS - User visible changes.
 Please send GNU tar bug reports to <bug-tar@gnu.org>
 Please send GNU tar bug reports to <bug-tar@gnu.org>
 
 
+* 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
 version 1.16 - Sergey Poznyakoff, 2006-10-21
 
 
 * After creating an archive, tar exits with code 1 if some files were
 * After creating an archive, tar exits with code 1 if some files were

+ 0 - 6
doc/tar.texi

@@ -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
 from the previous volume. The number @var{n} gives the offset where
 the original file was split.
 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}
 @item  unknown file type @var{c}
 An archive member of unknown type. @var{c} is the type character from
 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
 the archive header.  If you encounter such a message, it means that

+ 0 - 1
src/Makefile.am

@@ -30,7 +30,6 @@ tar_SOURCES = \
  xheader.c\
  xheader.c\
  incremen.c\
  incremen.c\
  list.c\
  list.c\
- mangle.c\
  misc.c\
  misc.c\
  names.c\
  names.c\
  sparse.c\
  sparse.c\

+ 0 - 4
src/common.h

@@ -546,10 +546,6 @@ enum read_header tar_checksum (union block *header, bool silent);
 void skip_file (off_t size);
 void skip_file (off_t size);
 void skip_member (void);
 void skip_member (void);
 
 
-/* Module mangle.c.  */
-
-void extract_mangle (void);
-
 /* Module misc.c.  */
 /* Module misc.c.  */
 
 
 void assign_string (char **dest, const char *src);
 void assign_string (char **dest, const char *src);

+ 0 - 11
src/extract.c

@@ -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
 static int
 extract_volhdr (char *file_name, int typeflag)
 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;
       *fun = extract_volhdr;
       break;
       break;
 
 
-    case GNUTYPE_NAMES:
-      *fun = extract_mangle_wrapper;
-      break;
-
     case GNUTYPE_MULTIVOL:
     case GNUTYPE_MULTIVOL:
       ERROR ((0, 0,
       ERROR ((0, 0,
 	      _("%s: Cannot extract -- file is continued from another volume"),
 	      _("%s: Cannot extract -- file is continued from another volume"),

+ 0 - 9
src/list.c

@@ -107,7 +107,6 @@ read_and (void (*do_something) (void))
 		{
 		{
 		case GNUTYPE_VOLHDR:
 		case GNUTYPE_VOLHDR:
 		case GNUTYPE_MULTIVOL:
 		case GNUTYPE_MULTIVOL:
-		case GNUTYPE_NAMES:
 		  break;
 		  break;
 
 
 		case DIRTYPE:
 		case DIRTYPE:
@@ -1047,10 +1046,6 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
 	  modes[0] = 'M';
 	  modes[0] = 'M';
 	  break;
 	  break;
 
 
-	case GNUTYPE_NAMES:
-	  modes[0] = 'N';
-	  break;
-
 	case GNUTYPE_LONGNAME:
 	case GNUTYPE_LONGNAME:
 	case GNUTYPE_LONGLINK:
 	case GNUTYPE_LONGLINK:
 	  modes[0] = 'L';
 	  modes[0] = 'L';
@@ -1234,10 +1229,6 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
 		   uintbuf));
 		   uintbuf));
 	  fprintf (stdlis, _("--Continued at byte %s--\n"), size);
 	  fprintf (stdlis, _("--Continued at byte %s--\n"), size);
 	  break;
 	  break;
-
-	case GNUTYPE_NAMES:
-	  fprintf (stdlis, _("--Mangled file names--\n"));
-	  break;
 	}
 	}
     }
     }
   fflush (stdlis);
   fflush (stdlis);

+ 0 - 121
src/mangle.c

@@ -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;
-    }
-}

+ 1 - 3
src/tar.h

@@ -165,6 +165,7 @@ struct oldgnu_header
    'A' Solaris Access Control List
    'A' Solaris Access Control List
    'E' Solaris Extended Attribute File
    'E' Solaris Extended Attribute File
    'I' Inode only, as in 'star'
    '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)  */
    'X' POSIX 1003.1-2001 eXtended (VU version)  */
 
 
 /* This is a dir entry that contains the names of files that were in the
 /* 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.  */
 /* This is the continuation of a file that began on another volume.  */
 #define GNUTYPE_MULTIVOL 'M'
 #define GNUTYPE_MULTIVOL 'M'
 
 
-/* For storing filenames that do not fit into the main header.  */
-#define GNUTYPE_NAMES 'N'
-
 /* This is for sparse files.  */
 /* This is for sparse files.  */
 #define GNUTYPE_SPARSE 'S'
 #define GNUTYPE_SPARSE 'S'