Merge "Validate type of given ssh key"
This commit is contained in:
@@ -22,7 +22,7 @@ __all__ = ('ParamValidationError', 'validate_integer', 'validate_float',
|
|||||||
'validate_regexp', 'validate_port', 'validate_not_empty',
|
'validate_regexp', 'validate_port', 'validate_not_empty',
|
||||||
'validate_options', 'validate_ip', 'validate_multi_ip',
|
'validate_options', 'validate_ip', 'validate_multi_ip',
|
||||||
'validate_file', 'validate_ping', 'validate_ssh',
|
'validate_file', 'validate_ping', 'validate_ssh',
|
||||||
'validate_multi_ssh')
|
'validate_multi_ssh', 'validate_sshkey')
|
||||||
|
|
||||||
|
|
||||||
def validate_integer(param, options=None):
|
def validate_integer(param, options=None):
|
||||||
@@ -244,3 +244,21 @@ def validate_multi_ssh(param, options=None):
|
|||||||
options = options or []
|
options = options or []
|
||||||
for host in param.split(","):
|
for host in param.split(","):
|
||||||
validate_ssh(host)
|
validate_ssh(host)
|
||||||
|
|
||||||
|
|
||||||
|
def validate_sshkey(param, options=None):
|
||||||
|
"""
|
||||||
|
Raises ParamValidationError if provided sshkey file is not public key.
|
||||||
|
"""
|
||||||
|
if not param:
|
||||||
|
return
|
||||||
|
with open(param) as sshkey:
|
||||||
|
line = sshkey.readline()
|
||||||
|
msg = None
|
||||||
|
if not re.search('ssh-|ecdsa', line):
|
||||||
|
msg = ('Invalid content header in %s, Public SSH key is required.'
|
||||||
|
% param)
|
||||||
|
if re.search('BEGIN [RD]SA PRIVATE KEY', line):
|
||||||
|
msg = 'Public SSH key is required. You passed private key.'
|
||||||
|
if msg:
|
||||||
|
raise ParamValidationError(msg)
|
||||||
|
@@ -33,7 +33,8 @@ def initConfig(controllerObject):
|
|||||||
"USAGE" : "Path to a Public key to install on servers. If a usable key has not been installed on the remote servers the user will be prompted for a password and this key will be installed so the password will not be required again",
|
"USAGE" : "Path to a Public key to install on servers. If a usable key has not been installed on the remote servers the user will be prompted for a password and this key will be installed so the password will not be required again",
|
||||||
"PROMPT" : "Enter the path to your ssh Public key to install on servers",
|
"PROMPT" : "Enter the path to your ssh Public key to install on servers",
|
||||||
"OPTION_LIST" : [],
|
"OPTION_LIST" : [],
|
||||||
"VALIDATORS" : [validators.validate_file],
|
"VALIDATORS" : [validators.validate_file,
|
||||||
|
validators.validate_sshkey],
|
||||||
"PROCESSORS" : [processors.process_ssh_key],
|
"PROCESSORS" : [processors.process_ssh_key],
|
||||||
"DEFAULT_VALUE" : (glob.glob(os.path.join(os.environ["HOME"], ".ssh/*.pub"))+[""])[0],
|
"DEFAULT_VALUE" : (glob.glob(os.path.join(os.environ["HOME"], ".ssh/*.pub"))+[""])[0],
|
||||||
"MASK_INPUT" : False,
|
"MASK_INPUT" : False,
|
||||||
|
@@ -51,7 +51,8 @@ class CommandLineTestCase(PackstackTestCaseMixin, TestCase):
|
|||||||
|
|
||||||
# create a dummy public key
|
# create a dummy public key
|
||||||
dummy_public_key = os.path.join(self.tempdir, 'id_rsa.pub')
|
dummy_public_key = os.path.join(self.tempdir, 'id_rsa.pub')
|
||||||
open(dummy_public_key, 'w').close()
|
with open(dummy_public_key, 'w') as dummy:
|
||||||
|
dummy.write('ssh-rsa AAAAblablabla')
|
||||||
|
|
||||||
# Save sys.argv and replace it with the args we want optparse to use
|
# Save sys.argv and replace it with the args we want optparse to use
|
||||||
orig_argv = sys.argv
|
orig_argv = sys.argv
|
||||||
|
Reference in New Issue
Block a user