Exemple #1
0
uschar *
tls_cert_crl_uri(void * cert, uschar * mod)
{
    int ret;
    size_t siz;
    uschar sep = '\n';
    int index;
    uschar * list = NULL;
    uschar * ele;

    if (mod)
        if (*mod == '>' && *++mod) sep = *mod++;

    for(index = 0;; index++)
    {
        siz = 0;
        switch(ret = gnutls_x509_crt_get_crl_dist_points(
                         (gnutls_x509_crt_t)cert, index, NULL, &siz, NULL, NULL))
        {
        case GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE:
            return list;
        case GNUTLS_E_SHORT_MEMORY_BUFFER:
            break;
        default:
            return g_err("gc0", __FUNCTION__, ret);
        }

        ele = store_get(siz+1);
        if ((ret = gnutls_x509_crt_get_crl_dist_points(
                       (gnutls_x509_crt_t)cert, index, ele, &siz, NULL, NULL)) < 0)
            return g_err("gc1", __FUNCTION__, ret);

        ele[siz] = '\0';
        list = string_append_listele(list, sep, ele);
    }
    /*NOTREACHED*/
}
void __certificate_properties_fill_cert_ext_CRLDistributionPoints (GtkTreeStore *store,
        GtkTreeIter *parent,
        gnutls_x509_crt_t *certificate)
{
    gint i;
    for (i = 0;; i++)
    {
        gint result;
        guint critical;
        const gint BUFFER_SIZE_MAX = 1024;
        gchar buffer[BUFFER_SIZE_MAX];
        gsize buffer_size = BUFFER_SIZE_MAX;
        gchar *hex_buffer;
        GtkTreeIter l;

        result = gnutls_x509_crt_get_crl_dist_points(*certificate, i, buffer, &buffer_size, 0, &critical);
        if (result == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE)
            break;

        if (result == GNUTLS_E_SHORT_MEMORY_BUFFER) {
            fprintf(stderr, "Error: (%s,%d): %s\n", __FILE__, __LINE__, gnutls_strerror(result));
            break;
        }

        if (result < 0)	{
            fprintf(stderr, "Error: (%s,%d): %s\n", __FILE__, __LINE__, gnutls_strerror(result));
            break;
        }

        switch (result)	{
        case GNUTLS_SAN_DNSNAME:
            gtk_tree_store_append(store, &l, parent);
            gtk_tree_store_set(store, &l, CERTIFICATE_PROPERTIES_COL_NAME, _("DNS Name"),
                               CERTIFICATE_PROPERTIES_COL_VALUE, buffer, -1);
            break;
        case GNUTLS_SAN_RFC822NAME:
            gtk_tree_store_append(store, &l, parent);
            gtk_tree_store_set(store, &l, CERTIFICATE_PROPERTIES_COL_NAME, _("RFC822 Name"),
                               CERTIFICATE_PROPERTIES_COL_VALUE, buffer, -1);
            break;
        case GNUTLS_SAN_URI:
            gtk_tree_store_append(store, &l, parent);
            gtk_tree_store_set(store, &l, CERTIFICATE_PROPERTIES_COL_NAME, _("URI"),
                               CERTIFICATE_PROPERTIES_COL_VALUE, buffer, -1);
            break;
        case GNUTLS_SAN_IPADDRESS:
            hex_buffer = __certificate_properties_dump_raw_data ((guchar *) buffer, buffer_size);
            gtk_tree_store_append(store, &l, parent);
            gtk_tree_store_set(store, &l, CERTIFICATE_PROPERTIES_COL_NAME, _("IP Address"),
                               CERTIFICATE_PROPERTIES_COL_VALUE, hex_buffer, -1);
            g_free(hex_buffer);
            break;
        case GNUTLS_SAN_DN:
            hex_buffer = __certificate_properties_dump_RDNSequence (buffer, buffer_size);
            gtk_tree_store_append(store, &l, parent);
            gtk_tree_store_set(store, &l, CERTIFICATE_PROPERTIES_COL_NAME, _("Directory Name"),
                               CERTIFICATE_PROPERTIES_COL_VALUE, hex_buffer, -1);
            g_free(hex_buffer);
            break;
        default:
            hex_buffer = __certificate_properties_dump_raw_data((guchar *) buffer, buffer_size);
            gtk_tree_store_append(store, &l, parent);
            gtk_tree_store_set(store, &l, CERTIFICATE_PROPERTIES_COL_NAME, _("Value"),
                               CERTIFICATE_PROPERTIES_COL_VALUE, hex_buffer, -1);
            g_free(hex_buffer);
            break;
        }
    }
}