logger.error(XFRIN_RETRANSFER_UNKNOWN_ZONE, zone_name.to_text())
answer = create_answer(1, errmsg)
else:
- master_addr = zone_info.get_master_addr_info()
request_type = RRType.AXFR()
- ret = self.xfrin_start(zone_name,
- rrclass,
- self._get_db_file(),
- master_addr,
- zone_info.tsig_key, request_type,
- True)
- answer = create_answer(ret[0], ret[1])
+ if zone_info.use_ixfr:
+ request_type = RRType.IXFR()
+ master_addr = zone_info.get_master_addr_info()
+ if notify_addr == master_addr:
+ ret = self.xfrin_start(zone_name,
+ rrclass,
+ self._get_db_file(),
+ master_addr,
+ zone_info.tsig_key, request_type,
+ True)
+ answer = create_answer(ret[0], ret[1])
+ else:
+ errmsg = "Got notification for " + zone_name.to_text()\
+ + "from unknown address: " + notify_addr[2][0];
+ logger.error(XFRIN_NOTIFY_UNKNOWN_MASTER,
+ zone_name.to_text(), notify_addr[2][0],
+ master_addr[2][0])
+ answer = create_answer(1, errmsg)
elif command == 'retransfer' or command == 'refresh':
# Xfrin receives the retransfer/refresh from cmdctl(sent by bindctl).