xref: /freebsd/contrib/file/doc/libmagic.man (revision 162ae9c834f6d9f9cb443bd62cceb23e0b5fef48)
1.\" $File: libmagic.man,v 1.44 2018/09/09 20:33:28 christos Exp $
2.\"
3.\" Copyright (c) Christos Zoulas 2003, 2018.
4.\" All Rights Reserved.
5.\"
6.\" Redistribution and use in source and binary forms, with or without
7.\" modification, are permitted provided that the following conditions
8.\" are met:
9.\" 1. Redistributions of source code must retain the above copyright
10.\"    notice immediately at the beginning of the file, without modification,
11.\"    this list of conditions, and the following disclaimer.
12.\" 2. Redistributions in binary form must reproduce the above copyright
13.\"    notice, this list of conditions and the following disclaimer in the
14.\"    documentation and/or other materials provided with the distribution.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
20.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26.\" SUCH DAMAGE.
27.\"
28.Dd August 18, 2018
29.Dt LIBMAGIC 3
30.Os
31.Sh NAME
32.Nm magic_open ,
33.Nm magic_close ,
34.Nm magic_error ,
35.Nm magic_errno ,
36.Nm magic_descriptor ,
37.Nm magic_buffer ,
38.Nm magic_getflags ,
39.Nm magic_setflags ,
40.Nm magic_check ,
41.Nm magic_compile ,
42.Nm magic_list ,
43.Nm magic_load ,
44.Nm magic_load_buffers ,
45.Nm magic_setparam ,
46.Nm magic_getparam ,
47.Nm magic_version
48.Nd Magic number recognition library
49.Sh LIBRARY
50.Lb libmagic
51.Sh SYNOPSIS
52.In magic.h
53.Ft magic_t
54.Fn magic_open "int flags"
55.Ft void
56.Fn magic_close "magic_t cookie"
57.Ft const char *
58.Fn magic_error "magic_t cookie"
59.Ft int
60.Fn magic_errno "magic_t cookie"
61.Ft const char *
62.Fn magic_descriptor "magic_t cookie" "int fd"
63.Ft const char *
64.Fn magic_file "magic_t cookie" "const char *filename"
65.Ft const char *
66.Fn magic_buffer "magic_t cookie" "const void *buffer" "size_t length"
67.Ft int
68.Fn magic_getflags "magic_t cookie"
69.Ft int
70.Fn magic_setflags "magic_t cookie" "int flags"
71.Ft int
72.Fn magic_check "magic_t cookie" "const char *filename"
73.Ft int
74.Fn magic_compile "magic_t cookie" "const char *filename"
75.Ft int
76.Fn magic_list "magic_t cookie" "const char *filename"
77.Ft int
78.Fn magic_load "magic_t cookie" "const char *filename"
79.Ft int
80.Fn magic_load_buffers "magic_t cookie" "void **buffers" "size_t *sizes" "size_t nbuffers"
81.Ft int
82.Fn magic_getparam "magic_t cookie" "int param" "void *value"
83.Ft int
84.Fn magic_setparam "magic_t cookie" "int param" "const void *value"
85.Ft int
86.Fn magic_version "void"
87.Sh DESCRIPTION
88These functions
89operate on the magic database file
90which is described
91in
92.Xr magic __FSECTION__ .
93.Pp
94The function
95.Fn magic_open
96creates a magic cookie pointer and returns it.
97It returns
98.Dv NULL
99if there was an error allocating the magic cookie.
100The
101.Ar flags
102argument specifies how the other magic functions should behave:
103.Bl -tag -width MAGIC_COMPRESS
104.It Dv MAGIC_NONE
105No special handling.
106.It Dv MAGIC_DEBUG
107Print debugging messages to stderr.
108.It Dv MAGIC_SYMLINK
109If the file queried is a symlink, follow it.
110.It Dv MAGIC_COMPRESS
111If the file is compressed, unpack it and look at the contents.
112.It Dv MAGIC_DEVICES
113If the file is a block or character special device, then open the device
114and try to look in its contents.
115.It Dv MAGIC_MIME_TYPE
116Return a MIME type string, instead of a textual description.
117.It Dv MAGIC_MIME_ENCODING
118Return a MIME encoding, instead of a textual description.
119.It Dv MAGIC_MIME
120A shorthand for MAGIC_MIME_TYPE | MAGIC_MIME_ENCODING.
121.It Dv MAGIC_CONTINUE
122Return all matches, not just the first.
123.It Dv MAGIC_CHECK
124Check the magic database for consistency and print warnings to stderr.
125.It Dv MAGIC_PRESERVE_ATIME
126On systems that support
127.Xr utime 3
128or
129.Xr utimes 2 ,
130attempt to preserve the access time of files analysed.
131.It Dv MAGIC_RAW
132Don't translate unprintable characters to a \eooo octal representation.
133.It Dv MAGIC_ERROR
134Treat operating system errors while trying to open files and follow symlinks
135as real errors, instead of printing them in the magic buffer.
136.It Dv MAGIC_APPLE
137Return the Apple creator and type.
138.It Dv MAGIC_EXTENSION
139Return a slash-separated list of extensions for this file type.
140.It Dv MAGIC_COMPRESS_TRANSP
141Don't report on compression, only report about the uncompressed data.
142.It Dv MAGIC_NO_CHECK_APPTYPE
143Don't check for
144.Dv EMX
145application type (only on EMX).
146.It Dv MAGIC_NO_CHECK_CDF
147Don't get extra information on MS Composite Document Files.
148.It Dv MAGIC_NO_CHECK_COMPRESS
149Don't look inside compressed files.
150.It Dv MAGIC_NO_CHECK_ELF
151Don't print ELF details.
152.It Dv MAGIC_NO_CHECK_ENCODING
153Don't check text encodings.
154.It Dv MAGIC_NO_CHECK_SOFT
155Don't consult magic files.
156.It Dv MAGIC_NO_CHECK_TAR
157Don't examine tar files.
158.It Dv MAGIC_NO_CHECK_TEXT
159Don't check for various types of text files.
160.It Dv MAGIC_NO_CHECK_TOKENS
161Don't look for known tokens inside ascii files.
162.It Dv MAGIC_NO_CHECK_JSON
163Don't example JSON files.
164.El
165.Pp
166The
167.Fn magic_close
168function closes the
169.Xr magic __FSECTION__
170database and deallocates any resources used.
171.Pp
172The
173.Fn magic_error
174function returns a textual explanation of the last error, or
175.Dv NULL
176if there was no error.
177.Pp
178The
179.Fn magic_errno
180function returns the last operating system error number
181.Pq Xr errno 2
182that was encountered by a system call.
183.Pp
184The
185.Fn magic_file
186function returns a textual description of the contents of the
187.Ar filename
188argument, or
189.Dv NULL
190if an error occurred.
191If the
192.Ar filename
193is
194.Dv NULL ,
195then stdin is used.
196.Pp
197The
198.Fn magic_descriptor
199function returns a textual description of the contents of the
200.Ar fd
201argument, or
202.Dv NULL
203if an error occurred.
204.Pp
205The
206.Fn magic_buffer
207function returns a textual description of the contents of the
208.Ar buffer
209argument with
210.Ar length
211bytes size.
212.Pp
213The
214.Fn magic_getflags
215functions returns a value representing current
216.Ar flags
217set.
218.Pp
219The
220.Fn magic_setflags
221function sets the
222.Ar flags
223described above.
224Note that using both MIME flags together can also
225return extra information on the charset.
226.Pp
227The
228.Fn magic_check
229function can be used to check the validity of entries in the colon
230separated database files passed in as
231.Ar filename ,
232or
233.Dv NULL
234for the default database.
235It returns 0 on success and \-1 on failure.
236.Pp
237The
238.Fn magic_compile
239function can be used to compile the colon
240separated list of database files passed in as
241.Ar filename ,
242or
243.Dv NULL
244for the default database.
245It returns 0 on success and \-1 on failure.
246The compiled files created are named from the
247.Xr basename 1
248of each file argument with
249.Dq .mgc
250appended to it.
251.Pp
252The
253.Fn magic_list
254function dumps all magic entries in a human readable format,
255dumping first the entries that are matched against binary files and then the
256ones that match text files.
257It takes and optional
258.Fa filename
259argument which is a colon separated list of database files, or
260.Dv NULL
261for the default database.
262.Pp
263The
264.Fn magic_load
265function must be used to load the colon
266separated list of database files passed in as
267.Ar filename ,
268or
269.Dv NULL
270for the default database file before any magic queries can performed.
271.Pp
272The default database file is named by the MAGIC environment variable.
273If that variable is not set, the default database file name is __MAGIC__.
274.Fn magic_load
275adds
276.Dq .mgc
277to the database filename as appropriate.
278.Pp
279The
280.Fn magic_load_buffers
281function takes an array of size
282.Fa nbuffers
283of
284.Fa buffers
285with a respective size for each in the array of
286.Fa sizes
287loaded with the contents of the magic databases from the filesystem.
288This function can be used in environment where the magic library does
289not have direct access to the filesystem, but can access the magic
290database via shared memory or other IPC means.
291.Pp
292The
293.Fn magic_getparam
294and
295.Fn magic_setparam
296allow getting and setting various limits related to the magic
297library.
298.Bl -column "MAGIC_PARAM_ELF_PHNUM_MAX" "size_t" "Default" -offset indent
299.It Sy "Parameter" Ta Sy "Type" Ta Sy "Default"
300.It Li MAGIC_PARAM_INDIR_MAX Ta size_t Ta 15
301.It Li MAGIC_PARAM_NAME_MAX Ta size_t Ta 30
302.It Li MAGIC_PARAM_ELF_NOTES_MAX Ta size_t Ta 256
303.It Li MAGIC_PARAM_ELF_PHNUM_MAX Ta size_t Ta 128
304.It Li MAGIC_PARAM_ELF_SHNUM_MAX Ta size_t Ta 32768
305.It Li MAGIC_PARAM_REGEX_MAX Ta size_t Ta 8192
306.It Li MAGIC_PARAM_BYTES_MAX Ta size_t Ta 1048576
307.El
308.Pp
309The
310.Dv MAGIC_PARAM_INDIR_RECURSION
311parameter controls how many levels of recursion will be followed for
312indirect magic entries.
313.Pp
314The
315.Dv MAGIC_PARAM_NAME_RECURSION
316parameter controls how many levels of recursion will be followed for
317for name/use calls.
318.Pp
319The
320.Dv MAGIC_PARAM_NAME_MAX
321parameter controls the maximum number of calls for name/use.
322.Pp
323The
324.Dv MAGIC_PARAM_NOTES_MAX
325parameter controls how many ELF notes will be processed.
326.Pp
327The
328.Dv MAGIC_PARAM_PHNUM_MAX
329parameter controls how many ELF program sections will be processed.
330.Pp
331The
332.Dv MAGIC_PARAM_SHNUM_MAX
333parameter controls how many ELF sections will be processed.
334.Pp
335The
336.Fn magic_version
337command returns the version number of this library which is compiled into
338the shared library using the constant
339.Dv MAGIC_VERSION
340from
341.In magic.h .
342This can be used by client programs to verify that the version they compile
343against is the same as the version that they run against.
344.Sh RETURN VALUES
345The function
346.Fn magic_open
347returns a magic cookie on success and
348.Dv NULL
349on failure setting errno to an appropriate value.
350It will set errno to
351.Er EINVAL
352if an unsupported value for flags was given.
353The
354.Fn magic_list ,
355.Fn magic_load ,
356.Fn magic_compile ,
357and
358.Fn magic_check
359functions return 0 on success and \-1 on failure.
360The
361.Fn magic_buffer ,
362.Fn magic_getpath ,
363and
364.Fn magic_file ,
365functions return a string on success and
366.Dv NULL
367on failure.
368The
369.Fn magic_error
370function returns a textual description of the errors of the above
371functions, or
372.Dv NULL
373if there was no error.
374The
375.Fn magic_version
376always returns the version number of the library.
377Finally,
378.Fn magic_setflags
379returns \-1 on systems that don't support
380.Xr utime 3 ,
381or
382.Xr utimes 2
383when
384.Dv MAGIC_PRESERVE_ATIME
385is set.
386.Sh FILES
387.Bl -tag -width __MAGIC__.mgc -compact
388.It Pa __MAGIC__
389The non-compiled default magic database.
390.It Pa __MAGIC__.mgc
391The compiled default magic database.
392.El
393.Sh SEE ALSO
394.Xr file __CSECTION__ ,
395.Xr magic __FSECTION__
396.Sh BUGS
397The results from
398.Fn magic_buffer
399and
400.Fn magic_file
401where the buffer and the file contain the same data
402can produce different results, because in the
403.Fn magic_file
404case, the program can
405.Xr lseek 2
406and
407.Xr stat 2
408the file descriptor.
409.Sh AUTHORS
410.An M\(oans Rullg\(oard
411Initial libmagic implementation, and configuration.
412.An Christos Zoulas
413API cleanup, error code and allocation handling.
414