@@ -8,78 +8,78 @@ use super::super::CertItem;
8
8
9
9
cfg_if ! {
10
10
if #[ cfg( any( target_os = "android" , target_os = "solaris" ) ) ] {
11
- use std:: fs:: { read_dir, ReadDir } ;
12
-
13
- pub struct CertBundle ( & ' static str ) ;
14
-
15
- pub struct CertIter ( & ' static str , Option <ReadDir >) ;
16
-
17
- impl IntoIterator for CertBundle {
18
- type Item = CertItem ;
19
- type IntoIter = CertIter ;
20
-
21
- fn into_iter( self ) -> Self :: IntoIter {
22
- if let Ok ( dir) = read_dir( self . 0 ) {
23
- CertIter ( self . 0 , Some ( dir) )
24
- } else {
25
- CertIter ( self . 0 , None )
26
- }
27
- }
28
- }
29
-
30
- impl Iterator for CertIter {
31
- type Item = CertItem ;
32
-
33
- fn next( & mut self ) -> Option <Self :: Item > {
34
- match self . 1 {
35
- None => return None ,
36
- Some ( ref mut dir) => {
37
- match dir. next( ) {
38
- None => return None ,
39
- Some ( Err ( _) ) => return None ,
40
- Some ( Ok ( ref de) ) => {
41
- if let Ok ( ftyp) = de. file_type( ) {
42
- if !ftyp. is_dir( ) {
43
- if let Some ( s) = de. file_name( ) . to_str( ) {
44
- let mut full_name = String :: from( self . 0 ) ;
45
- full_name. push( '/' ) ;
46
- full_name. push_str( s) ;
47
- return Some ( CertItem :: File ( full_name) ) ;
48
- }
49
- }
50
- }
51
- }
52
- }
53
- }
54
- }
55
- self . next( )
56
- }
57
- }
58
-
59
- impl CertBundle {
60
- pub fn new( ) -> Result <CertBundle , ( ) > {
61
- Ok ( CertBundle ( try!( sys_path( ) ) ) )
62
- }
63
- }
11
+ use std:: fs:: { read_dir, ReadDir } ;
12
+
13
+ pub struct CertBundle ( & ' static str ) ;
14
+
15
+ pub struct CertIter ( & ' static str , Option <ReadDir >) ;
16
+
17
+ impl IntoIterator for CertBundle {
18
+ type Item = CertItem ;
19
+ type IntoIter = CertIter ;
20
+
21
+ fn into_iter( self ) -> Self :: IntoIter {
22
+ if let Ok ( dir) = read_dir( self . 0 ) {
23
+ CertIter ( self . 0 , Some ( dir) )
24
+ } else {
25
+ CertIter ( self . 0 , None )
26
+ }
27
+ }
28
+ }
29
+
30
+ impl Iterator for CertIter {
31
+ type Item = CertItem ;
32
+
33
+ fn next( & mut self ) -> Option <Self :: Item > {
34
+ match self . 1 {
35
+ None => return None ,
36
+ Some ( ref mut dir) => {
37
+ match dir. next( ) {
38
+ None => return None ,
39
+ Some ( Err ( _) ) => return None ,
40
+ Some ( Ok ( ref de) ) => {
41
+ if let Ok ( ftyp) = de. file_type( ) {
42
+ if !ftyp. is_dir( ) {
43
+ if let Some ( s) = de. file_name( ) . to_str( ) {
44
+ let mut full_name = String :: from( self . 0 ) ;
45
+ full_name. push( '/' ) ;
46
+ full_name. push_str( s) ;
47
+ return Some ( CertItem :: File ( full_name) ) ;
48
+ }
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
55
+ self . next( )
56
+ }
57
+ }
58
+
59
+ impl CertBundle {
60
+ pub fn new( ) -> Result <CertBundle , ( ) > {
61
+ Ok ( CertBundle ( try!( sys_path( ) ) ) )
62
+ }
63
+ }
64
64
} else {
65
- use std:: option;
65
+ use std:: option;
66
66
67
- pub struct CertBundle ( Option <CertItem >) ;
67
+ pub struct CertBundle ( Option <CertItem >) ;
68
68
69
- impl IntoIterator for CertBundle {
70
- type Item = CertItem ;
71
- type IntoIter = option:: IntoIter <CertItem >;
69
+ impl IntoIterator for CertBundle {
70
+ type Item = CertItem ;
71
+ type IntoIter = option:: IntoIter <CertItem >;
72
72
73
- fn into_iter( self ) -> Self :: IntoIter {
74
- self . 0 . into_iter( )
75
- }
76
- }
73
+ fn into_iter( self ) -> Self :: IntoIter {
74
+ self . 0 . into_iter( )
75
+ }
76
+ }
77
77
78
- impl CertBundle {
79
- pub fn new( ) -> Result <CertBundle , ( ) > {
80
- Ok ( CertBundle ( Some ( CertItem :: File ( try!( sys_path( ) ) . to_string( ) ) ) ) )
81
- }
82
- }
78
+ impl CertBundle {
79
+ pub fn new( ) -> Result <CertBundle , ( ) > {
80
+ Ok ( CertBundle ( Some ( CertItem :: File ( try!( sys_path( ) ) . to_string( ) ) ) ) )
81
+ }
82
+ }
83
83
}
84
84
}
85
85
@@ -91,50 +91,50 @@ pub fn sys_path() -> Result<&'static str, ()> {
91
91
// the contents of struct utsname on input, and will fill it with
92
92
// properly NUL-terminated strings on successful return.
93
93
unsafe {
94
- let mut uts = mem:: uninitialized :: < libc:: utsname > ( ) ;
95
-
96
- if libc:: uname ( & mut uts) < 0 {
97
- return Err ( ( ) ) ;
98
- }
99
- let sysname = try!( CStr :: from_ptr ( uts. sysname . as_ptr ( ) ) . to_str ( ) . map_err ( |_| ( ) ) ) ;
100
- let release = try!( CStr :: from_ptr ( uts. release . as_ptr ( ) ) . to_str ( ) . map_err ( |_| ( ) ) ) ;
101
- let path = match sysname {
102
- "FreeBSD" | "OpenBSD" => "/etc/ssl/cert.pem" ,
103
- "NetBSD" => "/etc/ssl/certs" ,
104
- "Linux" => linux_distro_guess_ca_path ( ) ,
105
- "SunOS" => {
106
- let major = release. split ( '.' ) . take ( 1 ) . collect :: < String > ( ) ;
107
- let major = major. parse :: < u32 > ( ) . unwrap_or ( 5 ) ;
108
- let minor = release. split ( '.' ) . skip ( 1 ) . take ( 1 ) . collect :: < String > ( ) ;
109
- let minor = minor. parse :: < u32 > ( ) . unwrap_or ( 10 ) ;
110
- if major < 5 || ( major == 5 && minor < 11 ) {
111
- "/opt/csw/share/cacertificates/mozilla"
112
- } else {
113
- "/etc/certs/CA"
114
- }
115
- }
116
- _ => unimplemented ! ( )
117
- } ;
118
- Ok ( path)
94
+ let mut uts = mem:: uninitialized :: < libc:: utsname > ( ) ;
95
+
96
+ if libc:: uname ( & mut uts) < 0 {
97
+ return Err ( ( ) ) ;
98
+ }
99
+ let sysname = try!( CStr :: from_ptr ( uts. sysname . as_ptr ( ) ) . to_str ( ) . map_err ( |_| ( ) ) ) ;
100
+ let release = try!( CStr :: from_ptr ( uts. release . as_ptr ( ) ) . to_str ( ) . map_err ( |_| ( ) ) ) ;
101
+ let path = match sysname {
102
+ "FreeBSD" | "OpenBSD" => "/etc/ssl/cert.pem" ,
103
+ "NetBSD" => "/etc/ssl/certs" ,
104
+ "Linux" => linux_distro_guess_ca_path ( ) ,
105
+ "SunOS" => {
106
+ let major = release. split ( '.' ) . take ( 1 ) . collect :: < String > ( ) ;
107
+ let major = major. parse :: < u32 > ( ) . unwrap_or ( 5 ) ;
108
+ let minor = release. split ( '.' ) . skip ( 1 ) . take ( 1 ) . collect :: < String > ( ) ;
109
+ let minor = minor. parse :: < u32 > ( ) . unwrap_or ( 10 ) ;
110
+ if major < 5 || ( major == 5 && minor < 11 ) {
111
+ "/opt/csw/share/cacertificates/mozilla"
112
+ } else {
113
+ "/etc/certs/CA"
114
+ }
115
+ }
116
+ _ => unimplemented ! ( )
117
+ } ;
118
+ Ok ( path)
119
119
}
120
120
}
121
121
122
122
cfg_if ! {
123
123
if #[ cfg( target_os = "android" ) ] {
124
- fn linux_distro_guess_ca_path( ) -> & ' static str {
125
- "/system/etc/security/cacerts"
126
- }
124
+ fn linux_distro_guess_ca_path( ) -> & ' static str {
125
+ "/system/etc/security/cacerts"
126
+ }
127
127
} else {
128
- fn linux_distro_guess_ca_path( ) -> & ' static str {
129
- if let Ok ( _debian) = fs:: metadata( "/etc/debian_version" ) {
130
- "/etc/ssl/certs/ca-certificates.crt"
131
- } else if let Ok ( _rh) = fs:: metadata( "/etc/redhat-release" ) {
132
- "/etc/pki/tls/certs/ca-bundle.crt"
133
- } else if let Ok ( _suse) = fs:: metadata( "/etc/SuSE-release" ) {
134
- "/etc/ssl/ca-bundle.pem"
135
- } else { // fallback
136
- "/etc/pki/tls/cacert.pem"
137
- }
138
- }
128
+ fn linux_distro_guess_ca_path( ) -> & ' static str {
129
+ if let Ok ( _debian) = fs:: metadata( "/etc/debian_version" ) {
130
+ "/etc/ssl/certs/ca-certificates.crt"
131
+ } else if let Ok ( _rh) = fs:: metadata( "/etc/redhat-release" ) {
132
+ "/etc/pki/tls/certs/ca-bundle.crt"
133
+ } else if let Ok ( _suse) = fs:: metadata( "/etc/SuSE-release" ) {
134
+ "/etc/ssl/ca-bundle.pem"
135
+ } else { // fallback
136
+ "/etc/pki/tls/cacert.pem"
137
+ }
138
+ }
139
139
}
140
140
}
0 commit comments