BOOLEAN_encode_json(const struct asn_TYPE_descriptor_s *td, const void *sptr)
{
const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
-
- if (st == NULL)
- return json_null();
-
- return (*st) ? json_true() : json_false();
+ return (st != NULL) ? json_boolean(*st) : json_null();
}
asn_enc_rval_t
#include "asn1/asn1c/CMSAttribute.h"
+#include "json_util.h"
#include "asn1/asn1c/ContentType.h"
#include "asn1/asn1c/MessageDigest.h"
#include "asn1/asn1c/SigningTime.h"
if (!cattr)
return json_null();
- root = json_object();
+ root = json_obj_new();
if (root == NULL)
return NULL;
tmp = OBJECT_IDENTIFIER_encode_json(NULL, &cattr->attrType);
- if (json_object_set_new(root, "attrType", tmp))
+ if (json_object_add(root, "attrType", tmp))
goto fail;
- if (json_object_set_new(root, "attrValues", array = json_array()))
+ if (json_object_add(root, "attrValues", array = json_array_new()))
goto fail;
if (OBJECT_IDENTIFIER_is_ContentType(&cattr->attrType))
for (a = 0; a < cattr->attrValues.list.count; a++) {
tmp = attr2json(td, cattr->attrValues.list.array[a]);
- if (json_array_append_new(array, tmp))
+ if (json_array_add(array, tmp))
goto fail;
}
#include <openssl/x509v3.h>
#include <openssl/pem.h>
+
#include "extension.h"
+#include "json_util.h"
#include "libcrypto_util.h"
static json_t *
X509_REVOKED *rv;
int r;
- root = json_array();
+ root = json_array_new();
if (root == NULL)
return NULL;
for (r = 0; r < sk_X509_REVOKED_num(revokeds); r++) {
rv = sk_X509_REVOKED_value(revokeds, r);
- if (json_array_append_new(root, parent = json_object()))
+ if (json_array_add(root, parent = json_obj_new()))
goto fail;
child = asn1int2json(X509_REVOKED_get0_serialNumber(rv));
- if (json_object_set_new(parent, "userCertificate", child))
+ if (json_object_add(parent, "userCertificate", child))
goto fail;
child = asn1time2json(X509_REVOKED_get0_revocationDate(rv));
- if (json_object_set_new(parent, "revocationDate", child))
+ if (json_object_add(parent, "revocationDate", child))
goto fail;
child = exts2json(X509_REVOKED_get0_extensions(rv));
- if (json_object_set_new(parent, "crlEntryExtensions", child))
+ if (json_object_add(parent, "crlEntryExtensions", child))
goto fail;
}
json_t *parent;
json_t *child;
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
- child = json_integer(X509_CRL_get_version(crl));
- if (json_object_set_new(parent, "version", child))
+ child = json_int_new(X509_CRL_get_version(crl));
+ if (json_object_add(parent, "version", child))
goto fail;
- child = json_string(OBJ_nid2sn(X509_CRL_get_signature_nid(crl)));
- if (json_object_set_new(parent, "signature", child))
+ child = json_str_new(OBJ_nid2sn(X509_CRL_get_signature_nid(crl)));
+ if (json_object_add(parent, "signature", child))
goto fail;
child = name2json(X509_CRL_get_issuer(crl));
- if (json_object_set_new(parent, "issuer", child))
+ if (json_object_add(parent, "issuer", child))
goto fail;
child = asn1time2json(X509_CRL_get0_lastUpdate(crl));
- if (json_object_set_new(parent, "thisUpdate", child))
+ if (json_object_add(parent, "thisUpdate", child))
goto fail;
child = asn1time2json(X509_CRL_get0_nextUpdate(crl));
- if (json_object_set_new(parent, "nextUpdate", child))
+ if (json_object_add(parent, "nextUpdate", child))
goto fail;
child = revokedCerts2json(crl);
- if (json_object_set_new(parent, "revokedCertificates", child))
+ if (json_object_add(parent, "revokedCertificates", child))
goto fail;
child = exts2json(X509_CRL_get0_extensions(crl));
- if (json_object_set_new(parent, "crlExtensions", child))
+ if (json_object_add(parent, "crlExtensions", child))
goto fail;
return parent;
json_t *parent;
json_t *child;
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
child = tbsCertList2json(crl);
- if (json_object_set_new(parent, "tbsCertList", child))
+ if (json_object_add(parent, "tbsCertList", child))
goto fail;
child = sigAlgorithm2json(crl);
- if (json_object_set_new(parent, "signatureAlgorithm", child))
+ if (json_object_add(parent, "signatureAlgorithm", child))
goto fail;
child = sigValue2json(crl);
- if (json_object_set_new(parent, "signatureValue", child))
+ if (json_object_add(parent, "signatureValue", child))
goto fail;
return parent;
#include <openssl/x509v3.h>
#include <openssl/pem.h>
+
#include "extension.h"
+#include "json_util.h"
#include "libcrypto_util.h"
static json_t *
json_t *parent;
json_t *child;
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
child = asn1time2json(X509_get0_notBefore(x));
- if (json_object_set_new(parent, "notBefore", child))
+ if (json_object_add(parent, "notBefore", child))
goto fail;
child = asn1time2json(X509_get0_notAfter(x));
- if (json_object_set_new(parent, "notAfter", child))
+ if (json_object_add(parent, "notAfter", child))
goto fail;
return parent;
EVP_PKEY *pkey;
BIO *bio;
- root = json_object();
+ root = json_obj_new();
if (root == NULL)
return NULL;
BIO_free_all(bio);
goto fail;
}
- if (json_object_set_new(root, "algorithm", bio2json(bio)))
+ if (json_object_add(root, "algorithm", bio2json(bio)))
goto fail;
/* Actual pk */
BIO_free_all(bio);
goto fail;
}
- if (json_object_set_new(root, "subjectPublicKey", bio2json(bio)))
+ if (json_object_add(root, "subjectPublicKey", bio2json(bio)))
goto fail;
return root;
json_t *parent;
json_t *child;
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
- child = json_integer(X509_get_version(x));
- if (json_object_set_new(parent, "version", child))
+ child = json_int_new(X509_get_version(x));
+ if (json_object_add(parent, "version", child))
goto fail;
child = asn1int2json(X509_get0_serialNumber(x));
- if (json_object_set_new(parent, "serialNumber", child))
+ if (json_object_add(parent, "serialNumber", child))
goto fail;
- child = json_string(OBJ_nid2sn(X509_get_signature_nid(x)));
- if (json_object_set_new(parent, "signature", child))
+ child = json_str_new(OBJ_nid2sn(X509_get_signature_nid(x)));
+ if (json_object_add(parent, "signature", child))
goto fail;
child = name2json(X509_get_issuer_name(x));
- if (json_object_set_new(parent, "issuer", child))
+ if (json_object_add(parent, "issuer", child))
goto fail;
child = validity2json(x);
- if (json_object_set_new(parent, "validity", child))
+ if (json_object_add(parent, "validity", child))
goto fail;
child = name2json(X509_get_subject_name(x));
- if (json_object_set_new(parent, "subject", child))
+ if (json_object_add(parent, "subject", child))
goto fail;
child = pk2json(x);
- if (json_object_set_new(parent, "subjectPublicKeyInfo", child))
+ if (json_object_add(parent, "subjectPublicKeyInfo", child))
goto fail;
child = iuid2json(x);
- if (json_object_set_new(parent, "issuerUniqueID", child))
+ if (json_object_add(parent, "issuerUniqueID", child))
goto fail;
child = suid2json(x);
- if (json_object_set_new(parent, "subjectUniqueID", child))
+ if (json_object_add(parent, "subjectUniqueID", child))
goto fail;
child = exts2json(X509_get0_extensions(x));
- if (json_object_set_new(parent, "extensions", child))
+ if (json_object_add(parent, "extensions", child))
goto fail;
return parent;
json_t *parent;
json_t *child;
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
child = tbsCert2json(x);
- if (json_object_set_new(parent, "tbsCertificate", child))
+ if (json_object_add(parent, "tbsCertificate", child))
goto fail;
child = sigAlgorithm2json(x);
- if (json_object_set_new(parent, "signatureAlgorithm", child))
+ if (json_object_add(parent, "signatureAlgorithm", child))
goto fail;
child = sigValue2json(x);
- if (json_object_set_new(parent, "signatureValue", child))
+ if (json_object_add(parent, "signatureValue", child))
goto fail;
return parent;
*/
#include "asn1/asn1c/CertificateSet.h"
+
+#include "json_util.h"
#include "asn1/asn1c/Certificate.h"
static json_t *
if (!sptr)
return json_null();
- parent = json_array();
+ parent = json_array_new();
if (parent == NULL)
return NULL;
for (i = 0; i < list->count; i++) {
child = Certificate_any2json(list->array[i]);
- if (json_array_append_new(parent, child))
+ if (json_array_add(parent, child))
goto fail;
}
#include "asn1/asn1c/ContentInfo.h"
+#include "json_util.h"
#include "asn1/asn1c/SignedData.h"
json_t *
if (!ci)
return json_null();
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
td = &asn_DEF_ContentType;
child = td->op->json_encoder(td, &ci->contentType);
- if (json_object_set_new(parent, "contentType", child))
+ if (json_object_add(parent, "contentType", child))
goto fail;
if (OBJECT_IDENTIFIER_is_SignedData(&ci->contentType)) {
td = &asn_DEF_ANY;
child = td->op->json_encoder(td, &ci->content);
}
- if (json_object_set_new(parent, "content", child))
+ if (json_object_add(parent, "content", child))
goto fail;
return parent;
#include "asn1/asn1c/EncapsulatedContentInfo.h"
+#include "json_util.h"
#include "asn1/asn1c/Manifest.h"
#include "asn1/asn1c/RouteOriginAttestation.h"
if (!eci)
return json_null();
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
td = &asn_DEF_ContentType;
child = td->op->json_encoder(td, &eci->eContentType);
- if (json_object_set_new(parent, "eContentType", child))
+ if (json_object_add(parent, "eContentType", child))
goto fail;
if (OBJECT_IDENTIFIER_is_mft(&eci->eContentType)) {
td = &asn_DEF_OCTET_STRING;
child = td->op->json_encoder(td, eci->eContent);
}
- if (json_object_set_new(parent, "eContent", child))
+ if (json_object_add(parent, "eContent", child))
goto fail;
return parent;
#include <assert.h>
#include <errno.h>
+#include "json_util.h"
#define ATZVARS do { \
char tzoldbuf[64]; \
if (GeneralizedTime2str(st, buf) < 0)
return NULL;
- return json_string(buf);
+ return json_str_new(buf);
}
#ifndef ASN___INTERNAL_TEST_MODE
*/
#include "asn1/asn1c/asn_internal.h"
#include "asn1/asn1c/INTEGER.h"
-#include "asn1/asn1c/asn_codecs_prim.h" /* Encoder and decoder of a primitive type */
+
#include <assert.h>
#include <errno.h>
+#include "json_util.h"
+#include "asn1/asn1c/asn_codecs_prim.h" /* Encoder and decoder of a primitive type */
+
/*
* INTEGER basic type description.
*/
if (specs && specs->field_unsigned) {
if (asn_INTEGER2umax(st, &uint) < 0)
return NULL;
- return json_integer(uint);
+ return json_int_new(uint);
} else {
if (asn_INTEGER2imax(st, &sint) < 0)
return NULL;
- return json_integer(sint);
+ return json_int_new(sint);
}
}
*/
#include "asn1/asn1c/asn_internal.h"
-#include "asn1/asn1c/INTEGER.h"
#include "asn1/asn1c/OBJECT_IDENTIFIER.h"
-#include "asn1/asn1c/OCTET_STRING.h"
+
#include <assert.h>
#include <errno.h>
+#include "json_util.h"
+#include "asn1/asn1c/INTEGER.h"
+#include "asn1/asn1c/OCTET_STRING.h"
+
/*
* OBJECT IDENTIFIER basic type description.
*/
char const *string;
string = OBJECT_IDENTIFIER_to_string(oid, buf);
- return (string != NULL) ? json_string(string) : NULL;
+ return (string != NULL) ? json_str_new(string) : NULL;
}
ssize_t
*/
#include "asn1/asn1c/asn_internal.h"
#include "asn1/asn1c/OCTET_STRING.h"
-#include "asn1/asn1c/BIT_STRING.h" /* for .bits_unused member */
+
#include <assert.h>
#include <errno.h>
#include "alloc.h"
+#include "json_util.h"
+#include "asn1/asn1c/BIT_STRING.h" /* for .bits_unused member */
/*
* OCTET STRING basic type description.
*r++ = H2C[(*buf ) & 0x0F];
}
- json = json_stringn(result, 2 * os->size);
+ json = json_strn_new(result, 2 * os->size);
free(result);
return json;
const void *sptr)
{
const OCTET_STRING_t *os = sptr;
- return json_stringn((char const *) os->buf, os->size);
+ return json_strn_new((char const *) os->buf, os->size);
}
asn_enc_rval_t
#include "asn1/asn1c/ROAIPAddressFamily.h"
+#include "json_util.h"
#include "types/address.h"
static json_t *
{
json_t *root;
- root = json_object();
+ root = json_obj_new();
if (root == NULL)
return NULL;
- if (json_object_set_new(root, "prefix", json_string(prefix)))
+ if (json_object_add(root, "prefix", json_str_new(prefix)))
goto fail;
- if (json_object_set_new(root, "length", json_integer(length)))
+ if (json_object_add(root, "length", json_int_new(length)))
goto fail;
return root;
struct ROAIPAddress *src;
int i;
- root = json_object();
+ root = json_obj_new();
if (root == NULL)
return NULL;
- if (json_object_set_new(root, "addressFamily", json_string(ipname)))
+ if (json_object_add(root, "addressFamily", json_str_new(ipname)))
goto fail;
- if (json_object_set_new(root, "addresses", addrs = json_array()))
+ if (json_object_add(root, "addresses", addrs = json_array_new()))
goto fail;
for (i = 0; i < riaf->addresses.list.count; i++) {
src = riaf->addresses.list.array[i];
pfx = pref2json(src);
- if (json_array_append_new(addrs, pfx))
+ if (json_array_add(addrs, pfx))
goto fail;
maxlen = asn_DEF_INTEGER.op->json_encoder(&asn_DEF_INTEGER,
src->maxLength);
- if (json_object_set_new(pfx, "maxLength", maxlen))
+ if (json_object_add(pfx, "maxLength", maxlen))
goto fail;
}
#include "asn1/asn1c/asn_internal.h"
#include "asn1/asn1c/UTCTime.h"
-#include "asn1/asn1c/GeneralizedTime.h"
#include <assert.h>
#include <errno.h>
+#include "json_util.h"
+#include "asn1/asn1c/GeneralizedTime.h"
+
#ifndef ASN___INTERNAL_TEST_MODE
/*
if (UTCTime2str(st, buf) < 0)
return NULL;
- return json_string(buf);
+ return json_str_new(buf);
}
time_t
* Redistribution and modifications are permitted subject to BSD license.
*/
-#include <assert.h>
-
#include "asn1/asn1c/asn_internal.h"
#include "asn1/asn1c/constr_SEQUENCE.h"
+
+#include <assert.h>
+#include "json_util.h"
#include "asn1/asn1c/OPEN_TYPE.h"
/*
if (!sptr)
return json_null();
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
}
child = elm->type->op->json_encoder(elm->type, memb_ptr);
- if (json_object_set_new(parent, elm->name, child))
+ if (json_object_add(parent, elm->name, child))
goto fail;
}
* Redistribution and modifications are permitted subject to BSD license.
*/
-#include <assert.h>
-
#include "asn1/asn1c/asn_internal.h"
#include "asn1/asn1c/constr_SET_OF.h"
+
+#include <assert.h>
+#include "json_util.h"
#include "asn1/asn1c/asn_SET_OF.h"
/*
if (!sptr)
return json_null();
- parent = json_array();
+ parent = json_array_new();
if (parent == NULL)
return NULL;
for (i = 0; i < list->count; i++) {
child = type->op->json_encoder(type, list->array[i]);
- if (json_array_append_new(parent, child))
+ if (json_array_add(parent, child))
goto fail;
}
{
json_t *json;
- json = json_object();
- if (json == NULL) {
- pr_op_err("json object allocation failure.");
+ json = json_obj_new();
+ if (json == NULL)
return NULL;
- }
if (json_add_str(json, TAGNAME_URL, uri_get_global(node->url)))
goto cancel;
struct cache_node *node, *tmp;
json_t *root, *child;
- root = json_array();
+ root = json_array_new();
if (root == NULL)
- enomem_panic();
+ return NULL;
HASH_ITER(hh, cache->ht, node, tmp) {
child = node2json(node);
- if (json_array_append_new(root, child)) {
+ if (child != NULL && json_array_append_new(root, child)) {
pr_op_err("Cannot push %s json node into json root; unknown cause.",
uri_op_get_printable(node->url));
continue;
struct json_t *json;
json = build_tal_json(cache);
- if (json == NULL)
+ if (json == NULL) {
+ pr_op_err("Unable to cache TAL's metadata; JSON conversion failed.");
return;
+ }
filename = get_tal_json_filename(cache);
if (filename == NULL)
#include <openssl/asn1t.h>
#include <openssl/objects.h>
#include <openssl/x509v3.h>
+
#include "cert_stack.h"
#include "common.h"
+#include "json_util.h"
#include "libcrypto_util.h"
#include "log.h"
#include "nid.h"
static json_t *
unimplemented(void const *arg)
{
- return arg ? json_string("<Not implemented for now>") : json_null();
+ return arg ? json_str_new("<Not implemented for now>") : json_null();
}
static json_t *
json_t *parent;
json_t *child;
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
child = json_boolean(bc->ca);
- if (json_object_set_new(parent, "cA", child))
+ if (json_object_add(parent, "cA", child))
goto fail;
child = asn1int2json(bc->pathlen);
- if (json_object_set_new(parent, "pathLenConstraint", child))
+ if (json_object_add(parent, "pathLenConstraint", child))
goto fail;
return parent;
json_t *parent;
json_t *child;
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
child = asn1str2json(aki->keyid);
- if (json_object_set_new(parent, "keyIdentifier", child))
+ if (json_object_add(parent, "keyIdentifier", child))
goto fail;
child = unimplemented(aki->issuer);
- if (json_object_set_new(parent, "authorityCertIssuer", child))
+ if (json_object_add(parent, "authorityCertIssuer", child))
goto fail;
child = asn1int2json(aki->serial);
- if (json_object_set_new(parent, "authorityCertSerialNumber", child))
+ if (json_object_add(parent, "authorityCertSerialNumber", child))
goto fail;
return parent;
memset(data, 0, sizeof(data));
memcpy(data, ku->data, ku->length);
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
child = json_boolean(data[0] & 0x80u);
- if (json_object_set_new(parent, "digitalSignature", child))
+ if (json_object_add(parent, "digitalSignature", child))
goto fail;
child = json_boolean(data[0] & 0x40u);
- if (json_object_set_new(parent, "contentCommitment", child))
+ if (json_object_add(parent, "contentCommitment", child))
goto fail;
child = json_boolean(data[0] & 0x20u);
- if (json_object_set_new(parent, "keyEncipherment", child))
+ if (json_object_add(parent, "keyEncipherment", child))
goto fail;
child = json_boolean(data[0] & 0x10u);
- if (json_object_set_new(parent, "dataEncipherment", child))
+ if (json_object_add(parent, "dataEncipherment", child))
goto fail;
child = json_boolean(data[0] & 0x08u);
- if (json_object_set_new(parent, "keyAgreement", child))
+ if (json_object_add(parent, "keyAgreement", child))
goto fail;
child = json_boolean(data[0] & 0x04u);
- if (json_object_set_new(parent, "keyCertSign", child))
+ if (json_object_add(parent, "keyCertSign", child))
goto fail;
child = json_boolean(data[0] & 0x02u);
- if (json_object_set_new(parent, "cRLSign", child))
+ if (json_object_add(parent, "cRLSign", child))
goto fail;
child = json_boolean(data[0] & 0x01u);
- if (json_object_set_new(parent, "encipherOnly", child))
+ if (json_object_add(parent, "encipherOnly", child))
goto fail;
child = json_boolean(data[1] & 0x80u);
- if (json_object_set_new(parent, "decipherOnly", child))
+ if (json_object_add(parent, "decipherOnly", child))
goto fail;
return parent;
X509_NAME_ENTRY *name;
int n;
- root = json_array();
+ root = json_array_new();
if (root == NULL)
return NULL;
for (n = 0; n < sk_X509_NAME_ENTRY_num(rdn); n++) {
name = sk_X509_NAME_ENTRY_value(rdn, n);
- if (json_array_append_new(root, parent = json_object()))
+ if (json_array_add(root, parent = json_obj_new()))
goto fail;
child = oid2json(X509_NAME_ENTRY_get_object(name));
- if (json_object_set_new(parent, "type", child))
+ if (json_object_add(parent, "type", child))
goto fail;
child = asn1str2json(X509_NAME_ENTRY_get_data(name));
- if (json_object_set_new(parent, "value", child))
+ if (json_object_add(parent, "value", child))
goto fail;
}
DIST_POINT *dp;
int d;
- root = json_array();
+ root = json_array_new();
if (root == NULL)
return NULL;
for (d = 0; d < sk_DIST_POINT_num(crldp); d++) {
dp = sk_DIST_POINT_value(crldp, d);
- if (json_array_append_new(root, parent = json_object()))
+ if (json_array_add(root, parent = json_obj_new()))
goto fail;
child = dpname2json(dp->distpoint);
- if (json_object_set_new(parent, "distributionPoint", child))
+ if (json_object_add(parent, "distributionPoint", child))
goto fail;
child = unimplemented(dp->reasons);
- if (json_object_set_new(parent, "reasons", child))
+ if (json_object_add(parent, "reasons", child))
goto fail;
child = gns2json(dp->CRLissuer);
- if (json_object_set_new(parent, "cRLIssuer", child))
+ if (json_object_add(parent, "cRLIssuer", child))
goto fail;
}
json_t *child;
int i;
- root = json_array();
+ root = json_array_new();
if (root == NULL)
return NULL;
for (i = 0; i < sk_ACCESS_DESCRIPTION_num(ia); i++) {
ad = sk_ACCESS_DESCRIPTION_value(ia, i);
- if (json_array_append_new(root, parent = json_object()))
+ if (json_array_add(root, parent = json_obj_new()))
goto fail;
child = oid2json(ad->method);
- if (json_object_set_new(parent, "accessMethod", child))
+ if (json_object_add(parent, "accessMethod", child))
goto fail;
child = gn2json(ad->location);
- if (json_object_set_new(parent, "accessLocation", child))
+ if (json_object_add(parent, "accessLocation", child))
goto fail;
}
if (pqi == NULL)
return json_null();
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
child = oid2json(pqi->pqualid);
- if (json_object_set_new(parent, "policyQualifierId", child))
+ if (json_object_add(parent, "policyQualifierId", child))
goto fail;
child = unimplemented(&pqi->d);
- if (json_object_set_new(parent, "qualifier", child))
+ if (json_object_add(parent, "qualifier", child))
goto fail;
return NULL;
if (pqs == NULL)
return json_null();
- parent = json_array();
+ parent = json_array_new();
if (parent == NULL)
return NULL;
for (i = 0; i < sk_POLICYQUALINFO_num(pqs); i++) {
child = pq2json(sk_POLICYQUALINFO_value(pqs, i));
- if (json_array_append_new(parent, child))
+ if (json_array_add(parent, child))
goto fail;
}
if (pi == NULL)
return json_null();
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
child = oid2json(pi->policyid);
- if (json_object_set_new(parent, "policyIdentifier", child))
+ if (json_object_add(parent, "policyIdentifier", child))
goto fail;
child = pqs2json(pi->qualifiers);
- if (json_object_set_new(parent, "policyQualifiers", child))
+ if (json_object_add(parent, "policyQualifiers", child))
goto fail;
return parent;
json_t *child;
int i;
- parent = json_array();
+ parent = json_array_new();
if (parent == NULL)
return NULL;
for (i = 0; i < sk_POLICYINFO_num(cp); i++) {
child = pi2json(sk_POLICYINFO_value(cp, i));
- if (json_array_append_new(parent, child))
+ if (json_array_add(parent, child))
goto fail;
}
length -= ap->flags & 7;
written = snprintf(full, INET6_ADDRSTRLEN + 4, "%s/%u", str, length);
- return json_stringn(full, written);
+ return json_strn_new(full, written);
}
static json_t *
if (iaor == NULL)
return json_null();
- parent = json_array();
+ parent = json_array_new();
if (parent == NULL)
return NULL;
for (i = 0; i < sk_IPAddressOrRange_num(iaor); i++) {
child = iaor2json(sk_IPAddressOrRange_value(iaor, i), af);
- if (json_array_append_new(parent, child))
+ if (json_array_add(parent, child))
goto fail;
}
switch (iac->type) {
case IPAddressChoice_inherit:
- return json_string("inherit");
+ return json_str_new("inherit");
case IPAddressChoice_addressesOrRanges:
return iaors2json(iac->u.addressesOrRanges, af);
}
if (iaf == NULL)
return json_null();
- parent = json_object();
+ parent = json_obj_new();
if (parent == NULL)
return NULL;
goto fail;
}
- child = json_string(family);
- if (json_object_set_new(parent, "addressFamily", child))
+ child = json_str_new(family);
+ if (json_object_add(parent, "addressFamily", child))
goto fail;
child = iac2json(iaf->ipAddressChoice, afid);
- if (json_object_set_new(parent, "ipAddressChoice", child))
+ if (json_object_add(parent, "ipAddressChoice", child))
goto fail;
return parent;
json_t *child;
int i;
- parent = json_array();
+ parent = json_array_new();
if (parent == NULL)
return NULL;
for (i = 0; i < sk_IPAddressFamily_num(iafs); i++) {
child = iaf2json(sk_IPAddressFamily_value(iafs, i));
- if (json_array_append_new(parent, child))
+ if (json_array_add(parent, child))
goto fail;
}
if (range == NULL)
return json_null();
- root = json_object();
+ root = json_obj_new();
if (root == NULL)
return NULL;
- if (json_object_set_new(root, "min", asn1int2json(range->min)))
+ if (json_object_add(root, "min", asn1int2json(range->min)))
goto fail;
- if (json_object_set_new(root, "max", asn1int2json(range->max)))
+ if (json_object_add(root, "max", asn1int2json(range->max)))
goto fail;
return root;
if (aior == NULL)
return json_null();
- parent = json_array();
+ parent = json_array_new();
if (parent == NULL)
return NULL;
for (i = 0; i < sk_ASIdOrRange_num(aior); i++) {
child = aor2json(sk_ASIdOrRange_value(aior, i));
- if (json_array_append_new(parent, child))
+ if (json_array_add(parent, child))
goto fail;
}
return parent;
switch (asidc->type) {
case ASIdentifierChoice_inherit:
- return json_string("inherit");
+ return json_str_new("inherit");
case ASIdentifierChoice_asIdsOrRanges:
return aior2json(asidc->u.asIdsOrRanges);
}
if (asid == NULL)
return json_null();
- root = json_object();
+ root = json_obj_new();
if (root == NULL)
return NULL;
- if (json_object_set_new(root, "asnum", asidc2json(asid->asnum)))
+ if (json_object_add(root, "asnum", asidc2json(asid->asnum)))
goto fail;
- if (json_object_set_new(root, "rdi", asidc2json(asid->rdi)))
+ if (json_object_add(root, "rdi", asidc2json(asid->rdi)))
goto fail;
return root;
json_t *child;
int i;
- parent = json_array();
+ parent = json_array_new();
if (parent == NULL)
return parent;
for (i = 0; i < sk_ASN1_OBJECT_num(eku); i++) {
child = oid2json(sk_ASN1_OBJECT_value(eku, i));
- if (json_array_append_new(parent, child))
+ if (json_array_add(parent, child))
goto fail;
}
return 0;
}
+
+#define OOM_PFX " Likely out of memory (but there is no contract)."
+
+json_t *
+json_obj_new(void)
+{
+ json_t *json = json_object();
+ if (json == NULL)
+ pr_op_err_st("Cannot create JSON object." OOM_PFX);
+ return json;
+}
+
+json_t *
+json_array_new(void)
+{
+ json_t *json = json_array();
+ if (json == NULL)
+ pr_op_err_st("Cannot create JSON array." OOM_PFX);
+ return json;
+}
+
+json_t *
+json_int_new(json_int_t value)
+{
+ json_t *json = json_integer(value);
+ if (json == NULL)
+ pr_op_err_st("Cannot create JSON integer '%lld'."
+ OOM_PFX, value);
+ return json;
+}
+
+json_t *
+json_str_new(const char *value)
+{
+ json_t *json = json_string(value);
+ if (json == NULL)
+ pr_op_err_st("Cannot create JSON string '%s'." OOM_PFX, value);
+ return json;
+}
+
+json_t *
+json_strn_new(const char *value, size_t len)
+{
+ json_t *json = json_stringn(value, len);
+ if (json == NULL)
+ pr_op_err_st("Cannot create JSON string '%.*s'."
+ OOM_PFX, (int)len, value);
+ return json;
+}
+
+int
+json_object_add(json_t *parent, char const *name, json_t *value)
+{
+ int res;
+
+ if (value == NULL)
+ return -1; /* Already messaged */
+
+ res = json_object_set_new(parent, name, value);
+ if (res == -1)
+ pr_op_err_st("Cannot add JSON '%s' to parent; unknown error.",
+ name);
+ return res;
+}
+
+int
+json_array_add(json_t *array, json_t *node)
+{
+ int res;
+
+ if (node == NULL)
+ return -1; /* Already messaged */
+
+ res = json_array_append_new(array, node);
+ if (res == -1)
+ pr_op_err_st("Cannot add JSON node to array; unknown error.");
+ return res;
+}
int json_add_str(json_t *, char const *, char const *);
int json_add_ts(json_t *, char const *, time_t);
+json_t *json_obj_new(void);
+json_t *json_array_new(void);
+json_t *json_int_new(json_int_t);
+json_t *json_str_new(const char *);
+json_t *json_strn_new(const char *, size_t);
+int json_object_add(json_t *, char const *, json_t *);
+int json_array_add(json_t *, json_t *);
+
#endif /* SRC_JSON_UTIL_H_ */
#include "alloc.h"
#include "extension.h"
+#include "json_util.h"
/* Swallows @bio. */
char *
json_t *json;
json = (BIO_get_mem_ptr(bio, &buffer) > 0)
- ? json_stringn(buffer->data, buffer->length)
+ ? json_strn_new(buffer->data, buffer->length)
: NULL;
BIO_free_all(bio);
json_t *
oid2json(ASN1_OBJECT const *oid)
{
- return oid ? json_string(OBJ_nid2sn(OBJ_obj2nid(oid))) : json_null();
+ return oid ? json_str_new(OBJ_nid2sn(OBJ_obj2nid(oid))) : json_null();
}
json_t *
bignum = ASN1_INTEGER_to_BN(asn1int, NULL);
str = BN_bn2hex(bignum);
- json = json_string(str);
+ json = json_str_new(str);
OPENSSL_free(str);
BN_free(bignum);
if (name == NULL)
return json_null();
- root = json_object();
+ root = json_obj_new();
if (root == NULL)
return NULL;
- if (json_object_set_new(root, "rdnSequence", rdnSeq = json_array()))
+ if (json_object_add(root, "rdnSequence", rdnSeq = json_array_new()))
goto fail;
for (i = 0; i < X509_NAME_entry_count(name); i++) {
- if (json_array_append_new(rdnSeq, typeval = json_object()))
+ if (json_array_add(rdnSeq, typeval = json_obj_new()))
goto fail;
entry = X509_NAME_get_entry(name, i);
nid = OBJ_obj2nid(X509_NAME_ENTRY_get_object(entry));
data = X509_NAME_ENTRY_get_data(entry);
- child = json_string(OBJ_nid2ln(nid));
- if (json_object_set_new(typeval, "type", child))
+ child = json_str_new(OBJ_nid2ln(nid));
+ if (json_object_add(typeval, "type", child))
goto fail;
- child = json_stringn((char *)data->data, data->length);
- if (json_object_set_new(typeval, "value", child))
+ child = json_strn_new((char *)data->data, data->length);
+ if (json_object_add(typeval, "value", child))
goto fail;
}
str = GENERAL_NAME_get0_value(gn, &type);
return (type == GEN_URI)
- ? json_stringn((char const *)str->data, str->length)
- : json_string("<Not implemented for now>");
+ ? json_strn_new((char const *)str->data, str->length)
+ : json_str_new("<Not implemented for now>");
}
json_t *
if (gns == NULL)
return json_null();
- parent = json_array();
+ parent = json_array_new();
if (parent == NULL)
return NULL;
for (n = 0; n < sk_GENERAL_NAME_num(gns); n++) {
child = gn2json(sk_GENERAL_NAME_value(gns, n));
- if (json_array_append_new(parent, child))
+ if (json_array_add(parent, child))
goto fail;
}
if (sk_X509_EXTENSION_num(exts) <= 0)
return json_null();
- root = json_array();
+ root = json_array_new();
if (root == NULL)
return NULL;
for (i = 0; i < sk_X509_EXTENSION_num(exts); i++) {
- if (json_array_append_new(root, parent = json_object()))
+ if (json_array_add(root, parent = json_obj_new()))
goto fail;
ex = sk_X509_EXTENSION_value(exts, i);
}
name = bio2str(bio);
- child = json_string(name);
+ child = json_str_new(name);
free(name);
- if (json_object_set_new(parent, "extnID", child))
+ if (json_object_add(parent, "extnID", child))
goto fail;
child = json_boolean(X509_EXTENSION_get_critical(ex));
- if (json_object_set_new(parent, "critical", child))
+ if (json_object_add(parent, "critical", child))
goto fail;
child = ext2json(ex);
- if (json_object_set_new(parent, "extnValue", child))
+ if (json_object_add(parent, "extnValue", child))
goto fail;
}