malcontent-dns-parental-con.../tests/common.rs

46 lines
1.3 KiB
Rust
Raw Normal View History

2022-08-13 17:04:22 +02:00
// SPDX-FileCopyrightText: 2022 Matteo Settenvini <matteo.settenvini@montecristosoftware.eu>
// SPDX-License-Identifier: GPL-3.0-or-later
2022-08-14 23:03:59 +02:00
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
#![allow(dead_code)]
2022-08-13 17:04:22 +02:00
use {
anyhow::{ensure, Result},
2022-08-14 23:03:59 +02:00
std::env,
2022-08-13 17:04:22 +02:00
std::ffi::CString,
std::path::PathBuf,
std::sync::Once,
};
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
static SETUP: Once = Once::new();
pub fn setup() -> Result<()> {
2022-08-14 23:03:59 +02:00
let out_dir = PathBuf::from(env!("OUT_DIR"));
let nss_config_status = unsafe {
2022-08-13 17:04:22 +02:00
SETUP.call_once(|| {
let library_path = test_cdylib::build_current_project();
let mut library_filename = library_path.file_name().unwrap().to_owned();
2022-08-14 23:03:59 +02:00
library_filename.push(".2"); // required for NSS modules
2022-08-13 17:04:22 +02:00
let dest = out_dir.join(library_filename);
2022-08-14 23:03:59 +02:00
std::fs::copy(library_path, dest).unwrap();
});
2022-08-13 17:04:22 +02:00
2022-08-14 23:03:59 +02:00
let db = CString::new("hosts").unwrap();
let resolvers = CString::new("malcontent [UNAVAIL=return] dns").unwrap();
__nss_configure_lookup(db.as_ptr(), resolvers.as_ptr())
};
2022-08-13 17:04:22 +02:00
2022-08-14 23:03:59 +02:00
ensure!(
nss_config_status == 0,
"Unable to configure NSS to load module: __nss_configure_lookup() returned {}",
nss_config_status
);
2022-08-13 17:04:22 +02:00
2022-08-14 23:03:59 +02:00
Ok(())
2022-08-13 17:04:22 +02:00
}