]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
SVCB: support ipvNhints=auto in text parser and writer
authorPieter Lexis <pieter.lexis@powerdns.com>
Tue, 9 Feb 2021 16:07:52 +0000 (17:07 +0100)
committerPieter Lexis <pieter.lexis@powerdns.com>
Mon, 29 Mar 2021 17:10:32 +0000 (19:10 +0200)
pdns/rcpgenerator.cc

index e84a6588b0fc6dca88627bbeda2f33062b726c2b..3210231160a1a4a64601395ffe017b03d2b7b647 100644 (file)
@@ -356,11 +356,19 @@ void RecordTextReader::xfrSvcParamKeyVals(set<SvcParam>& val)
       vector<string> value;
       xfrSVCBValueList(value);
       vector<ComboAddress> hints;
+      bool doAuto{false};
       try {
         for (auto const &v: value) {
+          if (v == "auto") {
+            doAuto = true;
+            hints.clear();
+            break;
+          }
           hints.push_back(ComboAddress(v));
         }
-        val.insert(SvcParam(key, std::move(hints)));
+        auto p = SvcParam(key, std::move(hints));
+        p.setAutoHint(doAuto);
+        val.insert(p);
       }
       catch (const std::invalid_argument& e) {
         throw RecordTextException(e.what());
@@ -781,6 +789,10 @@ void RecordTextWriter::xfrSvcParamKeyVals(const set<SvcParam>& val) {
     case SvcParam::ipv4hint: /* fall-through */
     case SvcParam::ipv6hint:
       // TODO use xfrCA and put commas in between?
+      if (param.getAutoHint()) {
+        d_string.append("auto");
+        break;
+      }
       d_string.append(ComboAddress::caContainerToString(param.getIPHints(), false));
       break;
     case SvcParam::alpn: