rr.priority = intFromJson(record, "priority");
rr.disabled = boolFromJson(record, "disabled");
- if(rr.qtype.getCode() == QType::MX || rr.qtype.getCode() == QType::SRV)
- rr.content = lexical_cast<string>(rr.priority)+" "+rr.content;
-
if(rr.qname != qname || rr.qtype != qtype)
throw ApiException("Record "+rr.qname+" IN "+rr.qtype.getName()+" "+rr.content+": Record bundled with wrong RRset");
+ string temp_content = rr.content;
+ if(rr.qtype.getCode() == QType::MX || rr.qtype.getCode() == QType::SRV)
+ temp_content = lexical_cast<string>(rr.priority)+" "+rr.content;
+
try {
- shared_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(rr.qtype.getCode(), 1, rr.content));
+ shared_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(rr.qtype.getCode(), 1, temp_content));
string tmp = drc->serialize(rr.qname);
}
catch(std::exception& e)
recs = [rec for rec in data if rec['type'] == payload['type'] and rec['name'] == payload['name']]
self.assertEquals(recs, payload['records'])
+ def test_ZoneRRUpdateMX(self):
+ # Important to test with MX records, as they have a priority field, which must not end up in the content field.
+ payload, zone = self.create_zone()
+ name = payload['name']
+ # do a replace (= update)
+ payload = {
+ 'changetype': 'replace',
+ 'name': name,
+ 'type': 'MX',
+ 'records': [
+ {
+ "name": name,
+ "type": "MX",
+ "priority": 10,
+ "ttl": 3600,
+ "content": "mail.example.org",
+ "disabled": False
+ }
+ ]
+ }
+ r = self.session.patch(
+ self.url("/servers/localhost/zones/" + name + "/rrset"),
+ data=json.dumps(payload),
+ headers={'content-type': 'application/json'})
+ self.assertSuccessJson(r)
+ # verify that (only) the new record is there
+ r = self.session.get(self.url("/servers/localhost/zones/" + name))
+ data = r.json()['records']
+ recs = [rec for rec in data if rec['type'] == payload['type'] and rec['name'] == payload['name']]
+ self.assertEquals(recs, payload['records'])
+
def test_ZoneRRDelete(self):
payload, zone = self.create_zone()
name = payload['name']