Skip to content

Commit 6b1ef89

Browse files
authored
Fix GSSAPI dynamic loading (#133)
1 parent eaf19d4 commit 6b1ef89

File tree

1 file changed

+24
-18
lines changed

1 file changed

+24
-18
lines changed

rust/src/security/gssapi.rs

+24-18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use core::fmt;
2-
use libloading::library_filename;
32
use log::warn;
43
use once_cell::sync::Lazy;
54
use std::marker::PhantomData;
@@ -55,23 +54,30 @@ bitflags::bitflags! {
5554
}
5655
}
5756

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+
});
7581

7682
fn libgssapi() -> crate::Result<&'static bindings::GSSAPI> {
7783
LIBGSSAPI.as_ref().ok_or(HdfsError::OperationFailed(

0 commit comments

Comments
 (0)