677 lines
24 KiB
Plaintext
677 lines
24 KiB
Plaintext
|
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.
|