]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Generate YAML and Lua configuration bindings for SetEDNSOptionResponseAction
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 30 May 2025 09:41:25 +0000 (11:41 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 30 May 2025 09:44:17 +0000 (11:44 +0200)
pdns/dnsdistdist/dnsdist-lua-response-actions-generated.cc
pdns/dnsdistdist/dnsdist-response-actions-definitions.yml
pdns/dnsdistdist/dnsdist-response-actions-factory-generated.cc
pdns/dnsdistdist/dnsdist-response-actions-factory-generated.hh
pdns/dnsdistdist/dnsdist-rust-bridge-actions-generated.cc
pdns/dnsdistdist/dnsdist-rust-bridge-actions-generated.hh
pdns/dnsdistdist/dnsdist-rust-lib/rust/src/lib.rs

index bef903eea137b14201b509ace83d3daaa254d071..bf3938ba1932830ab2c4c8e03b8ebb04f29233c1 100644 (file)
@@ -14,6 +14,9 @@ luaCtx.writeFunction("LogResponseAction", [](boost::optional<std::string> file_n
 luaCtx.writeFunction("LuaFFIPerThreadResponseAction", [](std::string code) {
   return dnsdist::actions::getLuaFFIPerThreadResponseAction(code);
 });
+luaCtx.writeFunction("SetEDNSOptionResponseAction", [](uint32_t code, std::string data) {
+  return dnsdist::actions::getSetEDNSOptionResponseAction(code, data);
+});
 luaCtx.writeFunction("SetExtendedDNSErrorResponseAction", [](uint16_t info_code, boost::optional<std::string> extra_text) {
   return dnsdist::actions::getSetExtendedDNSErrorResponseAction(info_code, extra_text ? *extra_text : "");
 });
index ae156bd75d736fe3f221630c1a0f1480e20b75a4..17f20ee2b33636141dfa0d11e740b3ee1ab6d995 100644 (file)
@@ -174,7 +174,6 @@ The function will be invoked in a per-thread Lua state, without access to the gl
       description: "A list of ``name``=``key`` pairs, for meta-data to be added to Protocol Buffer message"
 - name: "SetEDNSOption"
   description: "Add arbitrary EDNS option and data to the response. Any existing EDNS content with the same option code will be overwritten. Subsequent rules are processed after this action"
-  skip-rust: true
   parameters:
     - name: "code"
       type: "u32"
index e5f5c8dbee826705ee27198b4a3916dbf05ea80f..8883e0375a92996fafaa54620c5a906653e50d66 100644 (file)
@@ -19,6 +19,10 @@ std::shared_ptr<DNSResponseAction> getLuaFFIPerThreadResponseAction(const std::s
 {
   return std::shared_ptr<DNSResponseAction>(new LuaFFIPerThreadResponseAction(code));
 }
+std::shared_ptr<DNSResponseAction> getSetEDNSOptionResponseAction(uint32_t code, const std::string& data)
+{
+  return std::shared_ptr<DNSResponseAction>(new SetEDNSOptionResponseAction(code, data));
+}
 std::shared_ptr<DNSResponseAction> getSetExtendedDNSErrorResponseAction(uint16_t info_code, const std::string& extra_text)
 {
   return std::shared_ptr<DNSResponseAction>(new SetExtendedDNSErrorResponseAction(info_code, extra_text));
index 7eabf156d23015d74ee3663136125bf35a92d613..9fb2f73cda64542d2ed17651cd8560d2f731c43b 100644 (file)
@@ -4,6 +4,7 @@ std::shared_ptr<DNSResponseAction> getDelayResponseAction(uint32_t msec);
 std::shared_ptr<DNSResponseAction> getDropResponseAction();
 std::shared_ptr<DNSResponseAction> getLogResponseAction(const std::string& file_name, bool append, bool buffered, bool verbose_only, bool include_timestamp);
 std::shared_ptr<DNSResponseAction> getLuaFFIPerThreadResponseAction(const std::string& code);
+std::shared_ptr<DNSResponseAction> getSetEDNSOptionResponseAction(uint32_t code, const std::string& data);
 std::shared_ptr<DNSResponseAction> getSetExtendedDNSErrorResponseAction(uint16_t info_code, const std::string& extra_text);
 std::shared_ptr<DNSResponseAction> getSetReducedTTLResponseAction(uint8_t percentage);
 std::shared_ptr<DNSResponseAction> getSetSkipCacheResponseAction();
index c4de7e5bb2389927c5f05e4289d33a368d9f7ba4..4f0b953095e5ce6c67da6f565ab3d1546dcc8ed5 100644 (file)
@@ -179,6 +179,11 @@ std::shared_ptr<DNSResponseActionWrapper> getLuaFFIPerThreadResponseAction(const
   auto action = dnsdist::actions::getLuaFFIPerThreadResponseAction(std::string(config.code));
   return newDNSResponseActionWrapper(std::move(action), config.name);
 }
+std::shared_ptr<DNSResponseActionWrapper> getSetEDNSOptionResponseAction(const SetEDNSOptionResponseActionConfiguration& config)
+{
+  auto action = dnsdist::actions::getSetEDNSOptionResponseAction(config.code, std::string(config.data));
+  return newDNSResponseActionWrapper(std::move(action), config.name);
+}
 std::shared_ptr<DNSResponseActionWrapper> getSetExtendedDNSErrorResponseAction(const SetExtendedDNSErrorResponseActionConfiguration& config)
 {
   auto action = dnsdist::actions::getSetExtendedDNSErrorResponseAction(config.info_code, std::string(config.extra_text));
index e628aad99df09fdf66c90c4ac50961a7d73c4a4a..e3efd22a261e1f5a07572c9ea51e65ad1e6984ab 100644 (file)
@@ -107,6 +107,8 @@ struct LuaFFIPerThreadResponseActionConfiguration;
 std::shared_ptr<DNSResponseActionWrapper> getLuaFFIPerThreadResponseAction(const LuaFFIPerThreadResponseActionConfiguration& config);
 struct RemoteLogResponseActionConfiguration;
 std::shared_ptr<DNSResponseActionWrapper> getRemoteLogResponseAction(const RemoteLogResponseActionConfiguration& config);
+struct SetEDNSOptionResponseActionConfiguration;
+std::shared_ptr<DNSResponseActionWrapper> getSetEDNSOptionResponseAction(const SetEDNSOptionResponseActionConfiguration& config);
 struct SetExtendedDNSErrorResponseActionConfiguration;
 std::shared_ptr<DNSResponseActionWrapper> getSetExtendedDNSErrorResponseAction(const SetExtendedDNSErrorResponseActionConfiguration& config);
 struct SetMaxReturnedTTLResponseActionConfiguration;
index 29131313b707f5129cfd99164cc15f649fdf9ae2..163f0e334e1ad901cd315c2526ed81ded7783a49 100644 (file)
@@ -647,6 +647,15 @@ mod dnsdistsettings {
         metas: Vec<ProtoBufMetaConfiguration>,
     }
 
+    #[derive(Deserialize, Serialize, Debug, PartialEq)]
+    #[serde(deny_unknown_fields)]
+    struct SetEDNSOptionResponseActionConfiguration {
+        #[serde(default, skip_serializing_if = "crate::is_default")]
+        name: String,
+        code: u32,
+        data: String,
+    }
+
     #[derive(Deserialize, Serialize, Debug, PartialEq)]
     #[serde(deny_unknown_fields)]
     struct SetExtendedDNSErrorResponseActionConfiguration {
@@ -2234,6 +2243,7 @@ mod dnsdistsettings {
         fn getLuaFFIResponseAction(config: &LuaFFIResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
         fn getLuaFFIPerThreadResponseAction(config: &LuaFFIPerThreadResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
         fn getRemoteLogResponseAction(config: &RemoteLogResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
+        fn getSetEDNSOptionResponseAction(config: &SetEDNSOptionResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
         fn getSetExtendedDNSErrorResponseAction(config: &SetExtendedDNSErrorResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
         fn getSetMaxReturnedTTLResponseAction(config: &SetMaxReturnedTTLResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
         fn getSetMaxTTLResponseAction(config: &SetMaxTTLResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
@@ -2526,6 +2536,7 @@ enum ResponseAction {
     LuaFFI(dnsdistsettings::LuaFFIResponseActionConfiguration),
     LuaFFIPerThread(dnsdistsettings::LuaFFIPerThreadResponseActionConfiguration),
     RemoteLog(dnsdistsettings::RemoteLogResponseActionConfiguration),
+    SetEDNSOption(dnsdistsettings::SetEDNSOptionResponseActionConfiguration),
     SetExtendedDNSError(dnsdistsettings::SetExtendedDNSErrorResponseActionConfiguration),
     SetMaxReturnedTTL(dnsdistsettings::SetMaxReturnedTTLResponseActionConfiguration),
     SetMaxTTL(dnsdistsettings::SetMaxTTLResponseActionConfiguration),
@@ -4031,6 +4042,11 @@ fn get_one_response_action_from_serde(action: &ResponseAction) -> Result<dnsdist
                     action: dnsdistsettings::getRemoteLogResponseAction(&config)?,
                 });
             }
+        ResponseAction::SetEDNSOption(config) => {
+                return Ok(dnsdistsettings::SharedDNSResponseAction {
+                    action: dnsdistsettings::getSetEDNSOptionResponseAction(&config)?,
+                });
+            }
         ResponseAction::SetExtendedDNSError(config) => {
                 return Ok(dnsdistsettings::SharedDNSResponseAction {
                     action: dnsdistsettings::getSetExtendedDNSErrorResponseAction(&config)?,