diff --git a/plugins/module_utils/crypto/module_backends/csr.py b/plugins/module_utils/crypto/module_backends/csr.py index 7010a0fd..5acfea32 100644 --- a/plugins/module_utils/crypto/module_backends/csr.py +++ b/plugins/module_utils/crypto/module_backends/csr.py @@ -130,11 +130,11 @@ class CertificateSigningRequestBackend(object): ('CN', module.params['common_name']), ('emailAddress', module.params['email_address']), ] + self.subject = [(entry[0], entry[1]) for entry in self.subject if entry[1]] try: if module.params['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 self.subject: raise CertificateSigningRequestError('subject_ordered cannot be combined with any other subject field') diff --git a/plugins/module_utils/crypto/support.py b/plugins/module_utils/crypto/support.py index 08c40f53..5a265498 100644 --- a/plugins/module_utils/crypto/support.py +++ b/plugins/module_utils/crypto/support.py @@ -239,23 +239,23 @@ def load_certificate_request(path, content=None, backend='cryptography'): 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""" + error_str = '{key}' if name_field_name is None else '{key} in {name}' result = [] for key, value in input_dict.items(): if isinstance(value, list): for entry in value: if not isinstance(entry, six.string_types): - if name_field_name: - raise TypeError('Values for {key} in {name} must be strings'.format(key=key, name=name_field_name)) - raise TypeError('Values for {key} must be strings'.format(key=key)) + raise TypeError(('Values %s must be strings' % error_str).format(key=key, name=name_field_name)) + if not entry: + raise ValueError(('Values for %s must not be empty strings' % error_str).format(key=key)) result.append((key, entry)) 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)) else: - if name_field_name: - 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)) + raise TypeError(('Value for %s must be either a string or a list of strings' % error_str).format(key=key)) return result diff --git a/plugins/modules/x509_crl.py b/plugins/modules/x509_crl.py index d92075ed..714db997 100644 --- a/plugins/modules/x509_crl.py +++ b/plugins/modules/x509_crl.py @@ -483,7 +483,6 @@ class CRL(OpenSSLObject): else: self.issuer_ordered = False 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: module.fail_json(msg=to_native(exc))