From: Jason Ish Date: Mon, 3 Apr 2017 21:31:49 +0000 (-0600) Subject: rust: stub out configuration access functions X-Git-Tag: suricata-4.0.0-beta1~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=949b358b80695a53eb48578407f132b6dc4dd146;p=thirdparty%2Fsuricata.git rust: stub out configuration access functions --- 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;