2 #------------------------------------------------------------------------------
3 # $File: database,v 1.43 2014/10/28 15:47:39 christos Exp $
4 # database: file(1) magic for various databases
6 # extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk)
10 # Will be maintained as part of the GDBM distribution in the future.
12 0 belong 0x13579acd GNU dbm 1.x or ndbm database, big endian, 32-bit
13 !:mime application/x-gdbm
14 0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian, old
15 !:mime application/x-gdbm
16 0 belong 0x13579acf GNU dbm 1.x or ndbm database, big endian, 64-bit
17 !:mime application/x-gdbm
18 0 lelong 0x13579acd GNU dbm 1.x or ndbm database, little endian, 32-bit
19 !:mime application/x-gdbm
20 0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian, old
21 !:mime application/x-gdbm
22 0 lelong 0x13579acf GNU dbm 1.x or ndbm database, little endian, 64-bit
23 !:mime application/x-gdbm
24 0 string GDBM GNU dbm 2.x database
25 !:mime application/x-gdbm
29 # Ian Darwin's file /etc/magic files: big/little-endian version.
31 # Hash 1.85/1.86 databases store metadata in network byte order.
32 # Btree 1.85/1.86 databases store the metadata in host byte order.
33 # Hash and Btree 2.X and later databases store the metadata in host byte order.
35 0 long 0x00061561 Berkeley DB
36 !:mime application/x-dbm
40 >>4 belong >0 (Hash, version %d, native byte-order)
44 >>4 belong >0 (Hash, version %d, little-endian)
46 0 belong 0x00061561 Berkeley DB
50 >>4 belong >0 (Hash, version %d, big-endian)
54 >>4 belong >0 (Hash, version %d, native byte-order)
56 0 long 0x00053162 Berkeley DB 1.85/1.86
57 >4 long >0 (Btree, version %d, native byte-order)
58 0 belong 0x00053162 Berkeley DB 1.85/1.86
59 >4 belong >0 (Btree, version %d, big-endian)
60 0 lelong 0x00053162 Berkeley DB 1.85/1.86
61 >4 lelong >0 (Btree, version %d, little-endian)
63 12 long 0x00061561 Berkeley DB
64 >16 long >0 (Hash, version %d, native byte-order)
65 12 belong 0x00061561 Berkeley DB
66 >16 belong >0 (Hash, version %d, big-endian)
67 12 lelong 0x00061561 Berkeley DB
68 >16 lelong >0 (Hash, version %d, little-endian)
70 12 long 0x00053162 Berkeley DB
71 >16 long >0 (Btree, version %d, native byte-order)
72 12 belong 0x00053162 Berkeley DB
73 >16 belong >0 (Btree, version %d, big-endian)
74 12 lelong 0x00053162 Berkeley DB
75 >16 lelong >0 (Btree, version %d, little-endian)
77 12 long 0x00042253 Berkeley DB
78 >16 long >0 (Queue, version %d, native byte-order)
79 12 belong 0x00042253 Berkeley DB
80 >16 belong >0 (Queue, version %d, big-endian)
81 12 lelong 0x00042253 Berkeley DB
82 >16 lelong >0 (Queue, version %d, little-endian)
85 12 long 0x00040988 Berkeley DB
86 >16 long >0 (Log, version %d, native byte-order)
87 12 belong 0x00040988 Berkeley DB
88 >16 belong >0 (Log, version %d, big-endian)
89 12 lelong 0x00040988 Berkeley DB
90 >16 lelong >0 (Log, version %d, little-endian)
94 # Round Robin Database Tool by Tobias Oetiker <oetiker@ee.ethz.ch>
95 0 string/b RRD\0 RRDTool DB
96 >4 string/b x version %s
98 >>10 short !0 16bit aligned
99 >>>10 bedouble 8.642135e+130 big-endian
100 >>>>18 short x 32bit long (m68k)
103 >>>12 long !0 32bit aligned
104 >>>>12 bedouble 8.642135e+130 big-endian
105 >>>>>20 long 0 64bit long
106 >>>>>20 long !0 32bit long
107 >>>>12 ledouble 8.642135e+130 little-endian
108 >>>>>24 long 0 64bit long
109 >>>>>24 long !0 32bit long (i386)
110 >>>>12 string \x43\x2b\x1f\x5b\x2f\x25\xc0\xc7 middle-endian
111 >>>>>24 short !0 32bit long (arm)
113 >>8 quad 0 64bit aligned
114 >>>16 bedouble 8.642135e+130 big-endian
115 >>>>24 long 0 64bit long (s390x)
116 >>>>24 long !0 32bit long (hppa/mips/ppc/s390/SPARC)
117 >>>16 ledouble 8.642135e+130 little-endian
118 >>>>28 long 0 64bit long (alpha/amd64/ia64)
119 >>>>28 long !0 32bit long (armel/mipsel)
121 #----------------------------------------------------------------------
122 # ROOT: file(1) magic for ROOT databases
124 0 string root\0 ROOT file
125 >4 belong x Version %d
126 >33 belong x (Compression: %d)
129 # Alex Ott <ott@jet.msk.su>
130 ## Paradox file formats
131 #2 leshort 0x0800 Paradox
135 #>0x39 byte 10 v. 5.x
136 #>0x39 byte 11 v. 5.x
137 #>0x39 byte 12 v. 7.x
138 #>>0x04 byte 0 indexed .DB data file
139 #>>0x04 byte 1 primary index .PX file
140 #>>0x04 byte 2 non-indexed .DB data file
141 #>>0x04 byte 3 non-incrementing secondary index .Xnn file
142 #>>0x04 byte 4 secondary index .Ynn file
143 #>>0x04 byte 5 incrementing secondary index .Xnn file
144 #>>0x04 byte 6 non-incrementing secondary index .XGn file
145 #>>0x04 byte 7 secondary index .YGn file
146 #>>>0x04 byte 8 incrementing secondary index .XGn file
148 ## XBase database files
149 # updated by Joerg Jenderek at Feb 2013
150 # http://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm
151 # http://www.clicketyclick.dk/databases/xbase/format/dbf.html
152 # http://home.f1.htw-berlin.de/scheibl/db/intern/dBase.htm
153 # inspect VVYYMMDD , where 1<= MM <= 12 and 1<= DD <= 31
154 0 ubelong&0x0000FFFF <0x00000C20
155 # skip Infocom game Z-machine
157 # skip Androids *.xml
162 # skip HELP.CA3 by test for reserved byte ( NULL )
164 # reserved bytes not always 0 ; also found 0x3901 (T4.DBF) ,0x7101 (T5.DBF,T6.DBF)
165 #>>>>>30 ubeshort x 30NULL?%x
166 # possible production flag,tag numbers(<=0x30),tag length(<=0x20), reserved (NULL)
167 >>>>>>24 ubelong&0xffFFFFff >0x01302000
169 >>>>>>24 ubelong&0xffFFFFff <0x01302001
170 # for Xbase Database file (*.DBF) reserved (NULL) for multi-user
171 >>>>>>>24 ubelong&0xffFFFFff =0
172 # test for 2 reserved NULL bytes,transaction and encryption byte flag
173 >>>>>>>>12 ubelong&0xFFFFfEfE 0
176 >>>>>>>>>28 ubyte&0xf8 0
178 >>>>>>>>>>8 uleshort >31
179 # skip PIC15736.PCX by test for language driver name or field name
180 >>>>>>>>>>>32 ubyte >0
181 #!:mime application/x-dbf; charset=unknown-8bit ??
182 #!:mime application/x-dbase
183 >>>>>>>>>>>>0 use xbase-type
185 >>>>>>>>>>>>0 ubyte x \b DBF
186 >>>>>>>>>>>>4 lelong 0 \b, no records
187 >>>>>>>>>>>>4 lelong >0 \b, %d record
189 >>>>>>>>>>>>>4 lelong >1 \bs
190 # http://www.clicketyclick.dk/databases/xbase/format/dbf_check.html#CHECK_DBF
191 # 1 <= record size <= 4000 (dBase 3,4) or 32 * KB (=0x8000)
192 >>>>>>>>>>>>10 uleshort x * %d
193 # file size = records * record size + header size
194 >>>>>>>>>>>>1 ubyte x \b, update-date
195 >>>>>>>>>>>>1 use xbase-date
196 # http://msdn.microsoft.com/de-de/library/cc483186(v=vs.71).aspx
197 #>>>>>>>>>>>>29 ubyte =0 \b, codepage ID=0x%x
198 # 2~cp850 , 3~cp1252 , 0x1b~?? ; what code page is 0x1b ?
199 >>>>>>>>>>>>29 ubyte >0 \b, codepage ID=0x%x
200 #>>>>>>>>>>>>28 ubyte&0x01 0 \b, no index file
201 >>>>>>>>>>>>28 ubyte&0x01 1 \b, with index file .MDX
202 >>>>>>>>>>>>28 ubyte&0x02 2 \b, with memo .FPT
203 >>>>>>>>>>>>28 ubyte&0x04 4 \b, DataBaseContainer
204 # 1st record offset + 1 = header size
205 >>>>>>>>>>>>8 uleshort >0
206 >>>>>>>>>>>>(8.s+1) ubyte >0
207 >>>>>>>>>>>>>8 uleshort >0 \b, at offset %d
208 >>>>>>>>>>>>>(8.s+1) ubyte >0
209 >>>>>>>>>>>>>>&-1 string >\0 1st record "%s"
210 # for multiple index files (*.MDX) Production flag,tag numbers(<=0x30),tag length(<=0x20), reserverd (NULL)
211 >>>>>>>24 ubelong&0x0133f7ff >0
212 # test for reserved NULL byte
214 # test for valid TAG key format (0x10 or 0)
215 >>>>>>>>>559 ubyte&0xeF 0
217 >>>>>>>>>>45 ubeshort <0x0C20
218 >>>>>>>>>>>45 ubyte >0
219 >>>>>>>>>>>>46 ubyte <32
220 >>>>>>>>>>>>>46 ubyte >0
221 #!:mime application/x-mdx
222 >>>>>>>>>>>>>>0 use xbase-type
223 >>>>>>>>>>>>>>0 ubyte x \b MDX
224 >>>>>>>>>>>>>>1 ubyte x \b, creation-date
225 >>>>>>>>>>>>>>1 use xbase-date
226 >>>>>>>>>>>>>>44 ubyte x \b, update-date
227 >>>>>>>>>>>>>>44 use xbase-date
228 # No.of tags in use (1,2,5,12)
229 >>>>>>>>>>>>>>28 uleshort x \b, %d
230 # No. of entries in tag (0x30)
231 >>>>>>>>>>>>>>25 ubyte x \b/%d tags
233 >>>>>>>>>>>>>>26 ubyte x * %d
235 >>>>>>>>>>>>>548 string x \b, 1st tag "%.11s"
237 #>>>>>>>>>>>>(26.b+548) string x \b, 2nd tag "%.11s"
239 # Print the xBase names of different version variants
244 >>0 ubyte 0x02 FoxBase
245 # FoxBase+/dBaseIII+, no memo
246 >>0 ubyte 0x03 FoxBase+/dBase III
247 !:mime application/x-dbf
248 # dBASE IV no memo file
249 >>0 ubyte 0x04 dBase IV
250 !:mime application/x-dbf
251 # dBASE V no memo file
252 >>0 ubyte 0x05 dBase V
253 !:mime application/x-dbf
254 >>0 ubyte 0x30 Visual FoxPro
255 !:mime application/x-dbf
256 >>0 ubyte 0x31 Visual FoxPro, autoincrement
257 !:mime application/x-dbf
258 # Visual FoxPro, with field type Varchar or Varbinary
259 >>0 ubyte 0x32 Visual FoxPro, with field type Varchar
260 !:mime application/x-dbf
261 # dBASE IV SQL, no memo;dbv memo var size (Flagship)
262 >>0 ubyte 0x43 dBase IV, with SQL table
263 !:mime application/x-dbf
264 # http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
265 #>>0 ubyte 0x62 dBase IV, with SQL table
266 #!:mime application/x-dbf
267 # dBASE IV, with memo!!
268 >>0 ubyte 0x7b dBase IV, with memo
269 !:mime application/x-dbf
270 # http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
271 #>>0 ubyte 0x82 dBase IV, with SQL system
272 #!:mime application/x-dbf
273 # FoxBase+/dBaseIII+ with memo .DBT!
274 >>0 ubyte 0x83 FoxBase+/dBase III, with memo .DBT
275 !:mime application/x-dbf
276 # VISUAL OBJECTS (first 1.0 versions) for the Dbase III files (NTX clipper driver); memo file
277 >>0 ubyte 0x87 VISUAL OBJECTS, with memo file
278 !:mime application/x-dbf
279 # http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
280 #>>0 ubyte 0x8A FoxBase+/dBase III, with memo .DBT
281 #!:mime application/x-dbf
282 # dBASE IV with memo!
283 >>0 ubyte 0x8B dBase IV, with memo .DBT
284 !:mime application/x-dbf
285 # dBase IV with SQL Table,no memo?
286 >>0 ubyte 0x8E dBase IV, with SQL table
287 !:mime application/x-dbf
288 # .dbv and .dbt memo (Flagship)?
289 >>0 ubyte 0xB3 Flagship
290 # http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
291 #>>0 ubyte 0xCA dBase IV with memo .DBT
292 #!:mime application/x-dbf
293 # dBASE IV with SQL table, with memo .DBT
294 >>0 ubyte 0xCB dBase IV with SQL table, with memo .DBT
295 !:mime application/x-dbf
296 # HiPer-Six format;Clipper SIX, with SMT memo file
297 >>0 ubyte 0xE5 Clipper SIX with memo
298 !:mime application/x-dbf
299 # http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
300 #>>0 ubyte 0xF4 dBase IV, with SQL table, with memo
301 #!:mime application/x-dbf
302 >>0 ubyte 0xF5 FoxPro with memo
303 !:mime application/x-dbf
304 # http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
305 #>>0 ubyte 0xFA FoxPro 2.x, with memo
306 #!:mime application/x-dbf
307 # unknown version (should not happen)
309 !:mime application/x-dbf
311 # flags in version byte
312 # DBT flag (with dBASE III memo .DBT)!!
313 # >>0 ubyte&0x80 >0 DBT_FLAG=%x
315 # >>0 ubyte&0x08 >0 MEMO_FLAG=%x
317 # >>0 ubyte&0x70 >0 SQL_FLAG=%x
318 # test and print the date of xBase .DBF .MDX
320 # inspect YYMMDD , where 1<= MM <= 12 and 1<= DD <= 31
327 # YY is interpreted as 20YY or 19YY
328 >>>>>>0 ubyte <100 \b %.2d
329 # YY is interpreted 1900+YY; TODO: display yy or 20yy instead 1YY
330 >>>>>>0 ubyte >99 \b %d
334 # dBase memo files .DBT or .FPT
335 # http://msdn.microsoft.com/en-us/library/8599s21w(v=vs.80).aspx
339 # next free block index is positive
341 # skip many JPG. ZIP, BZ2 by test for reserved bytes NULL , 0|2 , 0|1 , low byte of block size
342 >>>>17 ubelong&0xFFfdFE00 0x00000000
343 # skip many RAR by test for low byte 0 ,high byte 0|2|even of block size, 0|a|e|d7 , 0|64h
344 >>>>>20 ubelong&0xFF01209B 0x00000000
348 >>>>>>>0 use dbase3-memo-print
349 # dBASE III DBT without version, dBASE IV DBT , FoxPro FPT , or many ZIP , DBF garbage
351 # unusual dBASE III DBT like angest.dbt, dBASE IV DBT with block size 0 , FoxPro FPT , or garbage PCX DBF
353 # FoxPro FPT , unusual dBASE III DBT like biblio.dbt or garbage
355 >>>>>>>>>6 ubeshort >0
358 >>>>>>>>>>>0 use foxpro-memo-print
359 # dBASE III DBT , garbage
360 >>>>>>>>>6 ubeshort 0
361 # skip MM*DD*.bin by test for for reserved NULL byte
362 >>>>>>>>>>510 ubeshort 0
363 # skip TK-DOS11.img image by looking for memo text
364 >>>>>>>>>>>512 ubelong <0xfeffff03
365 # skip EFI executables by looking for memo text
366 >>>>>>>>>>>>512 ubelong >0x1F202020
367 >>>>>>>>>>>>>513 ubyte >0
368 # unusual dBASE III DBT like adressen.dbt
369 >>>>>>>>>>>>>>0 use dbase3-memo-print
370 # dBASE III DBT like angest.dbt, or garbage PCX DBF
372 # skip PCX and some DBF by test for for reserved NULL bytes
373 >>>>>>>>>510 ubeshort 0
374 # skip some DBF by test of invalid version
376 >>>>>>>>>>>0 ubyte <48
377 >>>>>>>>>>>>0 use dbase3-memo-print
378 # dBASE IV DBT with positive block size
379 >>>>>>>20 uleshort >0
380 >>>>>>>>0 use dbase4-memo-print
382 # Print the information of dBase III DBT memo file
383 0 name dbase3-memo-print
384 >0 ubyte x dBase III DBT
385 # instead 3 as version number 0 for unusual examples like biblio.dbt
386 >16 ubyte !3 \b, version number %u
387 # Number of next available block for appending data
388 #>0 lelong =0 \b, next free block index %u
389 >0 lelong !0 \b, next free block index %u
390 # no positiv block length
391 #>20 uleshort =0 \b, block length %u
392 >20 uleshort !0 \b, block length %u
393 # dBase III memo field terminated by \032\032
394 >512 string >\0 \b, 1st item "%s"
395 # Print the information of dBase IV DBT memo file
396 0 name dbase4-memo-print
397 >0 lelong x dBase IV DBT
398 # 8 character shorted main name of coresponding dBASE IV DBF file
399 >8 ubelong >0x20000000
400 # skip unusual like for angest.dbt
402 >>>8 string >\0 \b of %-.8s.DBF
403 # value 0 implies 512 as size
404 #>4 ulelong =0 \b, blocks size %u
405 # size of blocks not reliable like 0x2020204C in angest.dbt
407 >>4 ulelong&0x0000003f 0 \b, blocks size %u
408 # dBase IV DBT with positive block length (found 512 , 1024)
409 >20 uleshort >0 \b, block length %u
410 # next available block
411 #>0 lelong =0 \b, next free block index %u
412 >0 lelong !0 \b, next free block index %u
415 >>>&-4 use dbase4-memofield-print
416 # unusual dBase IV DBT without block length (implies 512 as length)
419 >>>&-4 use dbase4-memofield-print
420 # Print the information of dBase IV memo field
421 0 name dbase4-memofield-print
422 # free dBase IV memo field
423 >0 ubelong !0xFFFF0800
424 >>0 lelong x \b, next free block %u
425 >>4 lelong x \b, next used block %u
426 # used dBase IV memo field
427 >0 ubelong =0xFFFF0800
428 # length of memo field
429 >>4 lelong x \b, field length %d
430 >>>8 string >\0 \b, 1st used item "%s"
431 # Print the information of FoxPro FPT memo file
432 0 name foxpro-memo-print
433 >0 belong x FoxPro FPT
434 # Size of blocks for FoxPro ( 64,256 )
435 >6 ubeshort x \b, blocks size %u
436 # next available block
437 #>0 belong =0 \b, next free block index %u
438 >0 belong !0 \b, next free block index %u
439 # field type ( 0~picture, 1~memo, 2~object )
440 >512 ubelong <3 \b, field type %u
441 # length of memo field
443 >>516 belong >0 \b, field length %d
444 >>>520 string >\0 \b, 1st item "%s"
447 # DBASE index file *.NDX
448 # DBASE Compound Index file *.CDX
449 # dBASE IV Printer Driver *.PRF
450 ## End of XBase database stuff
453 4 string Standard\ Jet\ DB Microsoft Access Database
454 !:mime application/x-msaccess
455 4 string Standard\ ACE\ DB Microsoft Access Database
456 !:mime application/x-msaccess
458 # TDB database from Samba et al - Martin Pool <mbp@samba.org>
459 0 string TDB\ file TDB database
460 >32 lelong 0x2601196D version 6, little-endian
461 >>36 lelong x hash size %d bytes
463 # SE Linux policy database
464 0 lelong 0xf97cff8c SE Linux policy
467 >24 lelong x %d symbols
468 >28 lelong x %d ocons
470 # ICE authority file data (Wolfram Kleff)
471 2 string ICE ICE authority data
473 # X11 Xauthority file (Wolfram Kleff)
474 10 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
475 11 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
476 12 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
477 13 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
478 14 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
479 15 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
480 16 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
481 17 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
482 18 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
484 # From: Maxime Henrion <mux@FreeBSD.org>
485 # PostgreSQL's custom dump format, Maxime Henrion <mux@FreeBSD.org>
486 0 string PGDMP PostgreSQL custom database dump
489 >5 beshort <0x101 \b-0
493 # Type: Advanced Data Format (ADF) database
494 # URL: http://www.grc.nasa.gov/WWW/cgns/adf/
495 # From: Nicolas Chauvat <nicolas.chauvat@logilab.fr>
496 0 string @(#)ADF\ Database CGNS Advanced Data Format
498 # Tokyo Cabinet magic data
499 # http://tokyocabinet.sourceforge.net/index.html
500 0 string ToKyO\ CaBiNeT\n Tokyo Cabinet
503 !:mime application/x-tokyocabinet-hash
504 >32 byte 1 \b, B+ tree
505 !:mime application/x-tokyocabinet-btree
506 >32 byte 2 \b, Fixed-length
507 !:mime application/x-tokyocabinet-fixed
509 !:mime application/x-tokyocabinet-table
510 >33 byte &1 \b, [open]
511 >33 byte &2 \b, [fatal]
512 >34 byte x \b, apow=%d
513 >35 byte x \b, fpow=%d
514 >36 byte &0x01 \b, [large]
515 >36 byte &0x02 \b, [deflate]
516 >36 byte &0x04 \b, [bzip]
517 >36 byte &0x08 \b, [tcbs]
518 >36 byte &0x10 \b, [excodec]
519 >40 lequad x \b, bnum=%lld
520 >48 lequad x \b, rnum=%lld
521 >56 lequad x \b, fsiz=%lld
523 # Type: QDBM Quick Database Manager
524 # From: Benoit Sibaud <bsibaud@april.org>
525 0 string \\[depot\\]\n\f Quick Database Manager, little endian
526 0 string \\[DEPOT\\]\n\f Quick Database Manager, big endian
528 # Type: TokyoCabinet database
529 # URL: http://tokyocabinet.sourceforge.net/
530 # From: Benoit Sibaud <bsibaud@april.org>
531 0 string ToKyO\ CaBiNeT\n TokyoCabinet database
532 >14 string x (version %s)
534 # From: Stephane Blondon http://www.yaal.fr
535 # Database file for Zope (done by FileStorage)
536 0 string FS21 Zope Object Database File Storage (data)
537 # Cache file for the database of Zope (done by ClientStorage)
538 0 string ZEC3 Zope Object Database Client Cache File (data)
540 # IDA (Interactive Disassembler) database
541 0 string IDA1 IDA (Interactive Disassembler) database