welcome to file-5.20
This commit is contained in:
parent
ebfd11214d
commit
58b7f19951
|
@ -44,6 +44,9 @@
|
|||
/* Define to 1 if you have the `fork' function. */
|
||||
#undef HAVE_FORK
|
||||
|
||||
/* Define to 1 if you have the `freelocale' function. */
|
||||
#undef HAVE_FREELOCALE
|
||||
|
||||
/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
|
||||
#undef HAVE_FSEEKO
|
||||
|
||||
|
@ -95,6 +98,9 @@
|
|||
/* Define to 1 if you have a working `mmap' system call. */
|
||||
#undef HAVE_MMAP
|
||||
|
||||
/* Define to 1 if you have the `newlocale' function. */
|
||||
#undef HAVE_NEWLOCALE
|
||||
|
||||
/* Define to 1 if you have the `pread' function. */
|
||||
#undef HAVE_PREAD
|
||||
|
||||
|
@ -182,6 +188,9 @@
|
|||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to 1 if you have the `uselocale' function. */
|
||||
#undef HAVE_USELOCALE
|
||||
|
||||
/* Define to 1 if you have the `utime' function. */
|
||||
#undef HAVE_UTIME
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for file 5.19.
|
||||
# Generated by GNU Autoconf 2.69 for file 5.20.
|
||||
#
|
||||
# Report bugs to <christos@astron.com>.
|
||||
#
|
||||
|
@ -590,8 +590,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='file'
|
||||
PACKAGE_TARNAME='file'
|
||||
PACKAGE_VERSION='5.19'
|
||||
PACKAGE_STRING='file 5.19'
|
||||
PACKAGE_VERSION='5.20'
|
||||
PACKAGE_STRING='file 5.20'
|
||||
PACKAGE_BUGREPORT='christos@astron.com'
|
||||
PACKAGE_URL=''
|
||||
|
||||
|
@ -1331,7 +1331,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures file 5.19 to adapt to many kinds of systems.
|
||||
\`configure' configures file 5.20 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1401,7 +1401,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of file 5.19:";;
|
||||
short | recursive ) echo "Configuration of file 5.20:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1514,7 +1514,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
file configure 5.19
|
||||
file configure 5.20
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
|
@ -2170,7 +2170,7 @@ cat >config.log <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by file $as_me 5.19, which was
|
||||
It was created by file $as_me 5.20, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
@ -3036,7 +3036,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='file'
|
||||
VERSION='5.19'
|
||||
VERSION='5.20'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
|
@ -14221,7 +14221,7 @@ fi
|
|||
fi
|
||||
|
||||
|
||||
for ac_func in strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof
|
||||
for ac_func in strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof newlocale uselocale freelocale
|
||||
do :
|
||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
||||
|
@ -15032,7 +15032,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by file $as_me 5.19, which was
|
||||
This file was extended by file $as_me 5.20, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -15098,7 +15098,7 @@ _ACEOF
|
|||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
file config.status 5.19
|
||||
file config.status 5.20
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT([file],[5.19],[christos@astron.com])
|
||||
AC_INIT([file],[5.20],[christos@astron.com])
|
||||
AM_INIT_AUTOMAKE([subdir-objects foreign])
|
||||
AM_MAINTAINER_MODE(disable)
|
||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||
|
@ -139,7 +139,7 @@ else
|
|||
fi])
|
||||
|
||||
dnl Checks for functions
|
||||
AC_CHECK_FUNCS(strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof)
|
||||
AC_CHECK_FUNCS(strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof newlocale uselocale freelocale)
|
||||
|
||||
dnl Provide implementation of some required functions if necessary
|
||||
AC_REPLACE_FUNCS(getopt_long asprintf vasprintf strlcpy strlcat getline ctime_r asctime_r pread strcasestr fmtcheck)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.\" $NetBSD: file.1,v 1.14 2014/06/13 02:08:06 christos Exp $
|
||||
.\" $NetBSD: file.1,v 1.15 2014/10/10 20:15:01 christos Exp $
|
||||
.\"
|
||||
.\" $File: file.man,v 1.106 2014/03/07 23:11:51 christos Exp $
|
||||
.Dd January 30, 2014
|
||||
|
@ -26,7 +26,7 @@
|
|||
.Nm
|
||||
.Op Fl Fl help
|
||||
.Sh DESCRIPTION
|
||||
This manual page documents version 5.19 of the
|
||||
This manual page documents version 5.20 of the
|
||||
.Nm
|
||||
command.
|
||||
.Pp
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.\" $NetBSD: libmagic.3,v 1.12 2014/06/13 02:08:06 christos Exp $
|
||||
.\" $NetBSD: libmagic.3,v 1.13 2014/10/10 20:15:01 christos Exp $
|
||||
.\"
|
||||
.\" $File: libmagic.man,v 1.28 2014/03/02 14:47:16 christos Exp $
|
||||
.\" $File: libmagic.man,v 1.29 2014/08/04 06:19:44 christos Exp $
|
||||
.\"
|
||||
.\" Copyright (c) Christos Zoulas 2003.
|
||||
.\" All Rights Reserved.
|
||||
|
@ -27,7 +27,7 @@
|
|||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.Dd January 6, 2012
|
||||
.Dd August 4, 2014
|
||||
.Dt LIBMAGIC 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -73,6 +73,8 @@
|
|||
.Ft int
|
||||
.Fn magic_load "magic_t cookie" "const char *filename"
|
||||
.Ft int
|
||||
.Fn magic_load_buffers "magic_t cookie" "void **buffers" "size_t *sizes" "size_t nbuffers"
|
||||
.Ft int
|
||||
.Fn magic_version "void"
|
||||
.Sh DESCRIPTION
|
||||
These functions
|
||||
|
@ -256,6 +258,19 @@ adds
|
|||
to the database filename as appropriate.
|
||||
.Pp
|
||||
The
|
||||
.Fn magic_load_buffers
|
||||
function takes an array of size
|
||||
.Fa nbuffers
|
||||
of
|
||||
.Fa buffers
|
||||
with a respective size for each in the array of
|
||||
.Fa sizes
|
||||
loaded with the contents of the magic databases from the filesystem.
|
||||
This function can be used in environment where the magic library does
|
||||
not have direct access to the filesystem, but can access the magic
|
||||
database via shared memory or other IPC means.
|
||||
.Pp
|
||||
The
|
||||
.Fn magic_version
|
||||
command returns the version number of this library which is compiled into
|
||||
the shared library using the constant
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.\" $NetBSD: magic.5,v 1.12 2014/06/13 02:08:06 christos Exp $
|
||||
.\" $NetBSD: magic.5,v 1.13 2014/10/10 20:15:01 christos Exp $
|
||||
.\"
|
||||
.\" $File: magic.man,v 1.84 2014/06/03 19:01:34 christos Exp $
|
||||
.Dd June 3, 2014
|
||||
|
@ -12,7 +12,7 @@
|
|||
This manual page documents the format of the magic file as
|
||||
used by the
|
||||
.Xr file 1
|
||||
command, version 5.19.
|
||||
command, version 5.20.
|
||||
The
|
||||
.Xr file 1
|
||||
command identifies the type of a file using,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# $File: Makefile.am,v 1.98 2014/06/03 18:22:34 christos Exp $
|
||||
# $File: Makefile.am,v 1.99 2014/08/04 06:26:16 christos Exp $
|
||||
#
|
||||
MAGIC_FRAGMENT_BASE = magdir
|
||||
MAGIC_DIR = $(top_srcdir)/magic
|
||||
|
@ -142,6 +142,7 @@ $(MAGIC_FRAGMENT_DIR)/matroska \
|
|||
$(MAGIC_FRAGMENT_DIR)/mcrypt \
|
||||
$(MAGIC_FRAGMENT_DIR)/mercurial \
|
||||
$(MAGIC_FRAGMENT_DIR)/metastore \
|
||||
$(MAGIC_FRAGMENT_DIR)/meteorological \
|
||||
$(MAGIC_FRAGMENT_DIR)/mime \
|
||||
$(MAGIC_FRAGMENT_DIR)/mips \
|
||||
$(MAGIC_FRAGMENT_DIR)/mirage \
|
||||
|
@ -198,7 +199,6 @@ $(MAGIC_FRAGMENT_DIR)/pyramid \
|
|||
$(MAGIC_FRAGMENT_DIR)/python \
|
||||
$(MAGIC_FRAGMENT_DIR)/revision \
|
||||
$(MAGIC_FRAGMENT_DIR)/riff \
|
||||
$(MAGIC_FRAGMENT_DIR)/rinex \
|
||||
$(MAGIC_FRAGMENT_DIR)/rpm \
|
||||
$(MAGIC_FRAGMENT_DIR)/rtf \
|
||||
$(MAGIC_FRAGMENT_DIR)/ruby \
|
||||
|
|
|
@ -263,7 +263,7 @@ top_builddir = @top_builddir@
|
|||
top_srcdir = @top_srcdir@
|
||||
|
||||
#
|
||||
# $File: Makefile.am,v 1.98 2014/06/03 18:22:34 christos Exp $
|
||||
# $File: Makefile.am,v 1.99 2014/08/04 06:26:16 christos Exp $
|
||||
#
|
||||
MAGIC_FRAGMENT_BASE = magdir
|
||||
MAGIC_DIR = $(top_srcdir)/magic
|
||||
|
@ -404,6 +404,7 @@ $(MAGIC_FRAGMENT_DIR)/matroska \
|
|||
$(MAGIC_FRAGMENT_DIR)/mcrypt \
|
||||
$(MAGIC_FRAGMENT_DIR)/mercurial \
|
||||
$(MAGIC_FRAGMENT_DIR)/metastore \
|
||||
$(MAGIC_FRAGMENT_DIR)/meteorological \
|
||||
$(MAGIC_FRAGMENT_DIR)/mime \
|
||||
$(MAGIC_FRAGMENT_DIR)/mips \
|
||||
$(MAGIC_FRAGMENT_DIR)/mirage \
|
||||
|
@ -460,7 +461,6 @@ $(MAGIC_FRAGMENT_DIR)/pyramid \
|
|||
$(MAGIC_FRAGMENT_DIR)/python \
|
||||
$(MAGIC_FRAGMENT_DIR)/revision \
|
||||
$(MAGIC_FRAGMENT_DIR)/riff \
|
||||
$(MAGIC_FRAGMENT_DIR)/rinex \
|
||||
$(MAGIC_FRAGMENT_DIR)/rpm \
|
||||
$(MAGIC_FRAGMENT_DIR)/rtf \
|
||||
$(MAGIC_FRAGMENT_DIR)/ruby \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#------------------------------------------------------------------------------
|
||||
# $File: archive,v 1.87 2014/06/03 19:15:58 christos Exp $
|
||||
# $File: archive,v 1.88 2014/08/16 10:42:17 christos Exp $
|
||||
# archive: file(1) magic for archive formats (see also "msdos" for self-
|
||||
# extracting compressed archives)
|
||||
#
|
||||
|
@ -954,34 +954,3 @@
|
|||
>0xE08 search/7776 \x55\xAA
|
||||
>>&-512 indirect x \b; contains
|
||||
|
||||
# Symantec GHOST image by Joerg Jenderek at May 2014
|
||||
# http://us.norton.com/ghost/
|
||||
# http://www.garykessler.net/library/file_sigs.html
|
||||
0 ubelong&0xFFFFf7f0 0xFEEF0100 Norton GHost image
|
||||
# *.GHO
|
||||
>2 ubyte&0x08 0x00 \b, first file
|
||||
# *.GHS or *.[0-9] with cns program option
|
||||
>2 ubyte&0x08 0x08 \b, split file
|
||||
# part of split index interesting for *.ghs
|
||||
>>4 ubyte x id=0x%x
|
||||
# compression tag minus one equals numeric compression command line switch z[1-9]
|
||||
>3 ubyte 0 \b, no compression
|
||||
>3 ubyte 2 \b, fast compression (Z1)
|
||||
>3 ubyte 3 \b, medium compression (Z2)
|
||||
>3 ubyte >3
|
||||
>>3 ubyte <11 \b, compression (Z%d-1)
|
||||
>2 ubyte&0x08 0x00
|
||||
# ~ 30 byte password field only for *.gho
|
||||
>>12 ubequad !0 \b, password protected
|
||||
>>44 ubyte !1
|
||||
# 1~Image All, sector-by-sector only for *.gho
|
||||
>>>10 ubyte 1 \b, sector copy
|
||||
# 1~Image Boot track only for *.gho
|
||||
>>>43 ubyte 1 \b, boot track
|
||||
# 1~Image Disc only for *.gho implies Image Boot track and sector copy
|
||||
>>44 ubyte 1 \b, disc sector copy
|
||||
# optional image description only *.gho
|
||||
>>0xff string >\0 "%-.254s"
|
||||
# look for DOS sector end sequence
|
||||
>0xE08 search/7776 \x55\xAA
|
||||
>>&-512 indirect x \b; contains
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
#------------------------------------------------------------------------------
|
||||
# $File: elf,v 1.67 2014/06/12 13:52:48 christos Exp $
|
||||
# $File: elf,v 1.68 2014/09/19 19:05:57 christos Exp $
|
||||
# elf: file(1) magic for ELF executables
|
||||
#
|
||||
# We have to check the byte order flag to see what byte order all the
|
||||
|
@ -257,7 +257,7 @@
|
|||
>18 leshort 216 Cognitive Smart Memory,
|
||||
>18 leshort 217 iCelero CoolEngine,
|
||||
>18 leshort 218 Nanoradio Optimized RISC,
|
||||
>18 leshort 243 UCB RISC-V
|
||||
>18 leshort 243 UCB RISC-V,
|
||||
>18 leshort 0x1057 AVR (unofficial),
|
||||
>18 leshort 0x1059 MSP430 (unofficial),
|
||||
>18 leshort 0x1223 Adapteva Epiphany (unofficial),
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#------------------------------------------------------------------------------
|
||||
# $File: filesystems,v 1.95 2014/06/03 19:17:27 christos Exp $
|
||||
# $File: filesystems,v 1.103 2014/09/11 15:09:34 christos Exp $
|
||||
# filesystems: file(1) magic for different filesystems
|
||||
#
|
||||
0 name partid
|
||||
|
@ -254,7 +254,7 @@
|
|||
30 search/481 \x55\xAA
|
||||
# to display DOS/MBR boot sector (40) before old one (strength=50+21),Syslinux bootloader (71),SYSLINUX MBR (37+36),NetBSD mbr (110),AdvanceMAME mbr (111)
|
||||
# DOS BPB information (70) and after DOS floppy (120) like in previous file version
|
||||
!:strength +72
|
||||
!:strength +65
|
||||
# for sector sizes < 512 Bytes
|
||||
>11 uleshort <512
|
||||
>>(11.s-2) uleshort 0xAA55 DOS/MBR boot sector
|
||||
|
@ -265,8 +265,8 @@
|
|||
0x1FE leshort 0xAA55
|
||||
#
|
||||
# to display information (50) before DOS BPB (strength=70) and after DOS floppy (120) like in old file version
|
||||
!:strength +21
|
||||
>2 string OSBS \b, OS/BS MBR
|
||||
!:strength +70
|
||||
>2 string OSBS OS/BS MBR
|
||||
# added by Joerg Jenderek at Feb 2013 according to http://thestarman.pcministry.com/asm/mbr/
|
||||
# and http://en.wikipedia.org/wiki/Master_Boot_Record
|
||||
# test for nearly all MS-DOS Master Boot Record initial program loader (IPL) is now done by
|
||||
|
@ -1353,18 +1353,18 @@
|
|||
# minimal short forward jump found 0x29 for bootloaders or 0x0
|
||||
# maximal short forward jump is 0x7f
|
||||
# OEM-ID is empty or contain readable bytes
|
||||
0 ulelong&0x804000E9 0x000000E9
|
||||
0 ulelong&0x804000E9 0x000000E9
|
||||
# mtools-3.9.8/msdos.h
|
||||
# usual values are marked with comments to get only informations of strange FAT systems
|
||||
# valid sectorsize must be a power of 2 from 32 to 32768
|
||||
>11 uleshort&0xf001f 0
|
||||
>11 uleshort&0x001f 0
|
||||
>>11 uleshort <32769
|
||||
>>>11 uleshort >31
|
||||
>>>>21 ubyte&0xf0 0xF0
|
||||
>>>>>0 ubyte 0xEB
|
||||
>>>>>>1 ubyte x \b, code offset 0x%x+2
|
||||
>>>>>0 ubyte 0xE9
|
||||
>>>>>>1 uleshort x \b, code offset 0x%x+2
|
||||
>>>>>>1 uleshort x \b, code offset 0x%x+3
|
||||
>>>>>3 string >\0 \b, OEM-ID "%-.8s"
|
||||
#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC
|
||||
>>>>>>8 string IHC \b cached by Windows 9M
|
||||
|
@ -1373,10 +1373,11 @@
|
|||
>>>>>11 uleshort <512 \b, Bytes/sector %u
|
||||
>>>>>13 ubyte >1 \b, sectors/cluster %u
|
||||
#>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies)
|
||||
>>>>>82 string FAT32
|
||||
# for lazy FAT32 implementation like Transcend digital photo frame PF830
|
||||
>>>>>82 string/c fat32
|
||||
>>>>>>14 uleshort !32 \b, reserved sectors %u
|
||||
#>>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32)
|
||||
>>>>>82 string !FAT32
|
||||
>>>>>82 string/c !fat32
|
||||
>>>>>>14 uleshort >1 \b, reserved sectors %u
|
||||
#>>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16)
|
||||
#>>>>>>14 uleshort 0 \b, reserved sectors %u (usual NTFS)
|
||||
|
@ -1399,24 +1400,29 @@
|
|||
>>>>>26 ubyte =1 \b, heads %u
|
||||
# valid only for sector sizes with more then 32 Bytes
|
||||
>>>>>11 uleshort >32
|
||||
# skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk
|
||||
>>>>>>38 ubyte !0x70
|
||||
# http://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#Extended_BIOS_Parameter_Block
|
||||
# skip for values 2,2Ah,70h,73h,DFh
|
||||
# and continue for extended boot signature values 0,28h,29h,80h
|
||||
>>>>>>38 ubyte&0x56 =0
|
||||
>>>>>>>28 ulelong >0 \b, hidden sectors %u
|
||||
#>>>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy)
|
||||
>>>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB)
|
||||
#>>>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB)
|
||||
# FAT<32 bit specific
|
||||
>>>>>>>82 string !FAT32
|
||||
>>>>>>>82 string/c !fat32
|
||||
#>>>>>>>>36 ubyte 0x80 \b, physical drive 0x%x=0x80 (usual harddisk)
|
||||
#>>>>>>>>36 ubyte 0 \b, physical drive 0x%x=0 (usual floppy)
|
||||
>>>>>>>>36 ubyte !0x80
|
||||
>>>>>>>>>36 ubyte !0 \b, physical drive 0x%x
|
||||
# VGA-copy CRC or
|
||||
# in Windows NT bit 0 is a dirty flag to request chkdsk at boot time. bit 1 requests surface scan too
|
||||
>>>>>>>>37 ubyte >0 \b, reserved 0x%x
|
||||
#>>>>>>>>37 ubyte =0 \b, reserved 0x%x
|
||||
# value is 0x80 for NTFS
|
||||
# extended boot signatur value is 0x80 for NTFS, 0x28 or 0x29 for others
|
||||
>>>>>>>>38 ubyte !0x29 \b, dos < 4.0 BootSector (0x%x)
|
||||
>>>>>>>>38 ubyte =0x29
|
||||
>>>>>>>>38 ubyte&0xFE =0x28
|
||||
>>>>>>>>>39 ulelong x \b, serial number 0x%x
|
||||
>>>>>>>>38 ubyte =0x29
|
||||
>>>>>>>>>43 string <NO\ NAME \b, label: "%11.11s"
|
||||
>>>>>>>>>43 string >NO\ NAME \b, label: "%11.11s"
|
||||
>>>>>>>>>43 string =NO\ NAME \b, unlabeled
|
||||
|
@ -1426,11 +1432,35 @@
|
|||
# if it is small enough FAT is 12 bit, if it is too big enough FAT is 32 bit,
|
||||
# otherwise FAT is 16 bit.
|
||||
# http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/determining-fat-widths.html
|
||||
>>>>>>54 string FAT \b, FAT
|
||||
>>>>>>>54 string FAT12 \b (12 bit)
|
||||
>>>>>>>54 string FAT16 \b (16 bit)
|
||||
>>>>>82 string/c !fat32
|
||||
>>>>>>54 string FAT12 \b, FAT (12 bit)
|
||||
>>>>>>54 string FAT16 \b, FAT (16 bit)
|
||||
>>>>>>54 default x
|
||||
# determinate FAT bit size by media descriptor
|
||||
# small floppies implies FAT12
|
||||
>>>>>>>21 ubyte <0xF0 \b, FAT (12 bit by descriptor)
|
||||
# with media descriptor F0h floppy or maybe superfloppy with FAT16
|
||||
>>>>>>>21 ubyte =0xF0
|
||||
# superfloppy (many sectors) implies FAT16
|
||||
>>>>>>>>32 ulelong >0xFFFF \b, FAT (16 bit by descriptor+sectors)
|
||||
# no superfloppy with media descriptor F0h implies FAT12
|
||||
>>>>>>>>32 default x \b, FAT (12 bit by descriptor+sectors)
|
||||
# with media descriptor F8h floppy or hard disc with FAT12 or FAT16
|
||||
>>>>>>>21 ubyte =0xF8
|
||||
# 360 KiB with media descriptor F8h, 9 sectors per track ,single sided floppy implies FAT12
|
||||
>>>>>>>>19 ubequad 0xd002f80300090001 \b, FAT (12 bit by descriptor+geometry)
|
||||
# hard disc with FAT12 or FAT16
|
||||
>>>>>>>>19 default x \b, FAT (1Y bit by descriptor)
|
||||
# with media descriptor FAh floppy, RAM disc with FAT12 or FAT16 or Tandy hard disc
|
||||
>>>>>>>21 ubyte =0xFA
|
||||
# 320 KiB with media descriptor FAh, 8 sectors per track ,single sided floppy implies FAT12
|
||||
>>>>>>>>19 ubequad 0x8002fa0200080001 \b, FAT (12 bit by descriptor+geometry)
|
||||
# RAM disc with FAT12 or FAT16 or Tandy hard disc
|
||||
>>>>>>>>19 default x \b, FAT (1Y bit by descriptor)
|
||||
# others are floppy
|
||||
>>>>>>>21 default x \b, FAT (12 bit by descriptor)
|
||||
# FAT32 bit specific
|
||||
>>>>>82 string FAT32 \b, FAT (32 bit)
|
||||
>>>>>82 string/c fat32 \b, FAT (32 bit)
|
||||
>>>>>>36 ulelong x \b, sectors/FAT %u
|
||||
# http://technet.microsoft.com/en-us/library/cc977221.aspx
|
||||
>>>>>>40 uleshort >0 \b, extension flags 0x%x
|
||||
|
@ -1443,9 +1473,12 @@
|
|||
>>>>>>48 uleshort >1 \b, infoSector %u
|
||||
#>>>>>>48 uleshort =1 \b, infoSector %u (usual)
|
||||
>>>>>>48 uleshort <1 \b, infoSector %u
|
||||
>>>>>>50 uleshort >6 \b, Backup boot sector %u
|
||||
# 0 or 0xFFFF instead of usual 6 means no backup sector
|
||||
>>>>>>50 uleshort =0xFFFF \b, no Backup boot sector
|
||||
>>>>>>50 uleshort =0 \b, no Backup boot sector
|
||||
#>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual)
|
||||
>>>>>>50 uleshort <6 \b, Backup boot sector %u
|
||||
>>>>>>50 default x
|
||||
>>>>>>>50 uleshort x \b, Backup boot sector %u
|
||||
# corrected by Joerg Jenderek at Feb 2011 according to http://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO
|
||||
>>>>>>52 ulelong >0 \b, reserved1 0x%x
|
||||
>>>>>>56 ulelong >0 \b, reserved2 0x%x
|
||||
|
@ -1881,11 +1914,19 @@
|
|||
#>>>>>0x162 use 2xDOS-filename
|
||||
|
||||
# CDROM Filesystems
|
||||
# https://en.wikipedia.org/wiki/ISO_9660
|
||||
# Modified for UDF by gerardo.cacciari@gmail.com
|
||||
32769 string CD001 #
|
||||
!:mime application/x-iso9660-image
|
||||
32769 string CD001
|
||||
# mime line at that position does not work
|
||||
# to display CD-ROM (70=81-11) after MBR (113=40+72+1), partition-table (71=50+21) and before Apple Driver Map (51)
|
||||
!:strength -11
|
||||
# to display CD-ROM (114=81+33) before MBR (113=40+72+1), partition-table (71=50+21) and Apple Driver Map (51)
|
||||
# does not work
|
||||
#!:strength +33
|
||||
>38913 string !NSR0 ISO 9660 CD-ROM filesystem data
|
||||
!:mime application/x-iso9660-image
|
||||
>38913 string NSR0 UDF filesystem data
|
||||
!:mime application/x-iso9660-image
|
||||
>>38917 string 1 (version 1.0)
|
||||
>>38917 string 2 (version 1.5)
|
||||
>>38917 string 3 (version 2.0)
|
||||
|
@ -2131,7 +2172,6 @@
|
|||
# which is mapped to VBN 2 of [000000]INDEXF.SYS;1 - gerardo.cacciari@gmail.com
|
||||
#
|
||||
1008 string DECFILE11 Files-11 On-Disk Structure
|
||||
>525 byte x Level %d
|
||||
>525 byte x (ODS-%d);
|
||||
>1017 string A RSX-11, VAX/VMS or OpenVMS VAX file system;
|
||||
>1017 string B
|
||||
|
@ -2266,14 +2306,31 @@
|
|||
|
||||
# UBIfs
|
||||
# Linux kernel sources: fs/ubifs/ubifs-media.h
|
||||
0 belong 0x31181006
|
||||
>0x16 short 0 UBIfs image
|
||||
>0x08 lequad x \b, sequence number %llu
|
||||
>0x10 leshort x \b, length %u
|
||||
>0x04 lelong x \b, CRC 0x%08x
|
||||
0 lelong 0x06101831
|
||||
>0x16 leshort 0 UBIfs image
|
||||
>0x08 lequad x \b, sequence number %llu
|
||||
>0x10 leshort x \b, length %u
|
||||
>0x04 lelong x \b, CRC 0x%08x
|
||||
|
||||
0 belong 0x55424923
|
||||
>0x04 short <2
|
||||
>0x05 string \0\0\0
|
||||
>0x1c string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
|
||||
>0x04 short x UBI image, version %u
|
||||
0 lelong 0x23494255
|
||||
>0x04 leshort <2
|
||||
>0x05 string \0\0\0
|
||||
>0x1c string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
|
||||
>0x04 leshort x UBI image, version %u
|
||||
|
||||
# NEC PC-88 2D disk image
|
||||
# From Fabio R. Schmidlin <sd-snatcher@users.sourceforge.net>
|
||||
0x20 ulelong&0xFFFFFEFF 0x2A0
|
||||
>0x10 string \0\0\0\0\0\0\0\0\0\0
|
||||
>>0x280 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
|
||||
>>>0x1A ubyte&0xEF 0
|
||||
>>>>0x1B ubyte&0x8F 0
|
||||
>>>>>0x1B ubyte&70 <0x40
|
||||
>>>>>>0x1C ulelong >0x21
|
||||
>>>>>>>0 regex [[:print:]]* NEC PC-88 disk image, name=%s
|
||||
>>>>>>>>0x1B ubyte 0 \b, media=2D
|
||||
>>>>>>>>0x1B ubyte 0x10 \b, media=2DD
|
||||
>>>>>>>>0x1B ubyte 0x20 \b, media=2HD
|
||||
>>>>>>>>0x1B ubyte 0x30 \b, media=1D
|
||||
>>>>>>>>0x1B ubyte 0x40 \b, media=1DD
|
||||
>>>>>>>>0x1A ubyte 0x10 \b, write-protected
|
||||
|
|
|
@ -1,44 +0,0 @@
|
|||
|
||||
#------------------------------------------------------------------------------
|
||||
# $File: rinex,v 1.4 2011/05/03 01:44:17 christos Exp $
|
||||
# rinex: file(1) magic for RINEX files
|
||||
# http://igscb.jpl.nasa.gov/igscb/data/format/rinex210.txt
|
||||
# ftp://cddis.gsfc.nasa.gov/pub/reports/formats/rinex300.pdf
|
||||
# data for testing: ftp://cddis.gsfc.nasa.gov/pub/gps/data
|
||||
60 string RINEX
|
||||
>80 search/256 XXRINEXB RINEX Data, GEO SBAS Broadcast
|
||||
>>&32 string x \b, date %15.15s
|
||||
>>5 string x \b, version %6.6s
|
||||
!:mime rinex/broadcast
|
||||
>80 search/256 XXRINEXD RINEX Data, Observation (Hatanaka comp)
|
||||
>>&32 string x \b, date %15.15s
|
||||
>>5 string x \b, version %6.6s
|
||||
!:mime rinex/observation
|
||||
>80 search/256 XXRINEXC RINEX Data, Clock
|
||||
>>&32 string x \b, date %15.15s
|
||||
>>5 string x \b, version %6.6s
|
||||
!:mime rinex/clock
|
||||
>80 search/256 XXRINEXH RINEX Data, GEO SBAS Navigation
|
||||
>>&32 string x \b, date %15.15s
|
||||
>>5 string x \b, version %6.6s
|
||||
!:mime rinex/navigation
|
||||
>80 search/256 XXRINEXG RINEX Data, GLONASS Navigation
|
||||
>>&32 string x \b, date %15.15s
|
||||
>>5 string x \b, version %6.6s
|
||||
!:mime rinex/navigation
|
||||
>80 search/256 XXRINEXL RINEX Data, Galileo Navigation
|
||||
>>&32 string x \b, date %15.15s
|
||||
>>5 string x \b, version %6.6s
|
||||
!:mime rinex/navigation
|
||||
>80 search/256 XXRINEXM RINEX Data, Meteorological
|
||||
>>&32 string x \b, date %15.15s
|
||||
>>5 string x \b, version %6.6s
|
||||
!:mime rinex/meteorological
|
||||
>80 search/256 XXRINEXN RINEX Data, Navigation
|
||||
>>&32 string x \b, date %15.15s
|
||||
>>5 string x \b, version %6.6s
|
||||
!:mime rinex/navigation
|
||||
>80 search/256 XXRINEXO RINEX Data, Observation
|
||||
>>&32 string x \b, date %15.15s
|
||||
>>5 string x \b, version %6.6s
|
||||
!:mime rinex/observation
|
|
@ -81,9 +81,9 @@ build_triplet = @build@
|
|||
host_triplet = @host@
|
||||
bin_PROGRAMS = file$(EXEEXT)
|
||||
subdir = src
|
||||
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am fmtcheck.c \
|
||||
pread.c strlcpy.c vasprintf.c strcasestr.c getline.c \
|
||||
asctime_r.c getopt_long.c ctime_r.c strlcat.c asprintf.c \
|
||||
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am asctime_r.c \
|
||||
pread.c ctime_r.c getline.c strlcat.c vasprintf.c strcasestr.c \
|
||||
asprintf.c getopt_long.c strlcpy.c fmtcheck.c \
|
||||
$(top_srcdir)/depcomp $(include_HEADERS)
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: apprentice.c,v 1.11 2014/06/13 02:08:06 christos Exp $ */
|
||||
/* $NetBSD: apprentice.c,v 1.12 2014/10/10 20:15:02 christos Exp $ */
|
||||
/*
|
||||
* Copyright (c) Ian F. Darwin 1986-1995.
|
||||
* Software written by Ian F. Darwin and others;
|
||||
|
@ -34,9 +34,9 @@
|
|||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
FILE_RCSID("@(#)$File: apprentice.c,v 1.211 2014/06/03 19:01:34 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: apprentice.c,v 1.216 2014/09/24 19:49:07 christos Exp $")
|
||||
#else
|
||||
__RCSID("$NetBSD: apprentice.c,v 1.11 2014/06/13 02:08:06 christos Exp $");
|
||||
__RCSID("$NetBSD: apprentice.c,v 1.12 2014/10/10 20:15:02 christos Exp $");
|
||||
#endif
|
||||
#endif /* lint */
|
||||
|
||||
|
@ -91,6 +91,10 @@ __RCSID("$NetBSD: apprentice.c,v 1.11 2014/06/13 02:08:06 christos Exp $");
|
|||
#define ALLOC_CHUNK (size_t)10
|
||||
#define ALLOC_INCR (size_t)200
|
||||
|
||||
#define MAP_TYPE_MMAP 0
|
||||
#define MAP_TYPE_MALLOC 1
|
||||
#define MAP_TYPE_USER 2
|
||||
|
||||
struct magic_entry {
|
||||
struct magic *mp;
|
||||
uint32_t cont_count;
|
||||
|
@ -106,6 +110,7 @@ struct magic_entry_set {
|
|||
struct magic_map {
|
||||
void *p;
|
||||
size_t len;
|
||||
int type;
|
||||
struct magic *magic[MAGIC_SETS];
|
||||
uint32_t nmagic[MAGIC_SETS];
|
||||
};
|
||||
|
@ -136,7 +141,10 @@ private uint16_t swap2(uint16_t);
|
|||
private uint32_t swap4(uint32_t);
|
||||
private uint64_t swap8(uint64_t);
|
||||
private char *mkdbname(struct magic_set *, const char *, int);
|
||||
private struct magic_map *apprentice_buf(struct magic_set *, struct magic *,
|
||||
size_t);
|
||||
private struct magic_map *apprentice_map(struct magic_set *, const char *);
|
||||
private int check_buffer(struct magic_set *, struct magic_map *, const char *);
|
||||
private void apprentice_unmap(struct magic_map *);
|
||||
private int apprentice_compile(struct magic_set *, struct magic_map *,
|
||||
const char *);
|
||||
|
@ -421,9 +429,11 @@ add_mlist(struct mlist *mlp, struct magic_map *map, size_t idx)
|
|||
private int
|
||||
apprentice_1(struct magic_set *ms, const char *fn, int action)
|
||||
{
|
||||
struct mlist *ml;
|
||||
struct magic_map *map;
|
||||
#ifndef COMPILE_ONLY
|
||||
struct mlist *ml;
|
||||
size_t i;
|
||||
#endif
|
||||
|
||||
if (magicsize != FILE_MAGICSIZE) {
|
||||
file_error(ms, 0, "magic element size %lu != %lu",
|
||||
|
@ -459,15 +469,15 @@ apprentice_1(struct magic_set *ms, const char *fn, int action)
|
|||
|
||||
if (action == FILE_LIST) {
|
||||
for (i = 0; i < MAGIC_SETS; i++) {
|
||||
printf("Set %zu:\nBinary patterns:\n", i);
|
||||
printf("Set %" SIZE_T_FORMAT "u:\nBinary patterns:\n",
|
||||
i);
|
||||
apprentice_list(ms->mlist[i], BINTEST);
|
||||
printf("Text patterns:\n");
|
||||
apprentice_list(ms->mlist[i], TEXTTEST);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
#endif /* COMPILE_ONLY */
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected void
|
||||
|
@ -522,9 +532,9 @@ apprentice_unmap(struct magic_map *map)
|
|||
{
|
||||
if (map == NULL)
|
||||
return;
|
||||
if (map->p != NULL) {
|
||||
if (map->p != NULL && map->type != MAP_TYPE_USER) {
|
||||
#ifdef QUICK
|
||||
if (map->len)
|
||||
if (map->type == MAP_TYPE_MMAP)
|
||||
(void)munmap(map->p, map->len);
|
||||
else
|
||||
#endif
|
||||
|
@ -566,6 +576,56 @@ mlist_free(struct mlist *mlist)
|
|||
free(ml);
|
||||
}
|
||||
|
||||
#ifndef COMPILE_ONLY
|
||||
/* void **bufs: an array of compiled magic files */
|
||||
protected int
|
||||
buffer_apprentice(struct magic_set *ms, struct magic **bufs,
|
||||
size_t *sizes, size_t nbufs)
|
||||
{
|
||||
size_t i;
|
||||
struct mlist *ml;
|
||||
struct magic_map *map;
|
||||
|
||||
if (nbufs == 0)
|
||||
return -1;
|
||||
|
||||
if (ms->mlist[0] != NULL)
|
||||
file_reset(ms);
|
||||
|
||||
init_file_tables();
|
||||
|
||||
for (i = 0; i < MAGIC_SETS; i++) {
|
||||
mlist_free(ms->mlist[i]);
|
||||
if ((ms->mlist[i] = mlist_alloc()) == NULL) {
|
||||
file_oomem(ms, sizeof(*ms->mlist[i]));
|
||||
if (i != 0) {
|
||||
--i;
|
||||
do
|
||||
mlist_free(ms->mlist[i]);
|
||||
while (i != 0);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < nbufs; i++) {
|
||||
map = apprentice_buf(ms, bufs[i], sizes[i]);
|
||||
if (map == NULL)
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < MAGIC_SETS; i++) {
|
||||
if (add_mlist(ms->mlist[i], map, i) == -1) {
|
||||
file_oomem(ms, sizeof(*ml));
|
||||
apprentice_unmap(map);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* const char *fn: list of magic files and directories */
|
||||
protected int
|
||||
file_apprentice(struct magic_set *ms, const char *fn, int action)
|
||||
|
@ -2069,9 +2129,15 @@ out:
|
|||
return -1;
|
||||
}
|
||||
|
||||
private int
|
||||
goodchar(unsigned char x, const char *extra)
|
||||
{
|
||||
return (isascii(x) && isalnum(x)) || strchr(extra, x);
|
||||
}
|
||||
|
||||
private int
|
||||
parse_extra(struct magic_set *ms, struct magic_entry *me, const char *line,
|
||||
off_t off, size_t len, const char *name, int nt)
|
||||
off_t off, size_t len, const char *name, const char *extra, int nt)
|
||||
{
|
||||
size_t i;
|
||||
const char *l = line;
|
||||
|
@ -2092,9 +2158,7 @@ parse_extra(struct magic_set *ms, struct magic_entry *me, const char *line,
|
|||
}
|
||||
|
||||
EATAB;
|
||||
for (i = 0; *l && ((isascii((unsigned char)*l) &&
|
||||
isalnum((unsigned char)*l)) || strchr("-+/.", *l)) &&
|
||||
i < len; buf[i++] = *l++)
|
||||
for (i = 0; *l && i < len && goodchar(*l, extra); buf[i++] = *l++)
|
||||
continue;
|
||||
|
||||
if (i == len && *l) {
|
||||
|
@ -2104,14 +2168,18 @@ parse_extra(struct magic_set *ms, struct magic_entry *me, const char *line,
|
|||
file_magwarn(ms, "%s type `%s' truncated %"
|
||||
SIZE_T_FORMAT "u", name, line, i);
|
||||
} else {
|
||||
if (!isspace((unsigned char)*l) && !goodchar(*l, extra))
|
||||
file_magwarn(ms, "%s type `%s' has bad char '%c'",
|
||||
name, line, *l);
|
||||
if (nt)
|
||||
buf[i] = '\0';
|
||||
}
|
||||
|
||||
if (i > 0)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
|
||||
file_magerror(ms, "Bad magic entry '%s'", line);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2124,7 +2192,7 @@ parse_apple(struct magic_set *ms, struct magic_entry *me, const char *line)
|
|||
struct magic *m = &me->mp[0];
|
||||
|
||||
return parse_extra(ms, me, line, offsetof(struct magic, apple),
|
||||
sizeof(m->apple), "APPLE", 0);
|
||||
sizeof(m->apple), "APPLE", "!+-./", 0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2137,7 +2205,7 @@ parse_mime(struct magic_set *ms, struct magic_entry *me, const char *line)
|
|||
struct magic *m = &me->mp[0];
|
||||
|
||||
return parse_extra(ms, me, line, offsetof(struct magic, mimetype),
|
||||
sizeof(m->mimetype), "MIME", 1);
|
||||
sizeof(m->mimetype), "MIME", "+-/.", 1);
|
||||
}
|
||||
|
||||
private int
|
||||
|
@ -2697,6 +2765,28 @@ eatsize(const char **p)
|
|||
*p = l;
|
||||
}
|
||||
|
||||
/*
|
||||
* handle a buffer containging a compiled file.
|
||||
*/
|
||||
private struct magic_map *
|
||||
apprentice_buf(struct magic_set *ms, struct magic *buf, size_t len)
|
||||
{
|
||||
struct magic_map *map;
|
||||
|
||||
if ((map = CAST(struct magic_map *, calloc(1, sizeof(*map)))) == NULL) {
|
||||
file_oomem(ms, sizeof(*map));
|
||||
return NULL;
|
||||
}
|
||||
map->len = len;
|
||||
map->p = buf;
|
||||
map->type = MAP_TYPE_USER;
|
||||
if (check_buffer(ms, map, "buffer") != 0) {
|
||||
apprentice_unmap(map);
|
||||
return NULL;
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
/*
|
||||
* handle a compiled file.
|
||||
*/
|
||||
|
@ -2706,12 +2796,8 @@ apprentice_map(struct magic_set *ms, const char *fn)
|
|||
{
|
||||
int fd;
|
||||
struct stat st;
|
||||
uint32_t *ptr;
|
||||
uint32_t version, entries, nentries;
|
||||
int needsbyteswap;
|
||||
char *dbname = NULL;
|
||||
struct magic_map *map;
|
||||
size_t i;
|
||||
|
||||
fd = -1;
|
||||
if ((map = CAST(struct magic_map *, calloc(1, sizeof(*map)))) == NULL) {
|
||||
|
@ -2743,6 +2829,7 @@ apprentice_map(struct magic_set *ms, const char *fn)
|
|||
file_error(ms, errno, "cannot map `%s'", dbname);
|
||||
goto error;
|
||||
}
|
||||
map->type = MAP_TYPE_MMAP;
|
||||
#else
|
||||
if ((map->p = CAST(void *, malloc(map->len))) == NULL) {
|
||||
file_oomem(ms, map->len);
|
||||
|
@ -2752,16 +2839,39 @@ apprentice_map(struct magic_set *ms, const char *fn)
|
|||
file_badread(ms);
|
||||
goto error;
|
||||
}
|
||||
map->len = 0;
|
||||
map->type = MAP_TYPE_MALLOC;
|
||||
#define RET 1
|
||||
#endif
|
||||
(void)close(fd);
|
||||
fd = -1;
|
||||
|
||||
if (check_buffer(ms, map, dbname) != 0)
|
||||
goto error;
|
||||
|
||||
free(dbname);
|
||||
return map;
|
||||
|
||||
error:
|
||||
if (fd != -1)
|
||||
(void)close(fd);
|
||||
apprentice_unmap(map);
|
||||
free(dbname);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
private int
|
||||
check_buffer(struct magic_set *ms, struct magic_map *map, const char *dbname)
|
||||
{
|
||||
uint32_t *ptr;
|
||||
uint32_t entries, nentries;
|
||||
uint32_t version;
|
||||
int i, needsbyteswap;
|
||||
|
||||
ptr = CAST(uint32_t *, map->p);
|
||||
if (*ptr != MAGICNO) {
|
||||
if (swap4(*ptr) != MAGICNO) {
|
||||
file_error(ms, 0, "bad magic in `%s'", dbname);
|
||||
goto error;
|
||||
return -1;
|
||||
}
|
||||
needsbyteswap = 1;
|
||||
} else
|
||||
|
@ -2774,15 +2884,14 @@ apprentice_map(struct magic_set *ms, const char *fn)
|
|||
file_error(ms, 0, "File %s supports only version %d magic "
|
||||
"files. `%s' is version %d", VERSION,
|
||||
VERSIONNO, dbname, version);
|
||||
goto error;
|
||||
return -1;
|
||||
}
|
||||
entries = (uint32_t)(st.st_size / sizeof(struct magic));
|
||||
if ((off_t)(entries * sizeof(struct magic)) != st.st_size) {
|
||||
file_error(ms, 0, "Size of `%s' %" INT64_T_FORMAT "u is not "
|
||||
entries = (uint32_t)(map->len / sizeof(struct magic));
|
||||
if ((entries * sizeof(struct magic)) != map->len) {
|
||||
file_error(ms, 0, "Size of `%s' %" SIZE_T_FORMAT "u is not "
|
||||
"a multiple of %" SIZE_T_FORMAT "u",
|
||||
dbname, (unsigned long long)st.st_size,
|
||||
sizeof(struct magic));
|
||||
goto error;
|
||||
dbname, map->len, sizeof(struct magic));
|
||||
return -1;
|
||||
}
|
||||
map->magic[0] = CAST(struct magic *, map->p) + 1;
|
||||
nentries = 0;
|
||||
|
@ -2798,20 +2907,12 @@ apprentice_map(struct magic_set *ms, const char *fn)
|
|||
if (entries != nentries + 1) {
|
||||
file_error(ms, 0, "Inconsistent entries in `%s' %u != %u",
|
||||
dbname, entries, nentries + 1);
|
||||
goto error;
|
||||
return -1;
|
||||
}
|
||||
if (needsbyteswap)
|
||||
for (i = 0; i < MAGIC_SETS; i++)
|
||||
byteswap(map->magic[i], map->nmagic[i]);
|
||||
free(dbname);
|
||||
return map;
|
||||
|
||||
error:
|
||||
if (fd != -1)
|
||||
(void)close(fd);
|
||||
apprentice_unmap(map);
|
||||
free(dbname);
|
||||
return NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: cdf.c,v 1.9 2014/06/13 02:08:06 christos Exp $ */
|
||||
/* $NetBSD: cdf.c,v 1.10 2014/10/10 20:15:02 christos Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2008 Christos Zoulas
|
||||
* All rights reserved.
|
||||
|
@ -37,9 +37,9 @@
|
|||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
FILE_RCSID("@(#)$File: cdf.c,v 1.63 2014/06/09 13:04:37 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: cdf.c,v 1.67 2014/09/24 19:49:07 christos Exp $")
|
||||
#else
|
||||
__RCSID("$NetBSD: cdf.c,v 1.9 2014/06/13 02:08:06 christos Exp $");
|
||||
__RCSID("$NetBSD: cdf.c,v 1.10 2014/10/10 20:15:02 christos Exp $");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -78,6 +78,8 @@ static union {
|
|||
#define CDF_TOLE8(x) ((uint64_t)(NEED_SWAP ? _cdf_tole8(x) : (uint64_t)(x)))
|
||||
#define CDF_TOLE4(x) ((uint32_t)(NEED_SWAP ? _cdf_tole4(x) : (uint32_t)(x)))
|
||||
#define CDF_TOLE2(x) ((uint16_t)(NEED_SWAP ? _cdf_tole2(x) : (uint16_t)(x)))
|
||||
#define CDF_TOLE(x) (sizeof(x) == 2 ? CDF_TOLE2(x) : (sizeof(x) == 4 ? \
|
||||
CDF_TOLE4(x) : CDF_TOLE8(x)))
|
||||
#define CDF_GETUINT32(x, y) cdf_getuint32(x, y)
|
||||
|
||||
|
||||
|
@ -829,6 +831,10 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
|
|||
q = (const uint8_t *)(const void *)
|
||||
((const char *)(const void *)p + ofs
|
||||
- 2 * sizeof(uint32_t));
|
||||
if (q < p) {
|
||||
DPRINTF(("Wrapped around %p < %p\n", q, p));
|
||||
goto out;
|
||||
}
|
||||
if (q > e) {
|
||||
DPRINTF(("Ran of the end %p > %p\n", q, e));
|
||||
goto out;
|
||||
|
@ -990,6 +996,54 @@ cdf_unpack_summary_info(const cdf_stream_t *sst, const cdf_header_t *h,
|
|||
}
|
||||
|
||||
|
||||
#define extract_catalog_field(f, l) \
|
||||
memcpy(&ce[i].f, b + (l), sizeof(ce[i].f)); \
|
||||
ce[i].f = CDF_TOLE(ce[i].f)
|
||||
|
||||
int
|
||||
cdf_unpack_catalog(const cdf_header_t *h, const cdf_stream_t *sst,
|
||||
cdf_catalog_t **cat)
|
||||
{
|
||||
size_t ss = sst->sst_dirlen < h->h_min_size_standard_stream ?
|
||||
CDF_SHORT_SEC_SIZE(h) : CDF_SEC_SIZE(h);
|
||||
const char *b = CAST(const char *, sst->sst_tab);
|
||||
const char *eb = b + ss * sst->sst_len;
|
||||
size_t nr, i, k;
|
||||
cdf_catalog_entry_t *ce;
|
||||
uint16_t reclen;
|
||||
const uint16_t *np;
|
||||
|
||||
for (nr = 0; b < eb; nr++) {
|
||||
memcpy(&reclen, b, sizeof(reclen));
|
||||
reclen = CDF_TOLE2(reclen);
|
||||
if (reclen == 0)
|
||||
break;
|
||||
b += reclen;
|
||||
}
|
||||
*cat = CAST(cdf_catalog_t *,
|
||||
malloc(sizeof(cdf_catalog_t) + nr * sizeof(*ce)));
|
||||
(*cat)->cat_num = nr;
|
||||
ce = (*cat)->cat_e;
|
||||
b = CAST(const char *, sst->sst_tab);
|
||||
for (i = 0; i < nr; i++) {
|
||||
extract_catalog_field(ce_namlen, 0);
|
||||
extract_catalog_field(ce_num, 2);
|
||||
extract_catalog_field(ce_timestamp, 6);
|
||||
reclen = ce[i].ce_namlen;
|
||||
ce[i].ce_namlen =
|
||||
sizeof(ce[i].ce_name) / sizeof(ce[i].ce_name[0]) - 1;
|
||||
if (ce[i].ce_namlen > reclen - 14)
|
||||
ce[i].ce_namlen = reclen - 14;
|
||||
np = CAST(const uint16_t *, (b + 16));
|
||||
for (k = 0; k < ce[i].ce_namlen; k++) {
|
||||
ce[i].ce_name[k] = np[k];
|
||||
CDF_TOLE2(ce[i].ce_name[k]);
|
||||
}
|
||||
ce[i].ce_name[ce[i].ce_namlen] = 0;
|
||||
b += reclen;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
cdf_print_classid(char *buf, size_t buflen, const cdf_classid_t *id)
|
||||
|
@ -1073,6 +1127,15 @@ cdf_print_elapsed_time(char *buf, size_t bufsiz, cdf_timestamp_t ts)
|
|||
return len;
|
||||
}
|
||||
|
||||
char *
|
||||
cdf_u16tos8(char *buf, size_t len, const uint16_t *p)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < len && p[i]; i++)
|
||||
buf[i] = (char)p[i];
|
||||
buf[i] = '\0';
|
||||
return buf;
|
||||
}
|
||||
|
||||
#ifdef CDF_DEBUG
|
||||
void
|
||||
|
@ -1098,7 +1161,7 @@ cdf_dump_header(const cdf_header_t *h)
|
|||
for (i = 0; i < __arraycount(h->h_master_sat); i++) {
|
||||
if (h->h_master_sat[i] == CDF_SECID_FREE)
|
||||
break;
|
||||
(void)fprintf(stderr, "%35.35s[%.3zu] = %d\n",
|
||||
(void)fprintf(stderr, "%35.35s[%.3" SIZE_T_FORMAT "u] = %d\n",
|
||||
"master_sat", i, h->h_master_sat[i]);
|
||||
}
|
||||
}
|
||||
|
@ -1293,7 +1356,7 @@ cdf_dump_summary_info(const cdf_header_t *h, const cdf_stream_t *sst)
|
|||
return;
|
||||
(void)fprintf(stderr, "Endian: %x\n", ssi.si_byte_order);
|
||||
(void)fprintf(stderr, "Os Version %d.%d\n", ssi.si_os_version & 0xff,
|
||||
ssi.si_os_version >> 8);
|
||||
ssi.si_os_version >> 8);
|
||||
(void)fprintf(stderr, "Os %d\n", ssi.si_os);
|
||||
cdf_print_classid(buf, sizeof(buf), &ssi.si_class);
|
||||
(void)fprintf(stderr, "Class %s\n", buf);
|
||||
|
@ -1302,6 +1365,27 @@ cdf_dump_summary_info(const cdf_header_t *h, const cdf_stream_t *sst)
|
|||
free(info);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
cdf_dump_catalog(const cdf_header_t *h, const cdf_stream_t *sst)
|
||||
{
|
||||
cdf_catalog_t *cat;
|
||||
cdf_unpack_catalog(h, sst, &cat);
|
||||
const cdf_catalog_entry_t *ce = cat->cat_e;
|
||||
struct timespec ts;
|
||||
char tbuf[64], sbuf[256];
|
||||
size_t i;
|
||||
|
||||
printf("Catalog:\n");
|
||||
for (i = 0; i < cat->cat_num; i++) {
|
||||
cdf_timestamp_to_timespec(&ts, ce[i].ce_timestamp);
|
||||
printf("\t%d %s %s", ce[i].ce_num,
|
||||
cdf_u16tos8(sbuf, ce[i].ce_namlen, ce[i].ce_name),
|
||||
cdf_ctime(&ts.tv_sec, tbuf));
|
||||
}
|
||||
free(cat);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef TEST
|
||||
|
@ -1314,6 +1398,7 @@ main(int argc, char *argv[])
|
|||
cdf_stream_t sst, scn;
|
||||
cdf_dir_t dir;
|
||||
cdf_info_t info;
|
||||
const cdf_directory_t *root;
|
||||
|
||||
if (argc < 2) {
|
||||
(void)fprintf(stderr, "Usage: %s <filename>\n", getprogname());
|
||||
|
@ -1347,7 +1432,8 @@ main(int argc, char *argv[])
|
|||
if (cdf_read_dir(&info, &h, &sat, &dir) == -1)
|
||||
err(1, "Cannot read dir");
|
||||
|
||||
if (cdf_read_short_stream(&info, &h, &sat, &dir, &sst) == -1)
|
||||
if (cdf_read_short_stream(&info, &h, &sat, &dir, &sst, &root)
|
||||
== -1)
|
||||
err(1, "Cannot read short stream");
|
||||
#ifdef CDF_DEBUG
|
||||
cdf_dump_stream(&h, &sst);
|
||||
|
@ -1360,9 +1446,17 @@ main(int argc, char *argv[])
|
|||
|
||||
if (cdf_read_summary_info(&info, &h, &sat, &ssat, &sst, &dir,
|
||||
&scn) == -1)
|
||||
err(1, "Cannot read summary info");
|
||||
warn("Cannot read summary info");
|
||||
#ifdef CDF_DEBUG
|
||||
cdf_dump_summary_info(&h, &scn);
|
||||
else
|
||||
cdf_dump_summary_info(&h, &scn);
|
||||
#endif
|
||||
if (cdf_read_catalog(&info, &h, &sat, &ssat, &sst, &dir,
|
||||
&scn) == -1)
|
||||
warn("Cannot read catalog");
|
||||
#ifdef CDF_DEBUG
|
||||
else
|
||||
cdf_dump_catalog(&h, &scn);
|
||||
#endif
|
||||
|
||||
(void)close(info.i_fd);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: encoding.c,v 1.2 2014/09/11 13:30:04 christos Exp $ */
|
||||
/* $NetBSD: encoding.c,v 1.3 2014/10/10 20:15:02 christos Exp $ */
|
||||
/*
|
||||
* Copyright (c) Ian F. Darwin 1986-1995.
|
||||
* Software written by Ian F. Darwin and others;
|
||||
|
@ -37,9 +37,9 @@
|
|||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
FILE_RCSID("@(#)$File: encoding.c,v 1.9 2013/11/19 20:45:50 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: encoding.c,v 1.10 2014/09/11 12:08:52 christos Exp $")
|
||||
#else
|
||||
__RCSID("$NetBSD: encoding.c,v 1.2 2014/09/11 13:30:04 christos Exp $");
|
||||
__RCSID("$NetBSD: encoding.c,v 1.3 2014/10/10 20:15:02 christos Exp $");
|
||||
#endif
|
||||
#endif /* lint */
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: file.c,v 1.4 2014/06/13 02:08:06 christos Exp $ */
|
||||
/* $NetBSD: file.c,v 1.5 2014/10/10 20:15:02 christos Exp $ */
|
||||
/*
|
||||
* Copyright (c) Ian F. Darwin 1986-1995.
|
||||
* Software written by Ian F. Darwin and others;
|
||||
|
@ -34,9 +34,9 @@
|
|||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
FILE_RCSID("@(#)$File: file.c,v 1.153 2014/02/11 15:41:04 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: file.c,v 1.154 2014/09/10 18:41:51 christos Exp $")
|
||||
#else
|
||||
__RCSID("$NetBSD: file.c,v 1.4 2014/06/13 02:08:06 christos Exp $");
|
||||
__RCSID("$NetBSD: file.c,v 1.5 2014/10/10 20:15:02 christos Exp $");
|
||||
#endif
|
||||
#endif /* lint */
|
||||
|
||||
|
@ -59,9 +59,6 @@ __RCSID("$NetBSD: file.c,v 1.4 2014/06/13 02:08:06 christos Exp $");
|
|||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h> /* for read() */
|
||||
#endif
|
||||
#ifdef HAVE_LOCALE_H
|
||||
#include <locale.h>
|
||||
#endif
|
||||
#ifdef HAVE_WCHAR_H
|
||||
#include <wchar.h>
|
||||
#endif
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: file.h,v 1.11 2014/06/13 02:08:06 christos Exp $ */
|
||||
/* $NetBSD: file.h,v 1.12 2014/10/10 20:15:02 christos Exp $ */
|
||||
/*
|
||||
* Copyright (c) Ian F. Darwin 1986-1995.
|
||||
* Software written by Ian F. Darwin and others;
|
||||
|
@ -28,7 +28,7 @@
|
|||
*/
|
||||
/*
|
||||
* file.h - definitions for file(1) program
|
||||
* @(#)$File: file.h,v 1.152 2014/06/03 19:01:34 christos Exp $
|
||||
* @(#)$File: file.h,v 1.154 2014/09/10 18:41:51 christos Exp $
|
||||
*/
|
||||
|
||||
#ifndef __file_h__
|
||||
|
@ -443,6 +443,8 @@ protected int file_is_tar(struct magic_set *, const unsigned char *, size_t);
|
|||
protected int file_softmagic(struct magic_set *, const unsigned char *, size_t,
|
||||
size_t, int, int);
|
||||
protected int file_apprentice(struct magic_set *, const char *, int);
|
||||
protected int buffer_apprentice(struct magic_set *, struct magic **,
|
||||
size_t *, size_t);
|
||||
protected int file_magicfind(struct magic_set *, const char *, struct mlist *);
|
||||
protected uint64_t file_signextend(struct magic_set *, struct magic *,
|
||||
uint64_t);
|
||||
|
@ -470,9 +472,17 @@ protected int file_os2_apptype(struct magic_set *, const char *, const void *,
|
|||
size_t);
|
||||
#endif /* __EMX__ */
|
||||
|
||||
#if defined(HAVE_LOCALE_H)
|
||||
#include <locale.h>
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
const char *pat;
|
||||
char *old_lc_ctype;
|
||||
#if defined(HAVE_NEWLOCALE) && defined(HAVE_USELOCALE) && defined(HAVE_FREELOCALE)
|
||||
#define USE_C_LOCALE
|
||||
locale_t old_lc_ctype;
|
||||
locale_t c_lc_ctype;
|
||||
#endif
|
||||
int rc;
|
||||
regex_t rx;
|
||||
} file_regex_t;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: funcs.c,v 1.8 2014/06/13 02:08:06 christos Exp $ */
|
||||
/* $NetBSD: funcs.c,v 1.9 2014/10/10 20:15:02 christos Exp $ */
|
||||
/*
|
||||
* Copyright (c) Christos Zoulas 2003.
|
||||
* All Rights Reserved.
|
||||
|
@ -29,9 +29,9 @@
|
|||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
FILE_RCSID("@(#)$File: funcs.c,v 1.72 2014/05/14 23:15:42 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: funcs.c,v 1.73 2014/09/10 18:41:51 christos Exp $")
|
||||
#else
|
||||
__RCSID("$NetBSD: funcs.c,v 1.8 2014/06/13 02:08:06 christos Exp $");
|
||||
__RCSID("$NetBSD: funcs.c,v 1.9 2014/10/10 20:15:02 christos Exp $");
|
||||
#endif
|
||||
#endif /* lint */
|
||||
|
||||
|
@ -50,9 +50,6 @@ __RCSID("$NetBSD: funcs.c,v 1.8 2014/06/13 02:08:06 christos Exp $");
|
|||
#if defined(HAVE_LIMITS_H)
|
||||
#include <limits.h>
|
||||
#endif
|
||||
#if defined(HAVE_LOCALE_H)
|
||||
#include <locale.h>
|
||||
#endif
|
||||
|
||||
#ifndef SIZE_MAX
|
||||
#define SIZE_MAX ((size_t)~0)
|
||||
|
@ -461,13 +458,14 @@ out:
|
|||
protected int
|
||||
file_regcomp(file_regex_t *rx, const char *pat, int flags)
|
||||
{
|
||||
rx->old_lc_ctype = setlocale(LC_CTYPE, NULL);
|
||||
assert(rx->old_lc_ctype != NULL);
|
||||
rx->old_lc_ctype = strdup(rx->old_lc_ctype);
|
||||
#ifdef USE_C_LOCALE
|
||||
rx->c_lc_ctype = newlocale(LC_CTYPE_MASK, "C", 0);
|
||||
assert(rx->c_lc_ctype != NULL);
|
||||
rx->old_lc_ctype = uselocale(rx->c_lc_ctype);
|
||||
assert(rx->old_lc_ctype != NULL);
|
||||
#endif
|
||||
rx->pat = pat;
|
||||
|
||||
(void)setlocale(LC_CTYPE, "C");
|
||||
return rx->rc = regcomp(&rx->rx, pat, flags);
|
||||
}
|
||||
|
||||
|
@ -484,8 +482,10 @@ file_regfree(file_regex_t *rx)
|
|||
{
|
||||
if (rx->rc == 0)
|
||||
regfree(&rx->rx);
|
||||
(void)setlocale(LC_CTYPE, rx->old_lc_ctype);
|
||||
free(rx->old_lc_ctype);
|
||||
#ifdef USE_C_LOCALE
|
||||
(void)uselocale(rx->old_lc_ctype);
|
||||
freelocale(rx->c_lc_ctype);
|
||||
#endif
|
||||
}
|
||||
|
||||
protected void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: magic.c,v 1.8 2014/06/13 02:08:06 christos Exp $ */
|
||||
/* $NetBSD: magic.c,v 1.9 2014/10/10 20:15:02 christos Exp $ */
|
||||
/*
|
||||
* Copyright (c) Christos Zoulas 2003.
|
||||
* All Rights Reserved.
|
||||
|
@ -35,9 +35,9 @@
|
|||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
FILE_RCSID("@(#)$File: magic.c,v 1.84 2014/05/14 23:15:42 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: magic.c,v 1.85 2014/08/04 06:19:44 christos Exp $")
|
||||
#else
|
||||
__RCSID("$NetBSD: magic.c,v 1.8 2014/06/13 02:08:06 christos Exp $");
|
||||
__RCSID("$NetBSD: magic.c,v 1.9 2014/10/10 20:15:02 christos Exp $");
|
||||
#endif
|
||||
#endif /* lint */
|
||||
|
||||
|
@ -262,6 +262,20 @@ magic_load(struct magic_set *ms, const char *magicfile)
|
|||
return file_apprentice(ms, magicfile, FILE_LOAD);
|
||||
}
|
||||
|
||||
#ifndef COMPILE_ONLY
|
||||
/*
|
||||
* Install a set of compiled magic buffers.
|
||||
*/
|
||||
public int
|
||||
magic_load_buffers(struct magic_set *ms, void **bufs, size_t *sizes,
|
||||
size_t nbufs)
|
||||
{
|
||||
if (ms == NULL)
|
||||
return -1;
|
||||
return buffer_apprentice(ms, (struct magic **)bufs, sizes, nbufs);
|
||||
}
|
||||
#endif
|
||||
|
||||
public int
|
||||
magic_compile(struct magic_set *ms, const char *magicfile)
|
||||
{
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: readcdf.c,v 1.10 2014/06/13 02:08:06 christos Exp $ */
|
||||
/* $NetBSD: readcdf.c,v 1.11 2014/10/10 20:15:02 christos Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2008 Christos Zoulas
|
||||
* All rights reserved.
|
||||
|
@ -28,9 +28,9 @@
|
|||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
FILE_RCSID("@(#)$File: readcdf.c,v 1.44 2014/05/14 23:22:48 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: readcdf.c,v 1.48 2014/09/10 18:41:51 christos Exp $")
|
||||
#else
|
||||
__RCSID("$NetBSD: readcdf.c,v 1.10 2014/06/13 02:08:06 christos Exp $");
|
||||
__RCSID("$NetBSD: readcdf.c,v 1.11 2014/10/10 20:15:02 christos Exp $");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -40,9 +40,6 @@ __RCSID("$NetBSD: readcdf.c,v 1.10 2014/06/13 02:08:06 christos Exp $");
|
|||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <ctype.h>
|
||||
#if defined(HAVE_LOCALE_H)
|
||||
#include <locale.h>
|
||||
#endif
|
||||
|
||||
#include "cdf.h"
|
||||
#include "magic.h"
|
||||
|
@ -116,20 +113,23 @@ cdf_app_to_mime(const char *vbuf, const struct nv *nv)
|
|||
{
|
||||
size_t i;
|
||||
const char *rv = NULL;
|
||||
char *old_lc_ctype;
|
||||
#ifdef USE_C_LOCALE
|
||||
locale_t old_lc_ctype, c_lc_ctype;
|
||||
|
||||
old_lc_ctype = setlocale(LC_CTYPE, NULL);
|
||||
c_lc_ctype = newlocale(LC_CTYPE_MASK, "C", 0);
|
||||
assert(c_lc_ctype != NULL);
|
||||
old_lc_ctype = uselocale(c_lc_ctype);
|
||||
assert(old_lc_ctype != NULL);
|
||||
old_lc_ctype = strdup(old_lc_ctype);
|
||||
assert(old_lc_ctype != NULL);
|
||||
(void)setlocale(LC_CTYPE, "C");
|
||||
#endif
|
||||
for (i = 0; nv[i].pattern != NULL; i++)
|
||||
if (strcasestr(vbuf, nv[i].pattern) != NULL) {
|
||||
rv = nv[i].mime;
|
||||
break;
|
||||
}
|
||||
(void)setlocale(LC_CTYPE, old_lc_ctype);
|
||||
free(old_lc_ctype);
|
||||
#ifdef USE_C_LOCALE
|
||||
(void)uselocale(old_lc_ctype);
|
||||
freelocale(c_lc_ctype);
|
||||
#endif
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
@ -249,6 +249,37 @@ cdf_file_property_info(struct magic_set *ms, const cdf_property_info_t *info,
|
|||
return 1;
|
||||
}
|
||||
|
||||
private int
|
||||
cdf_file_catalog(struct magic_set *ms, const cdf_header_t *h,
|
||||
const cdf_stream_t *sst)
|
||||
{
|
||||
cdf_catalog_t *cat;
|
||||
size_t i;
|
||||
char buf[256];
|
||||
cdf_catalog_entry_t *ce;
|
||||
|
||||
if (NOTMIME(ms)) {
|
||||
if (file_printf(ms, "Microsoft Thumbs.db [") == -1)
|
||||
return -1;
|
||||
if (cdf_unpack_catalog(h, sst, &cat) == -1)
|
||||
return -1;
|
||||
ce = cat->cat_e;
|
||||
/* skip first entry since it has a , or paren */
|
||||
for (i = 1; i < cat->cat_num; i++)
|
||||
if (file_printf(ms, "%s%s",
|
||||
cdf_u16tos8(buf, ce[i].ce_namlen, ce[i].ce_name),
|
||||
i == cat->cat_num - 1 ? "]" : ", ") == -1) {
|
||||
free(cat);
|
||||
return -1;
|
||||
}
|
||||
free(cat);
|
||||
} else {
|
||||
if (file_printf(ms, "application/CDFV2") == -1)
|
||||
return -1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
private int
|
||||
cdf_file_summary_info(struct magic_set *ms, const cdf_header_t *h,
|
||||
const cdf_stream_t *sst, const cdf_directory_t *root_storage)
|
||||
|
@ -294,11 +325,12 @@ cdf_file_summary_info(struct magic_set *ms, const cdf_header_t *h,
|
|||
if (root_storage) {
|
||||
str = cdf_clsid_to_mime(root_storage->d_storage_uuid,
|
||||
clsid2desc);
|
||||
if (str)
|
||||
if (str) {
|
||||
if (file_printf(ms, ", %s", str) == -1)
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m = cdf_file_property_info(ms, info, count, root_storage);
|
||||
free(info);
|
||||
|
@ -413,8 +445,24 @@ file_trycdf(struct magic_set *ms, int fd, const unsigned char *buf,
|
|||
if ((i = cdf_read_summary_info(&info, &h, &sat, &ssat, &sst, &dir,
|
||||
&scn)) == -1) {
|
||||
if (errno == ESRCH) {
|
||||
corrupt = expn;
|
||||
expn = "No summary info";
|
||||
if ((i = cdf_read_catalog(&info, &h, &sat, &ssat, &sst,
|
||||
&dir, &scn)) == -1) {
|
||||
corrupt = expn;
|
||||
if ((i = cdf_read_encrypted_package(&info, &h,
|
||||
&sat, &ssat, &sst, &dir, &scn)) == -1)
|
||||
expn = "No summary info";
|
||||
else {
|
||||
expn = "Encrypted";
|
||||
i = -1;
|
||||
}
|
||||
goto out4;
|
||||
}
|
||||
#ifdef CDF_DEBUG
|
||||
cdf_dump_catalog(&h, &scn);
|
||||
#endif
|
||||
if ((i = cdf_file_catalog(ms, &h, &scn))
|
||||
< 0)
|
||||
expn = "Can't expand catalog";
|
||||
} else {
|
||||
expn = "Cannot read summary info";
|
||||
}
|
||||
|
@ -473,7 +521,8 @@ out0:
|
|||
if (file_printf(ms, ", %s%s", corrupt, expn) == -1)
|
||||
return -1;
|
||||
} else {
|
||||
if (file_printf(ms, "application/CDFV2-corrupt") == -1)
|
||||
if (file_printf(ms, "application/CDFV2-%s",
|
||||
*corrupt ? "corrupt" : "encrypted") == -1)
|
||||
return -1;
|
||||
}
|
||||
i = 1;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: softmagic.c,v 1.11 2014/06/13 02:08:06 christos Exp $ */
|
||||
/* $NetBSD: softmagic.c,v 1.12 2014/10/10 20:15:02 christos Exp $ */
|
||||
/*
|
||||
* Copyright (c) Ian F. Darwin 1986-1995.
|
||||
* Software written by Ian F. Darwin and others;
|
||||
|
@ -34,9 +34,9 @@
|
|||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
FILE_RCSID("@(#)$File: softmagic.c,v 1.191 2014/06/04 17:36:34 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: softmagic.c,v 1.195 2014/09/24 19:49:07 christos Exp $")
|
||||
#else
|
||||
__RCSID("$NetBSD: softmagic.c,v 1.11 2014/06/13 02:08:06 christos Exp $");
|
||||
__RCSID("$NetBSD: softmagic.c,v 1.12 2014/10/10 20:15:02 christos Exp $");
|
||||
#endif
|
||||
#endif /* lint */
|
||||
|
||||
|
@ -46,10 +46,6 @@ __RCSID("$NetBSD: softmagic.c,v 1.11 2014/06/13 02:08:06 christos Exp $");
|
|||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#if defined(HAVE_LOCALE_H)
|
||||
#include <locale.h>
|
||||
#endif
|
||||
|
||||
|
||||
private int match(struct magic_set *, struct magic *, uint32_t,
|
||||
const unsigned char *, size_t, size_t, int, int, int, int, int *, int *,
|
||||
|
@ -83,6 +79,7 @@ file_softmagic(struct magic_set *ms, const unsigned char *buf, size_t nbytes,
|
|||
{
|
||||
struct mlist *ml;
|
||||
int rv, printed_something = 0, need_separator = 0;
|
||||
|
||||
for (ml = ms->mlist[0]->next; ml != ms->mlist[0]; ml = ml->next)
|
||||
if ((rv = match(ms, ml->magic, ml->nmagic, buf, nbytes, 0, mode,
|
||||
text, 0, level, &printed_something, &need_separator,
|
||||
|
@ -103,8 +100,8 @@ file_fmtcheck(struct magic_set *ms, const struct magic *m, const char *def,
|
|||
const char *ptr = fmtcheck(m->desc, def);
|
||||
if (ptr == def)
|
||||
file_magerror(ms,
|
||||
"%s, %zu: format `%s' does not match with `%s'",
|
||||
file, line, m->desc, def);
|
||||
"%s, %" SIZE_T_FORMAT "u: format `%s' does not match"
|
||||
" with `%s'", file, line, m->desc, def);
|
||||
return ptr;
|
||||
}
|
||||
#else
|
||||
|
@ -240,9 +237,9 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
|
|||
if (file_check_mem(ms, ++cont_level) == -1)
|
||||
return -1;
|
||||
|
||||
while (++magindex < nmagic &&
|
||||
magic[magindex].cont_level != 0) {
|
||||
m = &magic[magindex];
|
||||
while (magindex + 1 < nmagic &&
|
||||
magic[magindex + 1].cont_level != 0) {
|
||||
m = &magic[++magindex];
|
||||
ms->line = m->lineno; /* for messages */
|
||||
|
||||
if (cont_level < m->cont_level)
|
||||
|
@ -1065,7 +1062,7 @@ mconvert(struct magic_set *ms, struct magic *m, int flip)
|
|||
private void
|
||||
mdebug(uint32_t offset, const char *str, size_t len)
|
||||
{
|
||||
(void) fprintf(stderr, "mget/%zu @%d: ", len, offset);
|
||||
(void) fprintf(stderr, "mget/%" SIZE_T_FORMAT "u @%d: ", len, offset);
|
||||
file_showstr(stderr, str, len);
|
||||
(void) fputc('\n', stderr);
|
||||
(void) fputc('\n', stderr);
|
||||
|
@ -1215,8 +1212,9 @@ mget(struct magic_set *ms, const unsigned char *s, struct magic *m,
|
|||
return -1;
|
||||
|
||||
if ((ms->flags & MAGIC_DEBUG) != 0) {
|
||||
fprintf(stderr, "mget(type=%d, flag=%x, offset=%u, o=%zu, "
|
||||
"nbytes=%zu)\n", m->type, m->flag, offset, o, nbytes);
|
||||
fprintf(stderr, "mget(type=%d, flag=%x, offset=%u, o=%"
|
||||
SIZE_T_FORMAT "u, " "nbytes=%" SIZE_T_FORMAT "u)\n",
|
||||
m->type, m->flag, offset, o, nbytes);
|
||||
mdebug(offset, (char *)(void *)p, sizeof(union VALUETYPE));
|
||||
#ifndef COMPILE_ONLY
|
||||
file_mdump(m);
|
||||
|
@ -1949,6 +1947,7 @@ magiccheck(struct magic_set *ms, struct magic *m)
|
|||
case FILE_REGEX: {
|
||||
int rc;
|
||||
file_regex_t rx;
|
||||
const char *search;
|
||||
|
||||
if (ms->search.s == NULL)
|
||||
return 0;
|
||||
|
@ -1965,19 +1964,31 @@ magiccheck(struct magic_set *ms, struct magic *m)
|
|||
size_t slen = ms->search.s_len;
|
||||
#ifndef REG_STARTEND
|
||||
#define REG_STARTEND 0
|
||||
char c;
|
||||
if (slen != 0)
|
||||
slen--;
|
||||
c = ms->search.s[slen];
|
||||
((char *)(intptr_t)ms->search.s)[slen] = '\0';
|
||||
char *copy;
|
||||
if (slen != 0) {
|
||||
copy = malloc(slen);
|
||||
if (copy == NULL) {
|
||||
file_error(ms, errno,
|
||||
"can't allocate %" SIZE_T_FORMAT "u bytes",
|
||||
slen);
|
||||
return -1;
|
||||
}
|
||||
memcpy(copy, ms->search.s, slen);
|
||||
copy[--slen] = '\0';
|
||||
search = copy;
|
||||
} else {
|
||||
search = ms->search.s;
|
||||
copy = NULL;
|
||||
}
|
||||
#else
|
||||
search = ms->search.s;
|
||||
pmatch[0].rm_so = 0;
|
||||
pmatch[0].rm_eo = slen;
|
||||
#endif
|
||||
rc = file_regexec(&rx, (const char *)ms->search.s,
|
||||
rc = file_regexec(&rx, (const char *)search,
|
||||
1, pmatch, REG_STARTEND);
|
||||
#if REG_STARTEND == 0
|
||||
((char *)(intptr_t)ms->search.s)[l] = c;
|
||||
free(copy);
|
||||
#endif
|
||||
switch (rc) {
|
||||
case 0:
|
||||
|
|
Loading…
Reference in New Issue