]> granicus.if.org Git - apache/commitdiff
Added mod_mime_magic.
authordgaudet <dgaudet@unknown>
Mon, 7 Jul 1997 18:18:40 +0000 (18:18 +0000)
committerdgaudet <dgaudet@unknown>
Mon, 7 Jul 1997 18:18:40 +0000 (18:18 +0000)
Submitted by: Ian Kluft <ikluft@cisco.com>

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@78553 13f79535-47bb-0310-9956-ffa450edef68

docs/manual/mod/directives.html
docs/manual/mod/index.html
docs/manual/mod/mod_mime_magic.html [new file with mode: 0644]

index 8ce065e1315c686786c9e1e62a6e407452e0483d..d65e005614781754c2431b42ce5f6fa30a792d57 100644 (file)
 <li><A HREF="core.html#maxspareservers">MaxSpareServers</A>
 <li><A HREF="mod_cern_meta.html#metadir">MetaDir</A>
 <li><A HREF="mod_cern_meta.html#metasuffix">MetaSuffix</A>
+<li><A HREF="mod_mime_magic.html#mimemagicfile">MimeMagicFile</A>
 <li><A HREF="core.html#minspareservers">MinSpareServers</A>
 <li><A HREF="mod_proxy.html#nocache">NoCache</A>
 <li><A HREF="core.html#options">Options</A>
index 4bacd90aab397b25cef61f6d47d49a67bc35f1a0..98c48cb03f010bfc793671de6f221201334141be 100644 (file)
@@ -83,7 +83,9 @@ mod_log_config module in Apache 1.2 and up
 <dt><A HREF="mod_log_referer.html">mod_log_referer</A>
 <dd>Logging of document references.
 <dt><A HREF="mod_mime.html">mod_mime</A>
-<dd>Determining document types.
+<dd>Determining document types using file extensions.
+<dt><A HREF="mod_mime_magic.html">mod_mime_magic</A>
+<dd>Determining document types using "magic numbers".
 <dt><A HREF="mod_negotiation.html">mod_negotiation</A>
 <dd>Content negotiation.
 <dt><A HREF="mod_rewrite.html">mod_rewrite</a> Apache 1.2 and up
diff --git a/docs/manual/mod/mod_mime_magic.html b/docs/manual/mod/mod_mime_magic.html
new file mode 100644 (file)
index 0000000..56fade8
--- /dev/null
@@ -0,0 +1,251 @@
+<!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>