]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Properly deal with exceptions when registering objects from YAML
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 29 May 2026 08:00:09 +0000 (10:00 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 13 Jul 2026 13:55:19 +0000 (15:55 +0200)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/dnsdistdist/dnsdist-rust-lib/rust-middle-in.rs
pdns/dnsdistdist/dnsdist-rust-lib/rust-post-in.rs

index 0ea5e5de2d3f67bbe6caff96b11aace99a6af572..95d0cd6e7fba3ca0f97ccd82f1c7fd4dc806be6f 100644 (file)
         type DNSSelector;
         type DNSActionWrapper;
         type DNSResponseActionWrapper;
-        fn registerProtobufLogger(config: &ProtobufLoggerConfiguration);
-        fn registerDnstapLogger(config: &DnstapLoggerConfiguration);
-        fn registerOtlpLogger(config: &OtlpLoggerConfiguration);
-        fn registerKVSObjects(config: &KeyValueStoresConfiguration);
-        fn registerMMDBObjects(config: &Vec<MmdbConfiguration>);
-        fn registerNMGObjects(nmgs: &Vec<NetmaskGroupConfiguration>);
-        fn registerTimedIPSetObjects(sets: &Vec<TimedIpSetConfiguration>);
+        fn registerProtobufLogger(config: &ProtobufLoggerConfiguration) -> Result<()>;
+        fn registerDnstapLogger(config: &DnstapLoggerConfiguration) -> Result<()>;
+        fn registerOtlpLogger(config: &OtlpLoggerConfiguration) -> Result<()>;
+        fn registerKVSObjects(config: &KeyValueStoresConfiguration) -> Result<()>;
+        fn registerMMDBObjects(config: &Vec<MmdbConfiguration>) -> Result<()>;
+        fn registerNMGObjects(nmgs: &Vec<NetmaskGroupConfiguration>) -> Result<()>;
+        fn registerTimedIPSetObjects(sets: &Vec<TimedIpSetConfiguration>) -> Result<()>;
     }
 }
 
index dbbc1a88bd03df1f3b88a5ecb83c5b42c796c69d..e777d4bbe76951e759e6bac3ff4998321d9a9a28 100644 (file)
@@ -47,16 +47,17 @@ fn get_response_rules_from_serde(
 
 fn register_remote_loggers(
   config: &dnsdistsettings::RemoteLoggingConfiguration,
-) {
+) -> Result<(), cxx::Exception> {
   for logger in &config.protobuf_loggers {
-    dnsdistsettings::registerProtobufLogger(logger);
+    dnsdistsettings::registerProtobufLogger(logger)?;
   }
   for logger in &config.dnstap_loggers {
-    dnsdistsettings::registerDnstapLogger(logger);
+    dnsdistsettings::registerDnstapLogger(logger)?;
   }
   for logger in &config.otlp_loggers {
-    dnsdistsettings::registerOtlpLogger(logger);
+    dnsdistsettings::registerOtlpLogger(logger)?;
   }
+  Ok(())
 }
 
 fn get_global_configuration_from_serde(
@@ -94,15 +95,15 @@ fn get_global_configuration_from_serde(
         ..Default::default()
     };
     // this needs to be done before the rules so that they can refer to the loggers
-    register_remote_loggers(&config.remote_logging);
+    register_remote_loggers(&config.remote_logging)?;
     // this needs to be done before the KVS so they can refer to the DBs
-    dnsdistsettings::registerMMDBObjects(&config.mmdbs);
+    dnsdistsettings::registerMMDBObjects(&config.mmdbs)?;
     // this needs to be done before the rules so that they can refer to the KVS objects
-    dnsdistsettings::registerKVSObjects(&config.key_value_stores);
+    dnsdistsettings::registerKVSObjects(&config.key_value_stores)?;
     // this needs to be done before the rules so that they can refer to the NMG objects
-    dnsdistsettings::registerNMGObjects(&config.netmask_groups);
+    dnsdistsettings::registerNMGObjects(&config.netmask_groups)?;
     // this needs to be done before the rules so that they can refer to the TimeIPSet objects
-    dnsdistsettings::registerTimedIPSetObjects(&config.timed_ip_sets);
+    dnsdistsettings::registerTimedIPSetObjects(&config.timed_ip_sets)?;
     // this needs to be done BEFORE the rules so that they can refer to the selectors
     // by name
     config.selectors = get_selectors_from_serde(&serde.selectors)?;