]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Log decoding errors only when requested
authorpcarana <pc.moreno2099@gmail.com>
Wed, 29 May 2019 20:11:05 +0000 (15:11 -0500)
committerpcarana <pc.moreno2099@gmail.com>
Wed, 29 May 2019 20:11:05 +0000 (15:11 -0500)
src/asn1/content_info.c
src/asn1/decode.c
src/asn1/decode.h
src/asn1/signed_data.c
src/object/certificate.c
src/object/manifest.c
src/object/roa.c

index 8489b869a2b9da6568a4548ff42d64cdebada984..31e659b3da930f9a3742ac5c964b745f6c2e1657 100644 (file)
@@ -33,7 +33,8 @@ decode(struct file_contents *fc, struct ContentInfo **result)
        struct ContentInfo *cinfo;
        int error;
 
-       error = asn1_decode_fc(fc, &asn_DEF_ContentInfo, (void **) &cinfo);
+       error = asn1_decode_fc(fc, &asn_DEF_ContentInfo, (void **) &cinfo,
+           true);
        if (error)
                return error;
 
index e7adb5ebd8156d7169f7624dbc037fa09701f957..a3ed71723ceff516fbe6d840dc25be0db41620ed 100644 (file)
@@ -5,7 +5,7 @@
 #include "log.h"
 
 static int
-validate(asn_TYPE_descriptor_t const *descriptor, void *result)
+validate(asn_TYPE_descriptor_t const *descriptor, void *result, bool log)
 {
        char error_msg[256];
        size_t error_msg_size;
@@ -16,14 +16,16 @@ validate(asn_TYPE_descriptor_t const *descriptor, void *result)
        error = asn_check_constraints(descriptor, result, error_msg,
            &error_msg_size);
        if (error == -1)
-               return pr_err("Error validating ASN.1 object: %s", error_msg);
+               return log ?
+                   pr_err("Error validating ASN.1 object: %s", error_msg) :
+                   -EINVAL;
 
        return 0;
 }
 
 int
 asn1_decode(const void *buffer, size_t buffer_size,
-    asn_TYPE_descriptor_t const *descriptor, void **result)
+    asn_TYPE_descriptor_t const *descriptor, void **result, bool log)
 {
        asn_dec_rval_t rval;
        int error;
@@ -36,11 +38,13 @@ asn1_decode(const void *buffer, size_t buffer_size,
                /* Must free partial object according to API contracts. */
                ASN_STRUCT_FREE(*descriptor, *result);
                /* We expect the data to be complete; RC_WMORE is an error. */
-               return pr_err("Error '%u' decoding ASN.1 object around byte %zu",
-                   rval.code, rval.consumed);
+               return log ?
+                   pr_err("Error '%u' decoding ASN.1 object around byte %zu",
+                       rval.code, rval.consumed) :
+                   -EINVAL;
        }
 
-       error = validate(descriptor, *result);
+       error = validate(descriptor, *result, log);
        if (error) {
                ASN_STRUCT_FREE(*descriptor, *result);
                return error;
@@ -51,16 +55,16 @@ asn1_decode(const void *buffer, size_t buffer_size,
 
 int
 asn1_decode_any(ANY_t *any, asn_TYPE_descriptor_t const *descriptor,
-    void **result)
+    void **result, bool log)
 {
-       return asn1_decode(any->buf, any->size, descriptor, result);
+       return asn1_decode(any->buf, any->size, descriptor, result, log);
 }
 
 int
 asn1_decode_octet_string(OCTET_STRING_t *string,
-    asn_TYPE_descriptor_t const *descriptor, void **result)
+    asn_TYPE_descriptor_t const *descriptor, void **result, bool log)
 {
-       return asn1_decode(string->buf, string->size, descriptor, result);
+       return asn1_decode(string->buf, string->size, descriptor, result, log);
 }
 
 /*
@@ -70,7 +74,8 @@ asn1_decode_octet_string(OCTET_STRING_t *string,
  */
 int
 asn1_decode_fc(struct file_contents *fc,
-    asn_TYPE_descriptor_t const *descriptor, void **result)
+    asn_TYPE_descriptor_t const *descriptor, void **result, bool log)
 {
-       return asn1_decode(fc->buffer, fc->buffer_size, descriptor, result);
+       return asn1_decode(fc->buffer, fc->buffer_size, descriptor, result,
+           log);
 }
index e20f878d86bf52b7f67549d871a4504ab203d7a5..fd1754ce3bcabc65495e9d6b919c57e50f966c93 100644 (file)
@@ -3,13 +3,15 @@
 
 #include <libcmscodec/ANY.h>
 #include <libcmscodec/constr_TYPE.h>
+#include <stdbool.h>
 #include "file.h"
 
-int asn1_decode(const void *, size_t, asn_TYPE_descriptor_t const *, void **);
-int asn1_decode_any(ANY_t *, asn_TYPE_descriptor_t const *, void **);
+int asn1_decode(const void *, size_t, asn_TYPE_descriptor_t const *, void **,
+    bool);
+int asn1_decode_any(ANY_t *, asn_TYPE_descriptor_t const *, void **, bool);
 int asn1_decode_octet_string(OCTET_STRING_t *, asn_TYPE_descriptor_t const *,
-    void **);
+    void **, bool);
 int asn1_decode_fc(struct file_contents *, asn_TYPE_descriptor_t const *,
-    void **);
+    void **, bool);
 
 #endif /* SRC_ASN1_DECODE_H_ */
index aa549da43a0fcb71df4592ec142c0d2a4e88d4e5..b346814c1155d6812965fa1f2d7a6ade14cfb7bb 100644 (file)
@@ -128,7 +128,7 @@ validate_content_type_attribute(CMSAttributeValue_t *value,
        int error;
 
        error = asn1_decode_any(value, &asn_DEF_OBJECT_IDENTIFIER,
-           (void **) &attrValues);
+           (void **) &attrValues, true);
        if (error)
                return error;
        eContentType = &eci->eContentType;
@@ -151,7 +151,7 @@ validate_message_digest_attribute(CMSAttributeValue_t *value,
                return pr_err("There's no content being signed.");
 
        error = asn1_decode_any(value, &asn_DEF_MessageDigest,
-           (void **) &digest);
+           (void **) &digest, true);
        if (error)
                return error;
 
@@ -404,7 +404,7 @@ signed_data_decode_pkcs7(ANY_t *coded, struct SignedData **result)
        int error;
 
        error = asn1_decode_any(coded, &asn_DEF_SignedDataPKCS7,
-           (void **) &sdata_pkcs7);
+           (void **) &sdata_pkcs7, true);
        if (error)
                return error;
 
@@ -417,7 +417,7 @@ signed_data_decode_pkcs7(ANY_t *coded, struct SignedData **result)
        /* Parse content as OCTET STRING */
        error = asn1_decode_any(sdata_pkcs7->encapContentInfo.eContent,
            &asn_DEF_ContentTypePKCS7,
-           (void **) &sdata->encapContentInfo.eContent);
+           (void **) &sdata->encapContentInfo.eContent, true);
        if (error)
                goto release_sdata;
 
@@ -453,7 +453,8 @@ signed_data_decode(ANY_t *coded, struct signed_object_args *args,
 
        /* rfc6488#section-3.1.l */
        /* TODO (next iteration) this is BER, not guaranteed to be DER. */
-       error = asn1_decode_any(coded, &asn_DEF_SignedData, (void **) &sdata);
+       error = asn1_decode_any(coded, &asn_DEF_SignedData, (void **) &sdata,
+           false);
        if (error) {
                /* Try to decode as PKCS content (RFC 5652 section 5.2.1) */
                error = signed_data_decode_pkcs7(coded, &sdata);
@@ -515,7 +516,7 @@ get_content_type_attr(struct SignedData *sdata, OBJECT_IDENTIFIER_t **result)
                                return -EINVAL;
                        return asn1_decode_any(attr->attrValues.list.array[0],
                            &asn_DEF_OBJECT_IDENTIFIER,
-                           (void **) result);
+                           (void **) result, true);
                }
        }
 
index 7f6b53c2d2d0f2ddfc304cacef287a4dbf07f7e2..91b86ffb81398103b6268f24baf93b888772e55a 100644 (file)
@@ -694,7 +694,7 @@ handle_ip_extension(X509_EXTENSION *ext, struct resources *resources)
 
        string = X509_EXTENSION_get_data(ext);
        error = asn1_decode(string->data, string->length, &asn_DEF_IPAddrBlocks,
-           (void **) &blocks);
+           (void **) &blocks, true);
        if (error)
                return error;
 
@@ -741,7 +741,7 @@ handle_asn_extension(X509_EXTENSION *ext, struct resources *resources)
 
        string = X509_EXTENSION_get_data(ext);
        error = asn1_decode(string->data, string->length,
-           &asn_DEF_ASIdentifiers, (void **) &ids);
+           &asn_DEF_ASIdentifiers, (void **) &ids, true);
        if (error)
                return error;
 
index 7d2d7753eae11b9ba6ca7478abf6116be5fba309..39f80858d8ae51c4a39dd3636c80d634bd3ae6ea 100644 (file)
@@ -23,7 +23,7 @@ struct manifest {
 static int
 manifest_decode(OCTET_STRING_t *string, void *arg)
 {
-       return asn1_decode_octet_string(string, &asn_DEF_Manifest, arg);
+       return asn1_decode_octet_string(string, &asn_DEF_Manifest, arg, true);
 }
 
 static int
index 8e04fad79f4ae23ac292ec71dd8f7cb2e1c2ca1d..42e7de6fe43ef094b5b18f44a4adf990f85c2027 100644 (file)
@@ -16,7 +16,7 @@ static int
 roa_decode(OCTET_STRING_t *string, void *arg)
 {
        return asn1_decode_octet_string(string, &asn_DEF_RouteOriginAttestation,
-           arg);
+           arg, true);
 }
 
 static int