From 8ce0dc75730d9970a13d3f4b8d6ddf242ba47c5a Mon Sep 17 00:00:00 2001 From: Kees Monshouwer Date: Sun, 25 Jan 2015 22:48:07 +0100 Subject: [PATCH] qtype is now case insensitive Plus update JSON API tests to test for this (from @zeha). --- pdns/qtype.cc | 11 ++++++----- regression-tests.api/test_Zones.py | 9 ++++++--- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/pdns/qtype.cc b/pdns/qtype.cc index 3e23f12b1..ed7bf4fd0 100644 --- a/pdns/qtype.cc +++ b/pdns/qtype.cc @@ -79,19 +79,20 @@ QType &QType::operator=(uint16_t n) int QType::chartocode(const char *p) { - static QType qt; + string P = toUpper(p); vector::iterator pos; + for(pos=names.begin(); pos < names.end(); ++pos) - if(pos->first == p) + if(pos->first == P) return pos->second; - + if(*p=='#') { return atoi(p+1); } - if(boost::starts_with(p, "TYPE")) + if(boost::starts_with(P, "TYPE")) return atoi(p+4); - + return 0; } diff --git a/regression-tests.api/test_Zones.py b/regression-tests.api/test_Zones.py index b627d15fd..3e2087297 100644 --- a/regression-tests.api/test_Zones.py +++ b/regression-tests.api/test_Zones.py @@ -95,13 +95,14 @@ class AuthZones(ApiTestCase): comments = [ { 'name': name, - 'type': 'SOA', + 'type': 'soa', # test uppercasing of type, too. 'account': 'test1', 'content': 'blah blah', 'modified_at': 11112, } ] payload, data = self.create_zone(name=name, comments=comments) + comments[0]['type'] = comments[0]['type'].upper() # check our comment has appeared self.assertEquals(data['comments'], comments) @@ -110,13 +111,14 @@ class AuthZones(ApiTestCase): records = [ { "name": name, - "type": "SOA", + 'type': 'soa', # test uppercasing of type, too. "ttl": 3600, "content": "ns1.example.net testmaster@example.net 10 10800 3600 604800 3600", "disabled": False } ] payload, data = self.create_zone(name=name, records=records) + records[0]['type'] = records[0]['type'].upper() self.assertEquals([r for r in data['records'] if r['type'] == records[0]['type']], records) def test_create_zone_trailing_dot(self): @@ -449,7 +451,7 @@ fred IN A 192.168.0.4 rrset = { 'changetype': 'replace', 'name': name, - 'type': 'NS', + 'type': 'ns', 'records': [ { "name": name, @@ -475,6 +477,7 @@ fred IN A 192.168.0.4 self.assert_success_json(r) # verify that (only) the new record is there r = self.session.get(self.url("/servers/localhost/zones/" + name)) + rrset['type'] = rrset['type'].upper() data = r.json()['records'] recs = [rec for rec in data if rec['type'] == rrset['type'] and rec['name'] == rrset['name']] self.assertEquals(recs, rrset['records']) -- 2.40.0