@@ -11,61 +11,68 @@ pub fn rescanMac(cb: *Bundle, gpa: Allocator) RescanMacError!void {
11
11
cb .bytes .clearRetainingCapacity ();
12
12
cb .map .clearRetainingCapacity ();
13
13
14
- const file = try fs .openFileAbsolute ("/System/Library/Keychains/SystemRootCertificates.keychain" , .{});
15
- defer file .close ();
14
+ const keychainPaths = [2 ][]const u8 {
15
+ "/System/Library/Keychains/SystemRootCertificates.keychain" ,
16
+ "/Library/Keychains/System.keychain" ,
17
+ };
16
18
17
- const bytes = try file .readToEndAlloc (gpa , std .math .maxInt (u32 ));
18
- defer gpa .free (bytes );
19
+ for (keychainPaths ) | keychainPath | {
20
+ const file = try fs .openFileAbsolute (keychainPath , .{});
21
+ defer file .close ();
19
22
20
- var stream = std .io . fixedBufferStream ( bytes );
21
- const reader = stream . reader ( );
23
+ const bytes = try file . readToEndAlloc ( gpa , std .math . maxInt ( u32 ) );
24
+ defer gpa . free ( bytes );
22
25
23
- const db_header = try reader . readStructEndian ( ApplDbHeader , .big );
24
- assert ( mem . eql ( u8 , & db_header . signature , "kych" ) );
26
+ var stream = std . io . fixedBufferStream ( bytes );
27
+ const reader = stream . reader ( );
25
28
26
- try stream .seekTo (db_header .schema_offset );
29
+ const db_header = try reader .readStructEndian (ApplDbHeader , .big );
30
+ assert (mem .eql (u8 , & db_header .signature , "kych" ));
27
31
28
- const db_schema = try reader . readStructEndian ( ApplDbSchema , .big );
32
+ try stream . seekTo ( db_header . schema_offset );
29
33
30
- var table_list = try gpa .alloc (u32 , db_schema .table_count );
31
- defer gpa .free (table_list );
34
+ const db_schema = try reader .readStructEndian (ApplDbSchema , .big );
32
35
33
- var table_idx : u32 = 0 ;
34
- while (table_idx < table_list .len ) : (table_idx += 1 ) {
35
- table_list [table_idx ] = try reader .readInt (u32 , .big );
36
- }
36
+ var table_list = try gpa .alloc (u32 , db_schema .table_count );
37
+ defer gpa .free (table_list );
37
38
38
- const now_sec = std .time .timestamp ();
39
+ var table_idx : u32 = 0 ;
40
+ while (table_idx < table_list .len ) : (table_idx += 1 ) {
41
+ table_list [table_idx ] = try reader .readInt (u32 , .big );
42
+ }
39
43
40
- for (table_list ) | table_offset | {
41
- try stream .seekTo (db_header .schema_offset + table_offset );
44
+ const now_sec = std .time .timestamp ();
42
45
43
- const table_header = try reader .readStructEndian (TableHeader , .big );
46
+ for (table_list ) | table_offset | {
47
+ try stream .seekTo (db_header .schema_offset + table_offset );
44
48
45
- if (@as (std .c .DB_RECORDTYPE , @enumFromInt (table_header .table_id )) != .X509_CERTIFICATE ) {
46
- continue ;
47
- }
49
+ const table_header = try reader .readStructEndian (TableHeader , .big );
48
50
49
- var record_list = try gpa .alloc (u32 , table_header .record_count );
50
- defer gpa .free (record_list );
51
+ if (@as (std .c .DB_RECORDTYPE , @enumFromInt (table_header .table_id )) != .X509_CERTIFICATE ) {
52
+ continue ;
53
+ }
51
54
52
- var record_idx : u32 = 0 ;
53
- while (record_idx < record_list .len ) : (record_idx += 1 ) {
54
- record_list [record_idx ] = try reader .readInt (u32 , .big );
55
- }
55
+ var record_list = try gpa .alloc (u32 , table_header .record_count );
56
+ defer gpa .free (record_list );
57
+
58
+ var record_idx : u32 = 0 ;
59
+ while (record_idx < record_list .len ) : (record_idx += 1 ) {
60
+ record_list [record_idx ] = try reader .readInt (u32 , .big );
61
+ }
56
62
57
- for (record_list ) | record_offset | {
58
- try stream .seekTo (db_header .schema_offset + table_offset + record_offset );
63
+ for (record_list ) | record_offset | {
64
+ try stream .seekTo (db_header .schema_offset + table_offset + record_offset );
59
65
60
- const cert_header = try reader .readStructEndian (X509CertHeader , .big );
66
+ const cert_header = try reader .readStructEndian (X509CertHeader , .big );
61
67
62
- try cb .bytes .ensureUnusedCapacity (gpa , cert_header .cert_size );
68
+ try cb .bytes .ensureUnusedCapacity (gpa , cert_header .cert_size );
63
69
64
- const cert_start = @as (u32 , @intCast (cb .bytes .items .len ));
65
- const dest_buf = cb .bytes .allocatedSlice ()[cert_start .. ];
66
- cb .bytes .items .len += try reader .readAtLeast (dest_buf , cert_header .cert_size );
70
+ const cert_start = @as (u32 , @intCast (cb .bytes .items .len ));
71
+ const dest_buf = cb .bytes .allocatedSlice ()[cert_start .. ];
72
+ cb .bytes .items .len += try reader .readAtLeast (dest_buf , cert_header .cert_size );
67
73
68
- try cb .parseCert (gpa , cert_start , now_sec );
74
+ try cb .parseCert (gpa , cert_start , now_sec );
75
+ }
69
76
}
70
77
}
71
78
0 commit comments