Simplify error handling, reject empty values outright.

pull/316/head
Felix Fontein 2021-10-31 14:28:09 +01:00
parent 2b305459c2
commit d497231e1c
3 changed files with 8 additions and 9 deletions

View File

@ -130,11 +130,11 @@ class CertificateSigningRequestBackend(object):
('CN', module.params['common_name']), ('CN', module.params['common_name']),
('emailAddress', module.params['email_address']), ('emailAddress', module.params['email_address']),
] ]
self.subject = [(entry[0], entry[1]) for entry in self.subject if entry[1]]
try: try:
if module.params['subject']: if module.params['subject']:
self.subject = self.subject + parse_name_field(module.params['subject'], 'subject') self.subject = self.subject + parse_name_field(module.params['subject'], 'subject')
self.subject = [(entry[0], entry[1]) for entry in self.subject if entry[1]]
if module.params['subject_ordered']: if module.params['subject_ordered']:
if self.subject: if self.subject:
raise CertificateSigningRequestError('subject_ordered cannot be combined with any other subject field') raise CertificateSigningRequestError('subject_ordered cannot be combined with any other subject field')

View File

@ -239,23 +239,23 @@ def load_certificate_request(path, content=None, backend='cryptography'):
def parse_name_field(input_dict, name_field_name=None): def parse_name_field(input_dict, name_field_name=None):
"""Take a dict with key: value or key: list_of_values mappings and return a list of tuples""" """Take a dict with key: value or key: list_of_values mappings and return a list of tuples"""
error_str = '{key}' if name_field_name is None else '{key} in {name}'
result = [] result = []
for key, value in input_dict.items(): for key, value in input_dict.items():
if isinstance(value, list): if isinstance(value, list):
for entry in value: for entry in value:
if not isinstance(entry, six.string_types): if not isinstance(entry, six.string_types):
if name_field_name: raise TypeError(('Values %s must be strings' % error_str).format(key=key, name=name_field_name))
raise TypeError('Values for {key} in {name} must be strings'.format(key=key, name=name_field_name)) if not entry:
raise TypeError('Values for {key} must be strings'.format(key=key)) raise ValueError(('Values for %s must not be empty strings' % error_str).format(key=key))
result.append((key, entry)) result.append((key, entry))
elif isinstance(value, six.string_types): elif isinstance(value, six.string_types):
if not value:
raise ValueError(('Value for %s must not be an empty string' % error_str).format(key=key))
result.append((key, value)) result.append((key, value))
else: else:
if name_field_name: raise TypeError(('Value for %s must be either a string or a list of strings' % error_str).format(key=key))
raise TypeError(
'Value for {key} in {name} must be either a string or a list of strings'.format(key=key, name=name_field_name))
raise TypeError('Value for {key} must be either a string or a list of strings'.format(key=key))
return result return result

View File

@ -483,7 +483,6 @@ class CRL(OpenSSLObject):
else: else:
self.issuer_ordered = False self.issuer_ordered = False
self.issuer = parse_name_field(module.params['issuer'], 'issuer') self.issuer = parse_name_field(module.params['issuer'], 'issuer')
self.issuer = [(entry[0], entry[1]) for entry in self.issuer if entry[1]]
except (TypeError, ValueError) as exc: except (TypeError, ValueError) as exc:
module.fail_json(msg=to_native(exc)) module.fail_json(msg=to_native(exc))