diff options
author | axtloss <axtlos@getcryst.al> | 2024-02-03 17:12:12 +0100 |
---|---|---|
committer | axtloss <axtlos@getcryst.al> | 2024-02-03 17:12:12 +0100 |
commit | abd7aba9709a7e05d57861af50f55ce275fb3663 (patch) | |
tree | 9784f09d12e904cbf3d1216fba883466122234b3 /core | |
parent | b77083448f096f01036d3e53dfddf0aee39bcd8c (diff) | |
download | fsverify-abd7aba9709a7e05d57861af50f55ce275fb3663.tar.gz fsverify-abd7aba9709a7e05d57861af50f55ce275fb3663.tar.bz2 |
add storage unit size option in header
Diffstat (limited to 'core')
-rw-r--r-- | core/storage.go | 52 |
1 files changed, 33 insertions, 19 deletions
diff --git a/core/storage.go b/core/storage.go index 363db0f..f6f1ffd 100644 --- a/core/storage.go +++ b/core/storage.go @@ -15,6 +15,7 @@ type Header struct { MagicNumber int Signature string FilesystemSize int + FilesystemUnit int TableSize int TableUnit int } @@ -26,6 +27,25 @@ type Node struct { PrevNodeSum string } +func parseUnitSpec(size []byte) int { + switch size[0] { + case 0: + return 1 + case 1: + return 1000 + case 2: + return 1000000 + case 3: + return 1000000000 + case 4: + return 1000000000000 + case 5: + return 1000000000000000 + default: + return -1 + } +} + func ReadHeader(partition string) (Header, error) { _, exist := os.Stat(partition) if os.IsNotExist(exist) { @@ -42,7 +62,8 @@ func ReadHeader(partition string) (Header, error) { MagicNumber := make([]byte, 2) UntrustedHash := make([]byte, 100) TrustedHash := make([]byte, 88) - FileSystemSize := make([]byte, 4) + FilesystemSize := make([]byte, 4) + FilesystemUnit := make([]byte, 1) TableSize := make([]byte, 4) TableUnit := make([]byte, 1) @@ -61,7 +82,11 @@ func ReadHeader(partition string) (Header, error) { if err != nil { return Header{}, err } - _, err = reader.Read(FileSystemSize) + _, err = reader.Read(FilesystemSize) + if err != nil { + return Header{}, err + } + _, err = reader.Read(FilesystemUnit) if err != nil { return Header{}, err } @@ -75,23 +100,12 @@ func ReadHeader(partition string) (Header, error) { } header.Signature = fmt.Sprintf("untrusted comment: signature from minisign secret key\r\n%s\r\ntrusted comment: timestamp:0\tfile:fsverify\thashed\r\n%s\r\n", UntrustedHash, TrustedHash) - header.FilesystemSize = int(binary.BigEndian.Uint16(FileSystemSize)) + header.FilesystemSize = int(binary.BigEndian.Uint16(FilesystemSize)) header.TableSize = int(binary.BigEndian.Uint32(TableSize)) - switch TableUnit[0] { - case 0: - header.TableUnit = 1 - case 1: - header.TableUnit = 1000 - case 2: - header.TableUnit = 1000000 - case 3: - header.TableUnit = 1000000000 - case 4: - header.TableUnit = 1000000000000 - case 5: - header.TableUnit = 1000000000000000 - default: - return Header{}, fmt.Errorf("Unknown TableUnit %d", TableUnit) + header.FilesystemUnit = parseUnitSpec(FilesystemUnit) + header.TableUnit = parseUnitSpec(TableUnit) + if header.FilesystemUnit == -1 || header.TableUnit == -1 { + return Header{}, fmt.Errorf("Error: unit size for Filesystem or Table invalid: fs: %x, table: %x", FilesystemUnit, TableUnit) } return header, nil } @@ -108,7 +122,7 @@ func ReadDB(partition string) (string, error) { defer part.Close() reader := bufio.NewReader(part) - _, err = reader.Read(make([]byte, 199)) + _, err = reader.Read(make([]byte, 200)) if err != nil { fmt.Println(err) return "", err |