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