From 949b358b80695a53eb48578407f132b6dc4dd146 Mon Sep 17 00:00:00 2001 From: Jason Ish Date: Mon, 3 Apr 2017 15:31:49 -0600 Subject: [PATCH] rust: stub out configuration access functions --- rust/src/conf.rs | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ rust/src/lib.rs | 2 ++ 2 files changed, 69 insertions(+) create mode 100644 rust/src/conf.rs diff --git a/rust/src/conf.rs b/rust/src/conf.rs new file mode 100644 index 0000000000..080396a642 --- /dev/null +++ b/rust/src/conf.rs @@ -0,0 +1,67 @@ +/* Copyright (C) 2017 Open Information Security Foundation + * + * You can copy, redistribute or modify this Program under the terms of + * the GNU General Public License version 2 as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +use std::os::raw::c_char; +use std::ffi::{CString, CStr}; +use std::ptr; +use std::str; + +use log::*; + +extern { + fn ConfGet(key: *const c_char, res: *mut *const c_char) -> i8; +} + +// Return the string value of a configuration value. +pub fn conf_get(key: &str) -> Option<&str> { + let mut vptr: *const c_char = ptr::null_mut(); + + unsafe { + if ConfGet(CString::new(key).unwrap().as_ptr(), &mut vptr) != 1 { + SCLogInfo!("Failed to find value for key {}", key); + return None; + } + } + + if vptr == ptr::null() { + return None; + } + + let value = str::from_utf8(unsafe{ + CStr::from_ptr(vptr).to_bytes() + }).unwrap(); + + return Some(value); +} + +// Return the value of key as a boolean. A value that is not set is +// the same as having it set to false. +pub fn conf_get_bool(key: &str) -> bool { + match conf_get(key) { + Some(val) => { + match val { + "1" | "yes" | "true" | "on" => { + return true; + }, + _ => {}, + } + }, + None => {}, + } + + return false; +} diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 4b25340d42..fb257128b2 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -1,2 +1,4 @@ #[macro_use] pub mod log; + +pub mod conf; -- 2.47.2