]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Search -lresolv (if applicable) the proper auto* way
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 12 Mar 2024 07:43:00 +0000 (08:43 +0100)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Mon, 25 Mar 2024 09:22:07 +0000 (10:22 +0100)
pdns/recursordist/Makefile.am
pdns/recursordist/configure.ac
pdns/recursordist/rec-system-resolve.cc
pdns/recursordist/rec-system-resolve.hh
pdns/recursordist/settings/rust/src/bridge.rs
pdns/recursordist/settings/rust/src/helpers.rs

index 56c5465977749e461d3885b2fba1d6dbec4486f0..762f7a37622665c45e9428b71f859a4cd6c8a435 100644 (file)
@@ -248,8 +248,7 @@ pdns_recursor_LDADD = \
        $(PROBDS_LIBS) \
        $(LIBCAP_LIBS) \
        $(ARC4RANDOM_LIBS) \
-       $(RUST_LIBS) \
-        -lresolv
+       $(RUST_LIBS)
 
 pdns_recursor_LDFLAGS = $(AM_LDFLAGS) \
        $(LIBCRYPTO_LDFLAGS) $(BOOST_CONTEXT_LDFLAGS) \
@@ -404,8 +403,7 @@ testrunner_LDADD = \
        $(PROBDS_LIBS) \
        $(LIBCAP_LIBS) \
        $(ARC4RANDOM_LIBS) \
-       $(RUST_LIBS) \
-        -lresolv
+       $(RUST_LIBS)
 
 if NOD_ENABLED
 testrunner_SOURCES +=   nod.hh nod.cc \
index 7485daf8f4faa6350b14597efee4063bee4201f0..a22a6049f85cbb0366c6fd18674ff71ff02dd7d1 100644 (file)
@@ -44,6 +44,8 @@ AC_SUBST([LIBDL], [$lt_cv_dlopen_libs])
 PDNS_CHECK_OS
 PDNS_CHECK_NETWORK_LIBS
 AC_SEARCH_LIBS([res_query], [resolv])
+# macOS uses an alternative name internally
+AC_SEARCH_LIBS([res_9_query], [resolv])
 PTHREAD_SET_NAME
 AC_FUNC_STRERROR_R
 
index 6d7327454be4c809c886d924689b33cf7ec02253..56b9ce73524f2e93ba08d2154c39d8bf5b9ba589 100644 (file)
@@ -74,12 +74,12 @@ std::string serverID()
     cerr << "XXXXXXXXX SID case 1" << endl;
     return {};
   }
-  MOADNSParser parser(false,  reinterpret_cast<char *>(buffer.data()), buffer.size()); // NOLINT
+  MOADNSParser parser(false, reinterpret_cast<char*>(buffer.data()), buffer.size()); // NOLINT
   if (parser.d_header.rcode != RCode::NoError || parser.d_answers.size() != 1) {
     cerr << "XXXXXXXXX SID case 2" << endl;
     return {};
   }
-  const auto&  answer = parser.d_answers.at(0);
+  const auto& answer = parser.d_answers.at(0);
   if (answer.first.d_type == QType::TXT) {
     if (auto txt = getRR<TXTRecordContent>(answer.first); txt != nullptr) {
       cerr << "XXXXXXXXX SID is " << txt->d_text << endl;
@@ -89,7 +89,7 @@ std::string serverID()
       return txt->d_text;
     }
   }
-    cerr << "XXXXXXXXX SID case 3" << endl;
+  cerr << "XXXXXXXXX SID case 3" << endl;
   return {};
 }
 } // anonymous namespace
@@ -130,10 +130,10 @@ ComboAddress pdns::RecResolve::lookupAndRegister(const std::string& name, time_t
 {
   auto data = d_data.lock();
   if (auto iter = data->d_map.find(name); iter != data->d_map.end()) {
-      if (iter->second.d_ttd < now) {
-        return iter->second.d_address;
-      }
-      // If it's stale, re-resolve below
+    if (iter->second.d_ttd < now) {
+      return iter->second.d_address;
+    }
+    // If it's stale, re-resolve below
   }
   // We keep the lock while resolving, even though this might take a while...
   auto address = resolve(name);
index 3931f790db53bd3806e7fdf1cc975711882d68d9..f20af5a56f5720603ae47a5dc5a9bfbca07b9f8a 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "config.h"
 
+#include <condition_variable>
 #include <functional>
 #include <thread>
 
@@ -78,6 +79,7 @@ private:
     void trigger();
 
     std::atomic<bool> changes{false};
+
   private:
     void refreshLoop();
 
index d8a004febe1e66ed5b62a1b6a1bc28ef13da6643..6de3318c2e44bf43575b6d688d8d30e0a672af8c 100644 (file)
@@ -72,19 +72,19 @@ fn is_port_number(str: &str) -> bool {
 }
 
 pub fn validate_socket_address_or_name(field: &str, val: &String) -> Result<(), ValidationError> {
-    let sa = SocketAddr::from_str(val);
+    let sa = validate_socket_address(field, val);
     if sa.is_err() {
-        let ip = IpAddr::from_str(val);
-        if ip.is_err() {
-            if !hostname_validator::is_valid(val) {
-                let parts:Vec<&str> = val.split(':').collect();
-                if parts.len () != 2 || !hostname_validator::is_valid(parts[0]) || !is_port_number(parts[1]) {
-                    let msg = format!(
-                        "{}: value `{}' is not an IP, IP:port, name or name:port combination",
-                        field, val
-                    );
-                    return Err(ValidationError { msg });
-                }
+        if !hostname_validator::is_valid(val) {
+            let parts: Vec<&str> = val.split(':').collect();
+            if parts.len() != 2
+                || !hostname_validator::is_valid(parts[0])
+                || !is_port_number(parts[1])
+            {
+                let msg = format!(
+                    "{}: value `{}' is not an IP, IP:port, name or name:port combination",
+                    field, val
+                );
+                return Err(ValidationError { msg });
             }
         }
     }
@@ -163,9 +163,7 @@ pub fn parse_yaml_string_to_api_zones(str: &str) -> Result<ApiZones, serde_yaml:
     serde_yaml::from_str(str)
 }
 
-pub fn parse_yaml_string_to_allow_notify_for(
-    str: &str,
-) -> Result<Vec<String>, serde_yaml::Error> {
+pub fn parse_yaml_string_to_allow_notify_for(str: &str) -> Result<Vec<String>, serde_yaml::Error> {
     serde_yaml::from_str(str)
 }
 
@@ -240,10 +238,7 @@ pub fn validate_auth_zones(field: &str, vec: &Vec<AuthZone>) -> Result<(), Valid
 }
 
 #[allow(clippy::ptr_arg)] //# Avoids creating a rust::Slice object on the C++ side.
-pub fn validate_forward_zones(
-    field: &str,
-    vec: &Vec<ForwardZone>,
-) -> Result<(), ValidationError> {
+pub fn validate_forward_zones(field: &str, vec: &Vec<ForwardZone>) -> Result<(), ValidationError> {
     validate_vec(field, vec, |field, element| element.validate(field))
 }
 
@@ -375,7 +370,9 @@ pub fn map_to_yaml_string(vec: &Vec<OldStyle>) -> Result<String, serde_yaml::Err
                         }
                         serde_yaml::Value::Sequence(seq)
                     }
-                    other => serde_yaml::Value::String("map_to_yaml_string: Unknown type: ".to_owned() + other),
+                    other => serde_yaml::Value::String(
+                        "map_to_yaml_string: Unknown type: ".to_owned() + other,
+                    ),
                 };
                 if entry.overriding {
                     let tagged_value = Box::new(serde_yaml::value::TaggedValue {
@@ -491,7 +488,10 @@ pub fn api_add_forward_zone(path: &str, forwardzone: ForwardZone) -> Result<(),
 }
 
 // This function is called from C++, it needs to acquire the lock
-pub fn api_add_forward_zones(path: &str, forwardzones: &mut Vec<ForwardZone>) -> Result<(), std::io::Error> {
+pub fn api_add_forward_zones(
+    path: &str,
+    forwardzones: &mut Vec<ForwardZone>,
+) -> Result<(), std::io::Error> {
     let _lock = LOCK.lock().unwrap();
     let mut zones = api_read_zones_locked(path, true)?;
     zones.forward_zones.append(forwardzones);
index 795d8a585500cf6054a4cb8397f5d7d2ad5b2a4d..a49786f6162600a278faed6187dca69a947edd89 100644 (file)
@@ -20,8 +20,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-use std::{error::Error, fmt};
 use crate::ValidationError;
+use std::{error::Error, fmt};
 
 /* Helper code for validation  */
 impl Error for ValidationError {}
@@ -64,10 +64,9 @@ pub fn is_default<T: Default + PartialEq>(t: &T) -> bool {
 
 pub const OVERRIDE_TAG: &str = "!override";
 
-pub fn is_overriding(m: &serde_yaml::Mapping, key: &str) -> bool{
+pub fn is_overriding(m: &serde_yaml::Mapping, key: &str) -> bool {
     if let Some(serde_yaml::Value::Tagged(vvv)) = m.get(key) {
         return vvv.tag == OVERRIDE_TAG;
     }
     false
 }
-