diff --git a/src/config.rs b/src/config.rs index 4828be022b9ec34998a9c69bda7f702e8f060fc8..0c6a0f6fb123a5304dad712c04fe360ce0f7c7ff 100644 --- a/src/config.rs +++ b/src/config.rs @@ -60,6 +60,12 @@ pub fn argv_to_config(argv: &Vec<String>) -> config::Config { pub fn get_optional<'de, T: Deserialize<'de>>(conf: &config::Config, key: &str) -> Option<T> { match conf.get(key) { Ok(v) => Some(v), - Err(_) => None, + Err(_) => { + // Try falling back to parent block + match key.find('.') { + Some(i) => get_optional(conf, &key[i+1..]), + None => None, + } + }, } } diff --git a/src/pam.rs b/src/pam.rs index 2761e25fceeb38983458b71dd58fcddd78f1fc40..b469af08f4de90955c12c009b231854eecb45291 100644 --- a/src/pam.rs +++ b/src/pam.rs @@ -133,7 +133,7 @@ fn pam_sm_prepare(argv: &Vec<String>) -> Config { let conf = get_config(Some(conf_args)); let mut log_level = log::LevelFilter::Error; - if conf.get_bool("debug").unwrap_or_default() || conf.get_bool("pam.debug").unwrap_or_default() { + if get_optional(&conf, "pam.debug").unwrap_or_default() { log_level = log::LevelFilter::Debug; } setup_log(log_level);