<!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>
  "&gt;" indicates a dependency upon the previous non-"&gt;" 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
&gt;12     belong          1               audio/basic
&gt;12     belong          2               audio/basic
&gt;12     belong          3               audio/basic
&gt;12     belong          4               audio/basic
&gt;12     belong          5               audio/basic
&gt;12     belong          6               audio/basic
&gt;12     belong          7               audio/basic
&gt;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          \&lt;MakerFile     application/x-frame
0       string          \&lt;MIFFile       application/x-frame
0       string          \&lt;MakerDictionary       application/x-frame
0       string          \&lt;MakerScreenFon        application/x-frame
0       string          \&lt;MML           application/x-frame
0       string          \&lt;Book          application/x-frame
0       string          \&lt;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 &lt;ikluft<!--- comment inserted to discourage spam --->@cisco.com&gt;.
  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>
