which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@5403 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			677 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			677 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
The following are the known types of zipfile extra fields as of this
 | 
						|
writing.  Extra fields are documented in PKWARE's appnote.txt and are
 | 
						|
intended to allow for backward- and forward-compatible extensions to
 | 
						|
the zipfile format.  Multiple extra-field types may be chained together,
 | 
						|
provided that the total length of all extra-field data is less than 64KB.
 | 
						|
(In fact, PKWARE requires that the total length of the entire file header,
 | 
						|
including timestamp, file attributes, filename, comment, extra field, etc.,
 | 
						|
be no more than 64KB.)
 | 
						|
 | 
						|
Each extra-field type (or subblock) must contain a four-byte header con-
 | 
						|
sisting of a two-byte header ID and a two-byte length (little-endian) for
 | 
						|
the remaining data in the subblock.  If there are additional subblocks
 | 
						|
within the extra field, the header for each one will appear immediately 
 | 
						|
following the data for the previous subblock (i.e., with no padding for
 | 
						|
alignment).
 | 
						|
 | 
						|
All integer fields in the descriptions below are in little-endian (Intel)
 | 
						|
format unless otherwise specified.  Note that "Short" means two bytes and
 | 
						|
"Long" means four bytes, regardless of their native sizes.
 | 
						|
 | 
						|
Greg Roelofs, 970531
 | 
						|
 | 
						|
			-------------------------
 | 
						|
 | 
						|
The current list of Header IDs is as follows (0-31 are reserved by PKWARE):
 | 
						|
 | 
						|
	  0x0007        AV Info
 | 
						|
	  0x0009        OS/2 extended attributes
 | 
						|
	  0x000c        PKWARE VAX/VMS
 | 
						|
	  0x000d        reserved for Unix
 | 
						|
	  0x07c8        Info-ZIP Macintosh
 | 
						|
	  0x2605        ZipIt Macintosh
 | 
						|
	  0x4341        Acorn/SparkFS (David Pilling)
 | 
						|
	  0x4453	Windows NT security descriptor (binary ACL)
 | 
						|
	  0x4704        VM/CMS
 | 
						|
	  0x470f        MVS
 | 
						|
	  0x4b46        FWKCS MD5 (third party, see below)
 | 
						|
	  0x4c41        OS/2 access control list (text ACL)
 | 
						|
	  0x4d49        Info-ZIP VMS (VAX or Alpha)
 | 
						|
	  0x5356        AOS/VS (binary ACL)
 | 
						|
	  0x5455        extended timestamp
 | 
						|
	  0x5855        Info-ZIP Unix (original; also OS/2, NT, etc.)
 | 
						|
	  0x6542        BeOS (BeBox, PowerMac, etc.)
 | 
						|
	  0x756e        ASi Unix
 | 
						|
	  0x7855        Info-ZIP Unix (new)
 | 
						|
	  0xfb4a        SMS/QDOS
 | 
						|
 | 
						|
The following are detailed descriptions of the known extra-field block types:
 | 
						|
 | 
						|
	 -OS/2 Extended Attributes Extra Field:
 | 
						|
	  ====================================
 | 
						|
 | 
						|
	  The following is the layout of the OS/2 extended attributes "extra"
 | 
						|
	  block.  (Last Revision 960922)
 | 
						|
 | 
						|
	  Note: all fields stored in Intel low-byte/high-byte order.
 | 
						|
 | 
						|
	  Local-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (OS/2)  0x0009	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  BSize		Long		uncompressed EA data size
 | 
						|
	  CType		Short		compression type
 | 
						|
	  EACRC		Long		CRC value for uncompressed EA data
 | 
						|
	  (var.)	variable	compressed EA data
 | 
						|
 | 
						|
	  Central-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (OS/2)  0x0009	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  BSize		Long		size of uncompressed local EA data
 | 
						|
 | 
						|
	  The value of CType is interpreted according to the "compression
 | 
						|
	  method" section above; i.e., 0 for stored, 8 for deflated, etc.
 | 
						|
 | 
						|
	  The OS/2 extended attribute structure (FEA2LIST) is compressed and
 | 
						|
	  then stored in its entirety within this structure.  There will only
 | 
						|
	  ever be one block of data in the variable-length field.
 | 
						|
 | 
						|
 | 
						|
	 -OS/2 Access Control List Extra Field:
 | 
						|
	  ====================================
 | 
						|
 | 
						|
	  The following is the layout of the OS/2 ACL extra block.
 | 
						|
	  (Last Revision 960922)
 | 
						|
 | 
						|
	  Local-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (ACL)   0x4c41	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  BSize		Long		uncompressed ACL data size
 | 
						|
	  CType		Short		compression type
 | 
						|
	  EACRC		Long		CRC value for uncompressed ACL data
 | 
						|
	  (var.)	variable	compressed ACL data
 | 
						|
 | 
						|
	  Central-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (ACL)   0x4c41	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  BSize		Long		size of uncompressed local ACL data
 | 
						|
 | 
						|
	  The value of CType is interpreted according to the "compression
 | 
						|
	  method" section above; i.e., 0 for stored, 8 for deflated, etc.
 | 
						|
 | 
						|
	  The uncompressed ACL data consist of a text header of the form
 | 
						|
	  "ACL1:%hX,%hd\n", where the first field is the OS/2 ACCINFO acc_attr
 | 
						|
	  member and the second is acc_count, followed by acc_count strings
 | 
						|
	  of the form "%s,%hx\n", where the first field is acl_ugname (user
 | 
						|
	  group name) and the second acl_access.  This block type will be
 | 
						|
	  extended for other operating systems as needed.
 | 
						|
 | 
						|
 | 
						|
	 -Windows NT Security Descriptor Extra Field:
 | 
						|
	  ==========================================
 | 
						|
 | 
						|
	  The following is the layout of the NT Security Descriptor (another
 | 
						|
	  type of ACL) extra block.  (Last Revision 960922)
 | 
						|
 | 
						|
	  Local-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (SD)    0x4453	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  BSize		Long		uncompressed SD data size
 | 
						|
	  Version	Byte		version of uncompressed SD data format
 | 
						|
	  CType		Short		compression type
 | 
						|
	  EACRC		Long		CRC value for uncompressed SD data
 | 
						|
	  (var.)	variable	compressed SD data
 | 
						|
 | 
						|
	  Central-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (SD)    0x4453	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  BSize		Long		size of uncompressed local SD data
 | 
						|
	  Version	Byte		version of uncompressed SD data format
 | 
						|
 | 
						|
	  The value of CType is interpreted according to the "compression
 | 
						|
	  method" section above; i.e., 0 for stored, 8 for deflated, etc.
 | 
						|
	  Version specifies how the compressed data are to be interpreted
 | 
						|
	  and allows for future expansion of this extra field type.  Currently
 | 
						|
	  only version 0 is defined.
 | 
						|
 | 
						|
	  For version 0, the compressed data are to be interpreted as a single
 | 
						|
	  valid Windows NT SECURITY_DESCRIPTOR data structure, in self-relative
 | 
						|
	  format.
 | 
						|
 | 
						|
 | 
						|
	 -PKWARE VAX/VMS Extra Field:
 | 
						|
	  ==========================
 | 
						|
 | 
						|
	  The following is the layout of PKWARE's VAX/VMS attributes "extra"
 | 
						|
	  block.  (Last Revision 12/17/91)
 | 
						|
 | 
						|
	  Note: all fields stored in Intel low-byte/high-byte order.
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (VMS)   0x000c        Short           Tag for this "extra" block type
 | 
						|
	  TSize         Short           Total Data Size for this block
 | 
						|
	  CRC           Long            32-bit CRC for remainder of the block
 | 
						|
	  Tag1          Short           VMS attribute tag value #1
 | 
						|
	  Size1         Short           Size of attribute #1, in bytes
 | 
						|
	  (var.)        Size1           Attribute #1 data
 | 
						|
	  .
 | 
						|
	  .
 | 
						|
	  .
 | 
						|
	  TagN          Short           VMS attribute tage value #N
 | 
						|
	  SizeN         Short           Size of attribute #N, in bytes
 | 
						|
	  (var.)        SizeN           Attribute #N data
 | 
						|
 | 
						|
	  Rules:
 | 
						|
 | 
						|
	  1. There will be one or more of attributes present, which will
 | 
						|
	     each be preceded by the above TagX & SizeX values.  These
 | 
						|
	     values are identical to the ATR$C_XXXX and ATR$S_XXXX constants
 | 
						|
	     which are defined in ATR.H under VMS C.  Neither of these values
 | 
						|
	     will ever be zero.
 | 
						|
 | 
						|
	  2. No word alignment or padding is performed.
 | 
						|
 | 
						|
	  3. A well-behaved PKZIP/VMS program should never produce more than
 | 
						|
	     one sub-block with the same TagX value.  Also, there will never
 | 
						|
	     be more than one "extra" block of type 0x000c in a particular
 | 
						|
	     directory record.
 | 
						|
 | 
						|
 | 
						|
	 -Info-ZIP VMS Extra Field:
 | 
						|
	  ========================
 | 
						|
 | 
						|
	  The following is the layout of Info-ZIP's VMS attributes extra
 | 
						|
	  block for VAX or Alpha AXP.  The local-header and central-header
 | 
						|
	  versions are identical.  (Last Revision 960922)
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (VMS2)  0x4d49	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  ID		Long		block ID
 | 
						|
	  Flags		Short		info bytes
 | 
						|
	  BSize		Short		uncompressed block size
 | 
						|
	  Reserved	Long		(reserved)
 | 
						|
	  (var.)	variable	compressed VMS file-attributes block
 | 
						|
 | 
						|
	  The block ID is one of the following unterminated strings:
 | 
						|
 | 
						|
		"VFAB"		struct FAB
 | 
						|
		"VALL"		struct XABALL
 | 
						|
		"VFHC"		struct XABFHC
 | 
						|
		"VDAT"		struct XABDAT
 | 
						|
		"VRDT"		struct XABRDT
 | 
						|
		"VPRO"		struct XABPRO
 | 
						|
		"VKEY"		struct XABKEY
 | 
						|
		"VMSV"		version (e.g., "V6.1"; truncated at hyphen)
 | 
						|
		"VNAM"		reserved
 | 
						|
 | 
						|
	  The lower three bits of Flags indicate the compression method.  The
 | 
						|
	  currently defined methods are:
 | 
						|
 | 
						|
		0	stored (not compressed)
 | 
						|
		1	simple "RLE"
 | 
						|
		2	deflated
 | 
						|
 | 
						|
	  The "RLE" method simply replaces zero-valued bytes with zero-valued
 | 
						|
	  bits and non-zero-valued bytes with a "1" bit followed by the byte
 | 
						|
	  value.
 | 
						|
 | 
						|
	  The variable-length compressed data contains only the data corre-
 | 
						|
	  sponding to the indicated structure or string.  Typically multiple
 | 
						|
	  VMS2 extra fields are present (each with a unique block type).
 | 
						|
 | 
						|
 | 
						|
	 -Info-ZIP Macintosh Extra Field:
 | 
						|
	  ==============================
 | 
						|
 | 
						|
	  The following is the layout of the (old) Info-ZIP resource-fork extra
 | 
						|
	  block for Macintosh.  The local-header and central-header versions
 | 
						|
	  are identical.  (Last Revision 960922)
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (Mac)   0x07c8	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  "JLEE"	beLong		extra-field signature
 | 
						|
	  FInfo		16 bytes	Macintosh FInfo structure
 | 
						|
	  CrDat		beLong		HParamBlockRec fileParam.ioFlCrDat
 | 
						|
	  MdDat		beLong		HParamBlockRec fileParam.ioFlMdDat
 | 
						|
	  Flags		beLong		info bits
 | 
						|
	  DirID		beLong		HParamBlockRec fileParam.ioDirID
 | 
						|
	  VolName	28 bytes	volume name (optional)
 | 
						|
 | 
						|
	  All fields but the first two are in native Macintosh format
 | 
						|
	  (big-endian Motorola order, not little-endian Intel).  The least
 | 
						|
	  significant bit of Flags is 1 if the file is a data fork, 0 other-
 | 
						|
	  wise.  In addition, if this extra field is present, the filename
 | 
						|
	  has an extra 'd' or 'r' appended to indicate data fork or resource
 | 
						|
	  fork.  The 28-byte VolName field may be omitted.
 | 
						|
 | 
						|
 | 
						|
	 -ZipIt Macintosh Extra Field:
 | 
						|
	  ===========================
 | 
						|
 | 
						|
	  The following is the layout of the ZipIt extra block for Macintosh.
 | 
						|
	  The local-header and central-header versions are identical.
 | 
						|
	  (Last Revision 970130)
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (Mac2)  0x2605	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  "ZPIT"	beLong		extra-field signature
 | 
						|
	  FnLen		Byte		length of FileName
 | 
						|
	  FileName	variable	full Macintosh filename
 | 
						|
	  FileType	beLong		four-byte Mac file type string
 | 
						|
	  Creator	beLong		four-byte Mac creator string
 | 
						|
 | 
						|
 | 
						|
	 -Acorn SparkFS Extra Field:
 | 
						|
	  =========================
 | 
						|
 | 
						|
	  The following is the layout of David Pilling's SparkFS extra block
 | 
						|
	  for Acorn RISC OS.  The local-header and central-header versions are
 | 
						|
	  identical.  (Last Revision 960922)
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (Acorn) 0x4341	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  "ARC0"	Long		extra-field signature
 | 
						|
	  LoadAddr	Long		load address or file type
 | 
						|
	  ExecAddr	Long		exec address
 | 
						|
	  Attr		Long		file permissions
 | 
						|
	  Zero		Long		reserved; always zero
 | 
						|
 | 
						|
	  The following bits of Attr are associated with the given file
 | 
						|
	  permissions:
 | 
						|
 | 
						|
		bit 0		user-writable ('W')
 | 
						|
		bit 1		user-readable ('R')
 | 
						|
		bit 2		reserved
 | 
						|
		bit 3		locked ('L')
 | 
						|
		bit 4		publicly writable ('w')
 | 
						|
		bit 5		publicly readable ('r')
 | 
						|
		bit 6		reserved
 | 
						|
		bit 7		reserved
 | 
						|
 | 
						|
 | 
						|
	 -VM/CMS Extra Field:
 | 
						|
	  ==================
 | 
						|
 | 
						|
	  The following is the layout of the file-attributes extra block for
 | 
						|
	  VM/CMS.  The local-header and central-header versions are
 | 
						|
	  identical.  (Last Revision 960922)
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
 (VM/CMS) 0x4704	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  flData	variable	file attributes data
 | 
						|
 | 
						|
	  flData is an uncompressed fldata_t struct.
 | 
						|
 | 
						|
 | 
						|
	 -MVS Extra Field:
 | 
						|
	  ===============
 | 
						|
 | 
						|
	  The following is the layout of the file-attributes extra block for
 | 
						|
	  MVS.  The local-header and central-header versions are identical.
 | 
						|
	  (Last Revision 960922)
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (MVS)   0x470f	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  flData	variable	file attributes data
 | 
						|
 | 
						|
	  flData is an uncompressed fldata_t struct.
 | 
						|
 | 
						|
 | 
						|
	 -Extended Timestamp Extra Field:
 | 
						|
	  ==============================
 | 
						|
 | 
						|
	  The following is the layout of the extended-timestamp extra block.
 | 
						|
	  (Last Revision 970118)
 | 
						|
 | 
						|
	  Local-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (time)  0x5455	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  Flags		Byte		info bits
 | 
						|
	  (ModTime)	Long		time of last modification (UTC/GMT)
 | 
						|
	  (AcTime)	Long		time of last access (UTC/GMT)
 | 
						|
	  (CrTime)	Long		time of original creation (UTC/GMT)
 | 
						|
 | 
						|
	  Central-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (time)  0x5455	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  Flags		Byte		info bits (refers to local header!)
 | 
						|
	  (ModTime)	Long		time of last modification (UTC/GMT)
 | 
						|
 | 
						|
	  The central-header extra field contains the modification time only,
 | 
						|
	  or no timestamp at all.  TSize is used to flag its presence or
 | 
						|
	  absence.  But note:
 | 
						|
 | 
						|
	      If "Flags" indicates that Modtime is present in the local header
 | 
						|
	      field, it MUST be present in the central header field, too!
 | 
						|
	      This correspondence is required because the modification time
 | 
						|
	      value may be used to support trans-timezone freshening and
 | 
						|
	      updating operations with zip archives.
 | 
						|
 | 
						|
	  The time values are in standard Unix signed-long format, indicating
 | 
						|
	  the number of seconds since 1 January 1970 00:00:00.  The times
 | 
						|
	  are relative to Coordinated Universal Time (UTC), also sometimes
 | 
						|
	  referred to as Greenwich Mean Time (GMT).  To convert to local time,
 | 
						|
	  the software must know the local timezone offset from UTC/GMT.
 | 
						|
 | 
						|
	  The lower three bits of Flags in both headers indicate which time-
 | 
						|
	  stamps are present in the LOCAL extra field:
 | 
						|
 | 
						|
		bit 0		if set, modification time is present
 | 
						|
		bit 1		if set, access time is present
 | 
						|
		bit 2		if set, creation time is present
 | 
						|
		bits 3-7	reserved for additional timestamps; not set
 | 
						|
 | 
						|
	  Those times that are present will appear in the order indicated, but
 | 
						|
	  any combination of times may be omitted.  (Creation time may be
 | 
						|
	  present without access time, for example.)  TSize should equal
 | 
						|
	  (1 + 4*(number of set bits in Flags)), as the block is currently
 | 
						|
	  defined.  Other timestamps may be added in the future.
 | 
						|
 | 
						|
 | 
						|
	 -Info-ZIP Unix Extra Field (type 1):
 | 
						|
	  ==================================
 | 
						|
 | 
						|
	  The following is the layout of the old Info-ZIP extra block for
 | 
						|
	  Unix.  It has been replaced by the extended-timestamp extra block
 | 
						|
	  (0x5455) and the Unix type 2 extra block (0x7855).
 | 
						|
	  (Last Revision 970118)
 | 
						|
 | 
						|
	  Local-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (Unix1) 0x5855	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  ModTime	Long		time of last modification (UTC/GMT)
 | 
						|
	  AcTime	Long		time of last access (UTC/GMT)
 | 
						|
	  UID		Short		Unix user ID
 | 
						|
	  GID		Short		Unix group ID
 | 
						|
 | 
						|
	  Central-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (Unix1) 0x5855	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  ModTime	Long		time of last modification (GMT/UTC)
 | 
						|
	  AcTime	Long		time of last access (GMT/UTC)
 | 
						|
 | 
						|
	  The file modification and access times are in standard Unix signed-
 | 
						|
	  long format, indicating the number of seconds since 1 January 1970
 | 
						|
	  00:00:00.  The times are relative to Coordinated Universal Time
 | 
						|
	  (UTC), also sometimes referred to as Greenwich Mean Time (GMT).  To
 | 
						|
	  convert to local time, the software must know the local timezone
 | 
						|
	  offset from UTC/GMT.  The modification time may be used by non-Unix
 | 
						|
	  systems to support inter-timezone freshening and updating of zip
 | 
						|
	  archives.
 | 
						|
 | 
						|
	  The local-header extra block may optionally contain UID and GID
 | 
						|
	  info for the file.  The local-header TSize value is the only
 | 
						|
	  indication of this.  Note that Unix UIDs and GIDs are usually
 | 
						|
	  specific to a particular machine, and they generally require root
 | 
						|
	  access to restore.
 | 
						|
 | 
						|
	  This extra field type is obsolete, but it has been in use since
 | 
						|
	  mid-1994.  Therefore future archiving software should continue to
 | 
						|
	  support it.  Some guidelines:
 | 
						|
 | 
						|
	      An archive member should either contain the old "Unix1"
 | 
						|
	      extra field block or the new extra field types "time" and/or
 | 
						|
	      "Unix2".
 | 
						|
 | 
						|
	      If both the old "Unix1" block type and one or both of the new
 | 
						|
	      block types "time" and "Unix2" are found, the "Unix1" block
 | 
						|
	      should be considered invalid and ignored.
 | 
						|
 | 
						|
	      Unarchiving software should recognize both old and new extra
 | 
						|
	      field block types, but the info from new types overrides the
 | 
						|
	      old "Unix1" field.
 | 
						|
 | 
						|
	      Archiving software should recognize "Unix1" extra fields for
 | 
						|
	      timestamp comparison but never create it for updated, freshened
 | 
						|
	      or new archive members.  When copying existing members to a new
 | 
						|
	      archive, any "Unix1" extra field blocks should be converted to
 | 
						|
	      the new "time" and/or "Unix2" types.
 | 
						|
 | 
						|
 | 
						|
	 -Info-ZIP Unix Extra Field (type 2):
 | 
						|
	  ==================================
 | 
						|
 | 
						|
	  The following is the layout of the new Info-ZIP extra block for
 | 
						|
	  Unix.  (Last Revision 960922)
 | 
						|
 | 
						|
	  Local-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (Unix2) 0x7855	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  UID		Short		Unix user ID
 | 
						|
	  GID		Short		Unix group ID
 | 
						|
 | 
						|
	  Central-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (Unix2) 0x7855	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
 | 
						|
	  The data size of the central-header version is zero; it is used
 | 
						|
	  solely as a flag that UID/GID info is present in the local-header
 | 
						|
	  extra field.  If additional fields are ever added to the local
 | 
						|
	  version, the central version may be extended to indicate this.
 | 
						|
 | 
						|
	  Note that Unix UIDs and GIDs are usually specific to a particular
 | 
						|
	  machine, and they generally require root access to restore.
 | 
						|
 | 
						|
 | 
						|
	 -ASi Unix Extra Field:
 | 
						|
	  ====================
 | 
						|
 | 
						|
	  The following is the layout of the ASi extra block for Unix.  The
 | 
						|
	  local-header and central-header versions are identical.
 | 
						|
	  (Last Revision 960916)
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (Unix3) 0x756e	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  CRC		Long		CRC-32 of the remaining data
 | 
						|
	  Mode		Short		file permissions
 | 
						|
	  SizDev	Long		symlink'd size OR major/minor dev num
 | 
						|
	  UID		Short		user ID
 | 
						|
	  GID		Short		group ID
 | 
						|
	  (var.)	variable	symbolic link filename
 | 
						|
 | 
						|
	  Mode is the standard Unix st_mode field from struct stat, containing
 | 
						|
	  user/group/other permissions, setuid/setgid and symlink info, etc.
 | 
						|
 | 
						|
	  If Mode indicates that this file is a symbolic link, SizDev is the
 | 
						|
	  size of the file to which the link points.  Otherwise, if the file
 | 
						|
	  is a device, SizDev contains the standard Unix st_rdev field from
 | 
						|
	  struct stat (includes the major and minor numbers of the device).
 | 
						|
	  SizDev is undefined in other cases.
 | 
						|
 | 
						|
	  If Mode indicates that the file is a symbolic link, the final field
 | 
						|
	  will be the name of the file to which the link points.  The file-
 | 
						|
	  name length can be inferred from TSize.
 | 
						|
 | 
						|
	  [Note that TSize may incorrectly refer to the data size not counting
 | 
						|
	   the CRC; i.e., it may be four bytes too small.]
 | 
						|
 | 
						|
 | 
						|
	 -BeOS Extra Field:
 | 
						|
	  ================
 | 
						|
 | 
						|
	  The following is the layout of the file-attributes extra block for
 | 
						|
	  BeOS.  (Last Revision 970531)
 | 
						|
 | 
						|
	  Local-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (BeOS)  0x6542	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  BSize		Long		uncompressed file attribute data size
 | 
						|
	  Flags		Byte		info bits
 | 
						|
	  (CType)	Short		compression type
 | 
						|
	  (CRC)		Long		CRC value for uncompressed file attribs
 | 
						|
	  Attribs	variable	file attribute data
 | 
						|
 | 
						|
	  Central-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (BeOS)  0x6542	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  BSize		Long		size of uncompressed local EF block data
 | 
						|
	  Flags		Byte		info bits
 | 
						|
 | 
						|
	  The least significant bit of Flags in both headers indicates whether
 | 
						|
	  the LOCAL extra field is uncompressed (and therefore whether CType
 | 
						|
	  and CRC are omitted):
 | 
						|
 | 
						|
		bit 0		if set, Attribs is uncompressed (no CType, CRC)
 | 
						|
		bits 1-7	reserved; if set, assume error or unknown data
 | 
						|
 | 
						|
	  Currently the only supported compression types are deflated (type 8)
 | 
						|
	  and stored (type 0); the latter is not used by Info-ZIP's Zip but is
 | 
						|
	  supported by UnZip.
 | 
						|
 | 
						|
	  Attribs is a BeOS-specific block of data in big-endian format with
 | 
						|
	  the following structure (if compressed, uncompress it first):
 | 
						|
 | 
						|
	      Value	Size		Description
 | 
						|
	      -----	----		-----------
 | 
						|
	      Name	variable	attribute name (null-terminated string)
 | 
						|
	      Type	Long		attribute type (32-bit unsigned integer)
 | 
						|
	      Size	Long Long	data size for this sub-block (64 bits)
 | 
						|
	      Data	variable	attribute data
 | 
						|
 | 
						|
	  The attribute structure is repeated for every attribute.  The Data
 | 
						|
	  field may contain anything--text, flags, bitmaps, etc.
 | 
						|
 | 
						|
 | 
						|
	 -SMS/QDOS Extra Field:
 | 
						|
	  ====================
 | 
						|
 | 
						|
	  The following is the layout of the file-attributes extra block for
 | 
						|
	  SMS/QDOS.  The local-header and central-header versions are identical.
 | 
						|
	  (Last Revision 960929)
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (QDOS)  0xfb4a	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  LongID	Long		extra-field signature
 | 
						|
	  (ExtraID)	Long		additional signature/flag bytes
 | 
						|
	  QDirect	64 bytes	qdirect structure
 | 
						|
 | 
						|
	  LongID may be "QZHD" or "QDOS".  In the latter case, ExtraID will
 | 
						|
	  be present.  Its first three bytes are "02\0"; the last byte is
 | 
						|
	  currently undefined.
 | 
						|
 | 
						|
	  QDirect contains the file's uncompressed directory info (qdirect
 | 
						|
	  struct).  Its elements are in native (big-endian) format:
 | 
						|
 | 
						|
	  d_length	beLong		file length
 | 
						|
	  d_access	byte		file access type
 | 
						|
	  d_type	byte		file type
 | 
						|
	  d_datalen	beLong		data length
 | 
						|
	  d_reserved	beLong		unused
 | 
						|
	  d_szname	beShort		size of filename
 | 
						|
	  d_name	36 bytes	filename
 | 
						|
	  d_update	beLong		time of last update
 | 
						|
	  d_refdate	beLong		file version number
 | 
						|
	  d_backup	beLong		time of last backup (archive date)
 | 
						|
 | 
						|
 | 
						|
	 -AOS/VS Extra Field:
 | 
						|
	  ==================
 | 
						|
 | 
						|
	  The following is the layout of the extra block for Data General
 | 
						|
	  AOS/VS.  The local-header and central-header versions are identical.
 | 
						|
	  (Last Revision 961125)
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (AOSVS) 0x5356	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block
 | 
						|
	  "FCI\0"	Long		extra-field signature
 | 
						|
	  Version	Byte		version of AOS/VS extra block (10 = 1.0)
 | 
						|
	  Fstat		variable	fstat packet
 | 
						|
	  AclBuf	variable	raw ACL data ($MXACL bytes)
 | 
						|
 | 
						|
	  Fstat contains the file's uncompressed fstat packet, which is one of
 | 
						|
	  the following:
 | 
						|
 | 
						|
		normal fstat packet		(P_FSTAT struct)
 | 
						|
		DIR/CPD fstat packet		(P_FSTAT_DIR struct)
 | 
						|
		unit (device) fstat packet	(P_FSTAT_UNIT struct)
 | 
						|
		IPC file fstat packet		(P_FSTAT_IPC struct)
 | 
						|
 | 
						|
	  AclBuf contains the raw ACL data; its length is $MXACL.
 | 
						|
 | 
						|
 | 
						|
         -FWKCS MD5 Extra Field:
 | 
						|
          =====================
 | 
						|
 | 
						|
	  The following is the layout of the optional extra block used by the
 | 
						|
	  FWKCS utility.  There is no local-header version; the following
 | 
						|
	  applies only to the central header.  (Last Revision 961207)
 | 
						|
 | 
						|
	  Central-header version:
 | 
						|
 | 
						|
	  Value		Size		Description
 | 
						|
	  -----		----		-----------
 | 
						|
  (MD5)   0x4b46	Short		tag for this extra block type
 | 
						|
	  TSize		Short		total data size for this block (19)
 | 
						|
	  "MD5"		3 bytes		extra-field signature
 | 
						|
	  MD5hash	16 bytes	128-bit MD5 hash of uncompressed data
 | 
						|
 | 
						|
	  The MD5 hash in this extra block is used to automatically identify
 | 
						|
	  files independent of their filenames; it is an an enhanced contents-
 | 
						|
	  signature.  Adding or removing this block should preserve the PKWARE
 | 
						|
	  AV (Authenticity Verification) signature.
 | 
						|
 | 
						|
	  ``The MD5 algorithm is being placed in the public domain for review
 | 
						|
	  and possible adoption as a standard.'' (Ron Rivest, MIT Laboratory
 | 
						|
	  for Computer Science and RSA Data Security, Inc., April 1992, RFC
 | 
						|
	  1321, 11.76-77).  FWKCS is a trademark of Frederick W. Kantor.
 |