]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Permit star, fixes #3406
authorAki Tuomi <cmouse@desteem.org>
Fri, 19 Feb 2016 07:53:55 +0000 (09:53 +0200)
committerAki Tuomi <cmouse@desteem.org>
Fri, 19 Feb 2016 15:00:30 +0000 (17:00 +0200)
pdns/ws-api.cc
pdns/ws-api.hh
pdns/ws-auth.cc

index e1e448a4524858a30ea6e5d721169ce0272893c0..12d3f7417c829cb9250871ce469028a877f21ce6 100644 (file)
@@ -287,3 +287,8 @@ void apiCheckNameAllowedCharacters(const string& name) {
   if (name.find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_/.-") != std::string::npos)
     throw ApiException("Name '"+name+"' contains unsupported characters");
 }
+
+void apiCheckQNameAllowedCharacters(const string& qname) {
+  if (qname.compare(0, 2, "*.") == 0) apiCheckNameAllowedCharacters(qname.substr(2));
+  else apiCheckNameAllowedCharacters(qname);
+}
index 96c4ec6b40639cb478b643bacdaee659d143d4c0..8c940769757b544147faab3904fb344396c6e224 100644 (file)
@@ -35,6 +35,7 @@ void apiServerStatistics(HttpRequest* req, HttpResponse* resp);
 DNSName apiZoneIdToName(const string& id);
 string apiZoneNameToId(const DNSName& name);
 void apiCheckNameAllowedCharacters(const string& name);
+void apiCheckQNameAllowedCharacters(const string& name);
 DNSName apiNameToDNSName(const string& name);
 
 // To be provided by product code.
index 88904bcc3012a6810d213b4504e94ac6af468428..8d886877553d405b1720a9aa95212aca4fe9914c 100644 (file)
@@ -620,7 +620,7 @@ static void apiServerZones(HttpRequest* req, HttpResponse* resp) {
     for(auto& rr : new_records) {
       if (!rr.qname.isPartOf(zonename) && rr.qname != zonename)
         throw ApiException("RRset "+rr.qname.toString()+" IN "+rr.qtype.getName()+": Name is out of zone");
-      apiCheckNameAllowedCharacters(rr.qname.toString());
+      apiCheckQNameAllowedCharacters(rr.qname.toString());
 
       if (rr.qtype.getCode() == QType::SOA && rr.qname==zonename) {
         have_soa = true;
@@ -889,7 +889,7 @@ static void patchZone(HttpRequest* req, HttpResponse* resp) {
       string changetype;
       QType qtype;
       DNSName qname = apiNameToDNSName(stringFromJson(rrset, "name"));
-      apiCheckNameAllowedCharacters(qname.toString());
+      apiCheckQNameAllowedCharacters(qname.toString());
       qtype = stringFromJson(rrset, "type");
       changetype = toUpper(stringFromJson(rrset, "changetype"));