--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+ <HEAD>
+ <TITLE>Apache module mod_mime_magic</TITLE>
+ </HEAD>
+ <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
+ <BODY
+ BGCOLOR="#FFFFFF"
+ TEXT="#000000"
+ LINK="#0000FF"
+ VLINK="#000080"
+ ALINK="#FF0000"
+ >
+ <h1 align="CENTER">Module mod_mime_magic</h1>
+
+ This module is an optional extension to the Apache HTTPD server.
+ The current version can be obtained from
+ <a href="http://www.employees.org/~ikluft/apache/mod_mime_magic/">
+ http://www.employees.org/~ikluft/apache/mod_mime_magic/</a>.
+
+ <h2>Summary</h2>
+
+ This module is derived from a free version of the <code>file(1)</code>
+ command for Unix,
+ which uses "magic numbers" and other hints from a file's contents to
+ figure out what the contents are.
+ In the case of this module,
+ it tries to figure out the MIME type of the file.
+ <p>
+ This module is only active if the magic file exists and
+ was successfully opened at server-configuration time.
+ The magic file can be named by the
+ <A HREF="#mimemagicfile"><code>MimeMagicFile</code></a>
+ directive or defaults to conf/magic.
+ <p>
+ The contents of the file are plain ASCII text in 4-5 columns.
+ Blank lines are allowed but ignored.
+ Commented lines use a hash mark "#".
+ The remaining lines are parsed for the following columns:
+ <table border=1>
+ <tr valign=top>
+ <th>Column</th>
+ <th>Description</th>
+ </tr>
+ <tr valign=top>
+ <td>1</td>
+ <td>byte number to begin checking from
+ <br>
+ ">" indicates a dependency upon the previous non-">" line</td>
+ </tr><tr valign=top>
+ <td>2</td>
+ <td>type of data to match
+ <table border=1>
+ <tr><td>byte</td><td>single character</td></tr>
+ <tr><td>short</td><td>machine-order 16-bit integer</td></tr>
+ <tr><td>long</td><td>machine-order 32-bit integer</td></tr>
+ <tr><td>string</td><td>arbitrary-length string</td></tr>
+ <tr><td>date</td><td>long integer date
+ (seconds since Unix epoch/1970)</td></tr>
+ <tr><td>beshort</td><td>big-endian 16-bit integer</td></tr>
+ <tr><td>belong</td><td>big-endian 32-bit integer</td></tr>
+ <tr><td>bedate</td><td>big-endian 32-bit integer date</td></tr>
+ <tr><td>leshort</td><td>little-endian 16-bit integer</td></tr>
+ <tr><td>lelong</td><td>little-endian 32-bit integer</td></tr>
+ <tr><td>ledate</td><td>little-endian 32-bit integer date</td></tr>
+ </table>
+ </td>
+ </tr><tr valign=top>
+ <td>3</td>
+ <td>contents of data to match</td>
+ </tr><tr valign=top>
+ <td>4</td>
+ <td>MIME type if matched</td>
+ </tr><tr valign=top>
+ <td>5</td>
+ <td>MIME encoding if matched (optional)</td>
+ </tr>
+ </table>
+
+ <p>
+ For example, the following magic file lines
+ would recognize some audio formats.
+
+<pre>
+# Sun/NeXT audio data
+0 string .snd
+>12 belong 1 audio/basic
+>12 belong 2 audio/basic
+>12 belong 3 audio/basic
+>12 belong 4 audio/basic
+>12 belong 5 audio/basic
+>12 belong 6 audio/basic
+>12 belong 7 audio/basic
+>12 belong 23 audio/x-adpcm
+</pre>
+
+ Or these would recognize the difference between "*.doc" files containing
+ Microsoft Word or FrameMaker documents. (These are incompatible file
+ formats which use the same file suffix.)
+
+<pre>
+# Frame
+0 string \<MakerFile application/x-frame
+0 string \<MIFFile application/x-frame
+0 string \<MakerDictionary application/x-frame
+0 string \<MakerScreenFon application/x-frame
+0 string \<MML application/x-frame
+0 string \<Book application/x-frame
+0 string \<Maker application/x-frame
+
+# MS-Word
+0 string \376\067\0\043 application/msword
+0 string \320\317\021\340\241\261 application/msword
+0 string \333\245-\0\0\0 application/msword
+</pre>
+
+ An optional MIME encoding can be included as a fifth column.
+ For example, this can recognize gzipped files and set the encoding
+ for them.
+
+<pre>
+# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver)
+0 string \037\213 application/octet-stream x-gzip
+</pre>
+
+ <h3>Performance Issues</h3>
+
+ This module is not for every system. If your system is barely keeping
+ up with its load or if you're performing a web server benchmark,
+ you may not want to enable this because the processing is not free.
+ <p>
+ However, an effort was made to improve the performance of the original
+ file(1) code to make it fit in a busy web server.
+ It was designed for a server where there are thousands of users who
+ publish their own documents.
+ This is probably very common on intranets.
+ Many times, it's helpful
+ if the server can make more intelligent decisions about a file's
+ contents than the file name allows
+ ...even if just to reduce the "why doesn't my page work" calls
+ when users improperly name their own files.
+ You have to decide if the extra work suits your environment.
+ <p>
+ When compiling an Apache server, this module should be at or near the
+ top of the list of modules in the Configuration file. The modules are
+ listed in increasing priority so that will mean this one is used only
+ as a last resort, just like it was designed to.
+
+ <h2>Directives</h2>
+ <p>
+ <UL>
+ <LI><A HREF="#mimemagicfile">MimeMagicFile</A>
+ </LI>
+ </UL>
+ </P>
+ <HR>
+ <H2><A NAME="mimemagicfile">
+ MimeMagicFile
+ </A></H2>
+ <P>
+ <STRONG>Syntax:</STRONG> MimeMagicFile <em>magic-file-name</em>
+ <BR>
+ <STRONG>Default:</STRONG> conf/magic
+ <BR>
+ <STRONG>Context:</STRONG> server config, virtual host
+ <BR>
+ <STRONG>Status:</STRONG> Extension
+ <BR>
+ <STRONG>Module:</STRONG> mod_mime_magic
+ <p>
+
+ The MimeMagicFile directive can be used to change the location of the
+ magic file from its default location at <code>conf/magic</code>.
+ Non-rooted paths are relative to the ServerRoot.
+ <p>
+ <HR>
+
+ <h2><a name="notes">Notes</a></h2>
+
+ Patches and suggestions for mod_mime_magic should be sent to
+ Ian Kluft <ikluft<!--- comment inserted to discourage spam --->@cisco.com>.
+ Note that enhancements are done on a volunteer basis so no timetable can
+ be committed for any particular request.
+ Obviously, patches are given much higher priority over plain requests.
+ <p>
+ The following notes apply to the mod_mime_magic module and are
+ included here for compliance with contributors' copyright restrictions
+ that require their acknowledgement.
+
+<pre>
+/*
+ * mod_mime_magic: MIME type lookup via file magic numbers
+ * Copyright (c) 1996-1997 Cisco Systems, Inc.
+ *
+ * This software was submitted by Cisco Systems to the Apache Group in July
+ * 1997. Future revisions and derivatives of this source code must
+ * acknowledge Cisco Systems as the original contributor of this module.
+ * All other licensing and usage conditions are those of the Apache Group.
+ *
+ * Some of this code is derived from the free version of the file command
+ * originally posted to comp.sources.unix. Copyright info for that program
+ * is included below as required.
+ * ---------------------------------------------------------------------------
+ * - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.
+ *
+ * This software is not subject to any license of the American Telephone and
+ * Telegraph Company or of the Regents of the University of California.
+ *
+ * Permission is granted to anyone to use this software for any purpose on any
+ * computer system, and to alter it and redistribute it freely, subject to
+ * the following restrictions:
+ *
+ * 1. The author is not responsible for the consequences of use of this
+ * software, no matter how awful, even if they arise from flaws in it.
+ *
+ * 2. The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission. Since few users ever read sources, credits
+ * must appear in the documentation.
+ *
+ * 3. Altered versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software. Since few users ever read
+ * sources, credits must appear in the documentation.
+ *
+ * 4. This notice may not be removed or altered.
+ * -------------------------------------------------------------------------
+ *
+ * For complicance with Mr Darwin's terms: this has been very significantly
+ * modified from the free "file" command.
+ * - all-in-one file for compilation convenience when moving from one
+ * version of Apache to the next.
+ * - Memory allocation is done through the Apache API's pool structure.
+ * - All functions have had necessary Apache API request or server
+ * structures passed to them where necessary to call other Apache API
+ * routines. (i.e. usually for logging, files, or memory allocation in
+ * itself or a called function.)
+ * - struct magic has been converted from an array to a single-ended linked
+ * list because it only grows one record at a time, it's only accessed
+ * sequentially, and the Apache API has no equivalent of realloc().
+ * - Functions have been changed to get their parameters from the server
+ * configuration instead of globals. (It should be reentrant now but has
+ * not been tested in a threaded environment.)
+ * - Places where it used to print results to stdout now saves them in a
+ * list where they're used to set the MIME type in the Apache request
+ * record.
+ * - Command-line flags have been removed since they will never be used here.
+ *
+ */
+</pre>
+
+ </BODY>
+</HTML>