Commit b4149e03 authored by JINMEI Tatuya's avatar JINMEI Tatuya
Browse files

[trac610] added a new option --csv-file-dir to bindctl.

this options allows the user to change the directory that stores the user/pass
CSV file.  it's mainly intended for the covenience of tests.
parent 03de120c
......@@ -87,7 +87,8 @@ class ValidatedHTTPSConnection(http.client.HTTPSConnection):
class BindCmdInterpreter(Cmd):
"""simple bindctl example."""
def __init__(self, server_port = 'localhost:8080', pem_file = None):
def __init__(self, server_port='localhost:8080', pem_file=None,
csv_file_dir=None):
Cmd.__init__(self)
self.location = ""
self.prompt_end = '> '
......@@ -103,7 +104,12 @@ class BindCmdInterpreter(Cmd):
ca_certs=pem_file)
self.session_id = self._get_session_id()
self.config_data = None
if csv_file_dir is not None:
self.csv_file_dir = csv_file_dir
else:
self.csv_file_dir = pwd.getpwnam(getpass.getuser()).pw_dir + \
os.sep + '.bind10' + os.sep
def _get_session_id(self):
'''Generate one session id for the connection. '''
rand = os.urandom(16)
......@@ -175,9 +181,7 @@ class BindCmdInterpreter(Cmd):
time, username and password saved in 'default_user.csv' will be
used first.
'''
csv_file_dir = pwd.getpwnam(getpass.getuser()).pw_dir
csv_file_dir += os.sep + '.bind10' + os.sep
users = self._get_saved_user_info(csv_file_dir, CSV_FILE_NAME)
users = self._get_saved_user_info(self.csv_file_dir, CSV_FILE_NAME)
for row in users:
param = {'username': row[0], 'password' : row[1]}
try:
......@@ -211,7 +215,8 @@ class BindCmdInterpreter(Cmd):
raise FailToLogin()
if response.status == http.client.OK:
self._save_user_info(username, passwd, csv_file_dir, CSV_FILE_NAME)
self._save_user_info(username, passwd, self.csv_file_dir,
CSV_FILE_NAME)
return True
def _update_commands(self):
......
......@@ -111,25 +111,28 @@ def check_addr(option, opt_str, value, parser):
parser.values.addr = value
def set_bindctl_options(parser):
parser.add_option('-p', '--port', dest = 'port', type = 'int',
action = 'callback', callback=check_port,
default = '8080', help = 'port for cmdctl of bind10')
parser.add_option('-p', '--port', dest='port', type='int',
action='callback', callback=check_port,
default='8080', help='port for cmdctl of bind10')
parser.add_option('-a', '--address', dest = 'addr', type = 'string',
action = 'callback', callback=check_addr,
default = '127.0.0.1', help = 'IP address for cmdctl of bind10')
parser.add_option('-a', '--address', dest='addr', type='string',
action='callback', callback=check_addr,
default='127.0.0.1', help='IP address for cmdctl of bind10')
parser.add_option('-c', '--certificate-chain', dest = 'cert_chain',
type = 'string', action = 'store',
help = 'PEM formatted server certificate validation chain file')
parser.add_option('-c', '--certificate-chain', dest='cert_chain',
type='string', action='store',
help='PEM formatted server certificate validation chain file')
parser.add_option('--csv-file-dir', dest='csv_file_dir', type='string',
default=None, action='store',
help='Directory to store the password CSV file')
if __name__ == '__main__':
parser = OptionParser(version = VERSION)
set_bindctl_options(parser)
(options, args) = parser.parse_args()
server_addr = options.addr + ':' + str(options.port)
tool = BindCmdInterpreter(server_addr, pem_file=options.cert_chain)
tool = BindCmdInterpreter(server_addr, pem_file=options.cert_chain,
csv_file_dir=options.csv_file_dir)
prepare_config_commands(tool)
tool.run()
......@@ -51,6 +51,7 @@
<arg><option>--address <replaceable>address</replaceable></option></arg>
<arg><option>--help</option></arg>
<arg><option>--certificate-chain <replaceable>file</replaceable></option></arg>
<arg><option>--csv-file-dir<replaceable>file</replaceable></option></arg>
<arg><option>--port <replaceable>number</replaceable></option></arg>
<arg><option>--version</option></arg>
</cmdsynopsis>
......@@ -109,6 +110,22 @@
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>--csv-file-dir</option><replaceable>file</replaceable>
</term>
<listitem>
<para>
The directory name in which the user/password CSV file
is stored (see AUTHENTICATION).
By default this option doesn't have any value,
in which case the ".bind10" directory under the user's
home directory will be used.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-h</option>,
<option>--help</option></term>
......@@ -148,8 +165,10 @@
<para>
The tool will authenticate using a username and password.
On the first successful login, it will save the details to
<filename>~/.bind10/default_user.csv</filename>
a comma-separated-value (CSV) file
which will be used for later uses of <command>bindctl</command>.
The file name is <filename>default_user.csv</filename>
located under the directory specified by the --csv-file-dir option.
</para>
<!-- TODO: mention HTTPS? -->
......
......@@ -17,6 +17,8 @@
import unittest
import isc.cc.data
import os
import pwd
import getpass
from isc.config.config_data import ConfigData, MultiConfigData
from isc.config.module_spec import ModuleSpec
from bindctl import cmdparse
......@@ -342,9 +344,22 @@ class TestBindCmdInterpreter(unittest.TestCase):
writer.writerow(['name2'])
csvfile.close()
def test_csv_file_dir(self):
# Checking default value
if "HOMEE" in os.environ:
home_dir = os.environ["HOME"]
else:
home_dir = pwd.getpwnam(getpass.getuser()).pw_dir
self.assertEqual(home_dir + os.sep + '.bind10' + os.sep,
bindcmd.BindCmdInterpreter().csv_file_dir)
new_csv_dir = '/something/different/'
custom_cmd = bindcmd.BindCmdInterpreter(csv_file_dir=new_csv_dir)
self.assertEqual(new_csv_dir, custom_cmd.csv_file_dir)
def test_get_saved_user_info(self):
cmd = bindcmd.BindCmdInterpreter()
users = cmd._get_saved_user_info('/notexist', 'cvs_file.cvs')
users = cmd._get_saved_user_info('/notexist', 'csv_file.csv')
self.assertEqual([], users)
csvfilename = 'csv_file.csv'
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment