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