Skip to content

Commit

Permalink
API: Reject unknown types (TYPE0)
Browse files Browse the repository at this point in the history
Fixes #2130.
(cherry picked from commit 24cd86c)
  • Loading branch information
zeha authored and mind04 committed Feb 26, 2015
1 parent 92d4a7e commit 2f72b7c
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
4 changes: 4 additions & 0 deletions pdns/ws-auth.cc
Expand Up @@ -400,6 +400,10 @@ static void gatherRecords(const Value& container, vector<DNSResourceRecord>& new
rr.priority = 0;
rr.disabled = boolFromJson(record, "disabled");

if (rr.qtype.getCode() == 0) {
throw ApiException("Record "+rr.qname+"/"+stringFromJson(record, "type")+" is of unknown type");
}

try {
shared_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(rr.qtype.getCode(), 1, rr.content));
string tmp = drc->serialize(rr.qname);
Expand Down
23 changes: 23 additions & 0 deletions regression-tests.api/test_Zones.py
Expand Up @@ -704,6 +704,29 @@ def test_zone_rr_update_out_of_zone(self):
self.assertEquals(r.status_code, 422)
self.assertIn('out of zone', r.json()['error'])

def test_rrset_unknown_type(self):
payload, zone = self.create_zone()
name = payload['name']
rrset = {
'changetype': 'replace',
'name': name,
'type': 'FAFAFA',
'records': [
{
"name": name,
"type": "FAFAFA",
"ttl": 3600,
"content": "4.3.2.1",
"disabled": False
}
]
}
payload = {'rrsets': [rrset]}
r = self.session.patch(self.url("/servers/localhost/zones/" + name), data=json.dumps(payload),
headers={'content-type': 'application/json'})
self.assertEquals(r.status_code, 422)
self.assertIn('unknown type', r.json()['error'])

def test_zone_rr_delete_out_of_zone(self):
payload, zone = self.create_zone()
name = payload['name']
Expand Down

0 comments on commit 2f72b7c

Please sign in to comment.