|
1 | 1 | use core::fmt;
|
2 |
| -use libloading::library_filename; |
3 | 2 | use log::warn;
|
4 | 3 | use once_cell::sync::Lazy;
|
5 | 4 | use std::marker::PhantomData;
|
@@ -55,23 +54,30 @@ bitflags::bitflags! {
|
55 | 54 | }
|
56 | 55 | }
|
57 | 56 |
|
58 |
| -static LIBGSSAPI: Lazy<Option<bindings::GSSAPI>> = |
59 |
| - Lazy::new( |
60 |
| - || match unsafe { bindings::GSSAPI::new(library_filename("gssapi_krb5")) } { |
61 |
| - Ok(gssapi) => Some(gssapi), |
62 |
| - Err(e) => { |
63 |
| - #[cfg(target_os = "macos")] |
64 |
| - let message = "Try installing via \"brew install krb5\""; |
65 |
| - #[cfg(target_os = "linux")] |
66 |
| - let message = "On Debian based systems, try \"apt-get install libgssapi-krb5-2\"\n |
67 |
| - On RHEL based systems, try \"yum install krb5-libs\""; |
68 |
| - #[cfg(not(any(target_os = "macos", target_os = "linux")))] |
69 |
| - let message = "Loading Kerberos libraries are not supported on this system"; |
70 |
| - log::warn!("Failed to libgssapi_krb5.\n{}.\n{:?}", message, e); |
71 |
| - None |
72 |
| - } |
73 |
| - }, |
74 |
| - ); |
| 57 | +static LIBGSSAPI: Lazy<Option<bindings::GSSAPI>> = Lazy::new(|| { |
| 58 | + // Debian systems don't have a symlink for just libgssapi_krb5.so, only libgssapi_krb5.so.2 |
| 59 | + // RHEL based systems have this .2 link also, so just use that |
| 60 | + #[cfg(target_os = "linux")] |
| 61 | + let library_name = "libgssapi_krb5.so.2"; |
| 62 | + |
| 63 | + #[cfg(not(target_os = "linux"))] |
| 64 | + let library_name = libloading::library_filename("gssapi_krb5"); |
| 65 | + |
| 66 | + #[cfg(not(any))] |
| 67 | + match unsafe { bindings::GSSAPI::new(library_name) } { |
| 68 | + Ok(gssapi) => Some(gssapi), |
| 69 | + Err(e) => { |
| 70 | + #[cfg(target_os = "macos")] |
| 71 | + let message = "Try installing via \"brew install krb5\""; |
| 72 | + #[cfg(target_os = "linux")] |
| 73 | + let message = "On Debian based systems, try \"apt-get install libgssapi-krb5-2\". On RHEL based systems, try \"yum install krb5-libs\""; |
| 74 | + #[cfg(not(any(target_os = "macos", target_os = "linux")))] |
| 75 | + let message = "Loading Kerberos libraries are not supported on this system"; |
| 76 | + log::warn!("Failed to libgssapi_krb5.\n{}.\n{:?}", message, e); |
| 77 | + None |
| 78 | + } |
| 79 | + } |
| 80 | +}); |
75 | 81 |
|
76 | 82 | fn libgssapi() -> crate::Result<&'static bindings::GSSAPI> {
|
77 | 83 | LIBGSSAPI.as_ref().ok_or(HdfsError::OperationFailed(
|
|
0 commit comments