diff options
-rw-r--r-- | Lib/whichdb.py | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/Lib/whichdb.py b/Lib/whichdb.py index c072e5b..aa1761c 100644 --- a/Lib/whichdb.py +++ b/Lib/whichdb.py @@ -31,9 +31,10 @@ def whichdb(filename): except IOError: return None - # Read the first 4 bytes of the file -- the magic number - s = f.read(4) + # Read the start of the file -- the magic number + s16 = f.read(16) f.close() + s = s16[0:4] # Return "" if not at least 4 bytes if len(s) != 4: @@ -53,5 +54,15 @@ def whichdb(filename): if magic in (0x00061561, 0x61150600): return "dbhash" + # BSD hash v2 has a 12-byte NULL pad in front of the file type + try: + (magic,) = struct.unpack("=l", s16[-4:]) + except struct.error: + return "" + + # Check for BSD hash + if magic in (0x00061561, 0x61150600): + return "dbhash" + # Unknown return "" |