From 6450d545ca04345e40e7900e3423249c6a315353 Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Fri, 7 May 2021 00:33:29 +0200
Subject: [PATCH] Always fall back to higher configuration level

---
 src/config.rs | 8 +++++++-
 src/pam.rs    | 2 +-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/config.rs b/src/config.rs
index 4828be0..0c6a0f6 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 2761e25..b469af0 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);
-- 
GitLab