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