<!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"
 >
 <DIV ALIGN="CENTER">
  <IMG SRC="../images/sub.gif" ALT="[APACHE DOCUMENTATION]">
 </DIV>

 <H1 align="CENTER">Module mod_mime_magic</H1>

  This module is contained in the mod_mime_magic.c file, and is
  an optional extension to the Apache HTTPD server.
  It can be used to determine the MIME type of a file by looking at a
  few bytes of its contents, the same way the Unix file(1) command works.
  To use mod_mime_magic you have to enable the following line in the
  server build <TT>Configuration</TT> file: 

  <PRE>
      AddModule modules/standard/mod_mime_magic.o
  </PRE>

  This should be listed <EM>before</EM> mod_mime in the build
  <TT>Configuration</TT> file so that it will be used after mod_mime.
  mod_mime_magic is intended as a "second line of defense" for cases
  mod_mime cannot resolve.

  <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 active only if the magic file is specified by the 
  <A HREF="#mimemagicfile"><CODE>MimeMagicFile</CODE></A> directive.
  <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>
  <A
   HREF="directive-dict.html#Syntax"
   REL="Help"
  ><STRONG>Syntax:</STRONG></A> MimeMagicFile <EM>magic-file-name</EM>
  <BR>
  <A
   HREF="directive-dict.html#Default"
   REL="Help"
  ><STRONG>Default:</STRONG></A> none
  <BR>
  <A
   HREF="directive-dict.html#Context"
   REL="Help"
  ><STRONG>Context:</STRONG></A> server config, virtual host
  <BR>
  <A
   HREF="directive-dict.html#Status"
   REL="Help"
  ><STRONG>Status:</STRONG></A> Extension
  <BR>
  <A
   HREF="directive-dict.html#Module"
   REL="Help"
  ><STRONG>Module:</STRONG></A> mod_mime_magic
  <P>

  The <CODE>MimeMagicFile</CODE> directive can be used to enable this module,
  the default file is distributed at <CODE>conf/magic</CODE>.
  Non-rooted paths are relative to the ServerRoot.  Virtual hosts
  will use the same file as the main server unless a more specific setting
  is used, in which case the more specific setting overrides the main server's
  file.
  <P>
  <HR>

  <H2><A NAME="notes">Notes</A></H2>

  The following notes apply to the mod_mime_magic module and are
  included here for compliance with contributors' copyright restrictions
  that require their acknowledgment.

<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 compliance 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.  (<EM>i.e.</EM>, 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>
