[BusyBox-cvs] busybox/archival/libunarchive get_header_tar.c, 1.33, 1.34

Glenn McGrath bug1 at busybox.net
Fri Feb 20 02:25:20 UTC 2004


Update of /var/cvs/busybox/archival/libunarchive
In directory nail:/tmp/cvs-serv4163/archival/libunarchive

Modified Files:
	get_header_tar.c 
Log Message:
A strict interpretation of the ustar format requires the type flag to be 
interpreted, we cannot depend on the file type being set in the mode 
field.


Index: get_header_tar.c
===================================================================
RCS file: /var/cvs/busybox/archival/libunarchive/get_header_tar.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- get_header_tar.c	19 Feb 2004 08:48:30 -0000	1.33
+++ get_header_tar.c	20 Feb 2004 02:25:18 -0000	1.34
@@ -13,9 +13,9 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  *
- *  FIXME: Better checking required in oldcompatability mode, 
- *  the file db.1.85.tar.gz from sleepycat.com has trailing garbage
- *  GNU tar can handle it, busybox tar reports invalid tar header. 
+ *  FIXME:
+ *    In privelidged mode if uname and gname map to a uid amd gid then use the
+ *    mapped value instead of the uid/gid values in tar header
  *
  *  References:
  *    GNU tar and star man pages,
@@ -135,14 +135,16 @@
 	case 'g':
 		bb_error_msg_and_die("pax is not tar");
 		break;
-#ifdef CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY
+	case '7':
+		/* Reserved for high performance files, treat as normal file */
 	case 0:
 	case '0':
+#ifdef CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY
 		if (last_char_is(file_header->name, '/')) {
 			file_header->mode |= S_IFDIR;
-		} else {
+		} else
+#endif
 			file_header->mode |= S_IFREG;
-		}
 		break;
 	case '2':
 		file_header->mode |= S_IFLNK;
@@ -159,11 +161,6 @@
 	case '6':
 		file_header->mode |= S_IFIFO;
 		break;
-	case '7':
-		/* Reserved for high performance files, treat as normal file */
-		file_header->mode |= S_IFREG;
-		break;
-#endif
 #ifdef CONFIG_FEATURE_TAR_GNU_EXTENSIONS
 	case 'L': {
 			longname = xmalloc(file_header->size + 1);




More information about the busybox-cvs mailing list