[svn] commit: r1197 - in /branches/xfrin: configure.ac src/bin/xfrin/xfrin.py.in src/bin/xfrin/xfrin.spec src/lib/python/isc/auth/sqlite3_ds.py
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Mar 8 08:54:00 UTC 2010
Author: zhanglikun
Date: Mon Mar 8 08:54:00 2010
New Revision: 1197
Log:
1. Add unittest code for xfrin.
2. Add the parameter 'db_file' for commands 'retransfer' and 'refresh'.
3. check parameter value of command 'retransfer/refresh'(Need to learn the value check APIs provided by Jelte in config.)
Modified:
branches/xfrin/configure.ac
branches/xfrin/src/bin/xfrin/xfrin.py.in
branches/xfrin/src/bin/xfrin/xfrin.spec
branches/xfrin/src/lib/python/isc/auth/sqlite3_ds.py
Modified: branches/xfrin/configure.ac
==============================================================================
--- branches/xfrin/configure.ac (original)
+++ branches/xfrin/configure.ac Mon Mar 8 08:54:00 2010
@@ -171,6 +171,7 @@
src/bin/cmdctl/cmdctl.py
src/bin/cmdctl/run_b10-cmdctl.sh
src/bin/cmdctl/unittest/cmdctl_test
+ src/bin/xfrin/unittest/xfrin_test
src/bin/xfrin/xfrin.py
src/bin/xfrin/run_b10-xfrin.sh
src/bin/bind10/bind10.py
@@ -193,6 +194,7 @@
chmod +x src/bin/xfrin/run_b10-xfrin.sh
chmod +x src/bin/bind10/run_bind10.sh
chmod +x src/bin/cmdctl/unittest/cmdctl_test
+ chmod +x src/bin/xfrin/unittest/xfrin_test
chmod +x src/bin/bindctl/unittest/bindctl_test
chmod +x src/bin/bindctl/bindctl
chmod +x src/bin/loadzone/run_loadzone
Modified: branches/xfrin/src/bin/xfrin/xfrin.py.in
==============================================================================
--- branches/xfrin/src/bin/xfrin/xfrin.py.in (original)
+++ branches/xfrin/src/bin/xfrin/xfrin.py.in Mon Mar 8 08:54:00 2010
@@ -93,15 +93,12 @@
raise XfrinException('send query failed')
def _send_axfr_query(self):
- '''
msg = message(message_mode.RENDER)
- #msg.set_qid(random.randint(1, 0xFFFF))
- msg.set_qid(int("0x1035", 16))
+ msg.set_qid(random.randint(1, 0xFFFF))
msg.set_opcode(op_code.QUERY())
msg.set_rcode(rcode.NOERROR())
query_question = question(name(self._zone_name), rr_class.IN(), rr_type.AXFR())
msg.add_question(query_question)
-
obuf = output_buffer(0)
render = message_render(obuf)
@@ -126,7 +123,7 @@
self.send(header_len)
self.send(byte_data)
#TODO, check error
-
+ '''
def _get_request_response(self, size):
recv_size = 0
@@ -214,15 +211,12 @@
self._check_response_status(msg)
rrset_iter = section_iter(msg, section.ANSWER())
- while True:
- if not rrset_iter.has_next():
- break
-
+ while not rrset_iter.is_last():
rrset = rrset_iter.get_rrset()
rrset_iter.next()
rrset_name = rrset.get_name().to_text()
- rrset_ttl = rrset.get_ttl().to_text()
+ rrset_ttl = int(rrset.get_ttl().to_text())
rrset_class = rrset.get_class().to_text()
rrset_type = rrset.get_type().to_text()
if rrset_type == rr_type.SOA():
@@ -235,7 +229,7 @@
rdata_iter.first()
while not rdata_iter.is_last():
rdata_text = rdata_iter.get_current().to_text()
- rr_data = [(rrset_name, rrset_ttl, rrset_class, rrset_ttl, rdata_text)]
+ rr_data = [(rrset_name, rrset_ttl, rrset_class, rrset_type, rdata_text)]
self._insert_record_to_sqlite3(rr_data)
rdata_iter.next()
@@ -311,25 +305,55 @@
def command_handler(self, command, args):
answer = create_answer(0, 'ok')
cmd = command
- if cmd == 'print_message':
- answer = create_answer(0, args)
- elif cmd == 'print_settings':
- self._print_settings()
- elif cmd == 'shutdown':
- answer = create_answer(1, 'not support now')
- elif cmd == 'retransfer':
- ret = self.xfrin_start(args['zone_name'], args['master'], args['port'], False)
- answer = create_answer(ret[0], ret[1])
- elif cmd == 'refresh':
- ret = self.xfrin_start(args['zone_name'], args['master'], args['port'])
- answer = create_answer(ret[0], ret[1])
-
+ try:
+ if cmd == 'print_message':
+ answer = create_answer(0, args)
+
+ elif cmd == 'print_settings':
+ self._print_settings()
+
+ elif cmd == 'shutdown':
+ answer = create_answer(1, 'not support now')
+
+ elif cmd == 'retransfer':
+ zone_name, master, port, db_file = self._parse_cmd_params(args)
+ ret = self.xfrin_start(zone_name, db_file, master, port, False)
+ answer = create_answer(ret[0], ret[1])
+
+ elif cmd == 'refresh':
+ zone_name, master, port, db_file = self._parse_cmd_params(args)
+ ret = self.xfrin_start(zone_name, db_file, master, port)
+ answer = create_answer(ret[0], ret[1])
+
+ except XfrinException as err:
+ answer = create_answer(1, str(err))
+ print(answer)
return answer
+
+ def _parse_cmd_params(self, args):
+ zone_name = args['zone_name']
+ master = args['master']
+ check_addr(master)
+ port = int(args.get('port'))
+ if port:
+ check_port(port)
+ else:
+ port = 53
+
+ db_file = args.get('db_file')
+ if not db_file:
+ #TODO, the db file path should be got in auth server's configuration
+ db_file = '/tmp/zone.sqlite3'
+
+ return (zone_name, master, port, db_file)
+
def startup(self):
self._cc.check_command()
- def xfrin_start(self, zone_name, master_addr, port = 53, check_soa = True):
+ def xfrin_start(self, zone_name, db_file, master_addr,
+ port = 53,
+ check_soa = True):
# check max_transfer_in, else return quota error
if self.recorder.count() >= self._max_transfers_in:
return (1, 'xfrin quota error')
@@ -354,13 +378,11 @@
signal.signal(signal.SIGTERM, signal_handler)
signal.signal(signal.SIGINT, signal_handler)
-def check_port(option, opt_str, value, parser):
+def check_port(value):
if (value < 0) or (value > 65535):
- raise OptionValueError('%s requires a port number (0-65535)' % opt_str)
- parser.values.port = value
-
-def check_addr(option, opt_str, value, parser):
- ipstr = value
+ raise XfrinException('requires a port number (0-65535)')
+
+def check_addr(ipstr):
ip_family = socket.AF_INET
if (ipstr.find(':') != -1):
ip_family = socket.AF_INET6
@@ -368,9 +390,7 @@
try:
socket.inet_pton(ip_family, ipstr)
except:
- raise OptionValueError("%s invalid ip address" % ipstr)
-
- parser.values.addr = value
+ raise XfrinException("%s invalid ip address" % ipstr)
if __name__ == '__main__':
Modified: branches/xfrin/src/bin/xfrin/xfrin.spec
==============================================================================
--- branches/xfrin/src/bin/xfrin/xfrin.spec (original)
+++ branches/xfrin/src/bin/xfrin/xfrin.spec Mon Mar 8 08:54:00 2010
@@ -45,6 +45,12 @@
"item_type": "integer",
"item_optional": True,
"item_default": 53
+ },
+ {
+ "item_name": "db_file",
+ "item_type": "string",
+ "item_optional": True,
+ "item_default": '/tmp/zone.sqlite3'
}
]
},
@@ -68,6 +74,12 @@
"item_type": "integer",
"item_optional": True,
"item_default": 53
+ },
+ {
+ "item_name": "db_file",
+ "item_type": "string",
+ "item_optional": True,
+ "item_default": '/tmp/zone.sqlite3'
}
]
},
Modified: branches/xfrin/src/lib/python/isc/auth/sqlite3_ds.py
==============================================================================
--- branches/xfrin/src/lib/python/isc/auth/sqlite3_ds.py (original)
+++ branches/xfrin/src/lib/python/isc/auth/sqlite3_ds.py Mon Mar 8 08:54:00 2010
@@ -123,6 +123,12 @@
new_zone_id = cur.lastrowid
for name, ttl, rdclass, rdtype, rdata in zonedata:
+ print('name type: %s', type(name))
+ print('ttl type: %s', type(ttl))
+ print('rdclass type: %s', type(rdclass))
+ print('rdtype type: %s', type(rdtype))
+ print('rdata type: %s', type(rdata))
+ print(name, ttl, rdclass, rdtype, rdata)
sigtype = ''
if rdtype.lower() == 'rrsig':
sigtype = rdata.split()[0]
More information about the bind10-changes
mailing list