[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r33574 - in gnunet-gtk: contrib src/namestore
From: |
gnunet |
Subject: |
[GNUnet-SVN] r33574 - in gnunet-gtk: contrib src/namestore |
Date: |
Sat, 7 Jun 2014 01:52:12 +0200 |
Author: grothoff
Date: 2014-06-07 01:52:12 +0200 (Sat, 07 Jun 2014)
New Revision: 33574
Modified:
gnunet-gtk/contrib/gnunet_namestore_edit_tlsa.glade
gnunet-gtk/src/namestore/Makefile.am
gnunet-gtk/src/namestore/plugin_gtk_namestore_srv.c
gnunet-gtk/src/namestore/plugin_gtk_namestore_tlsa.c
Log:
more work on TLSA dialog
Modified: gnunet-gtk/contrib/gnunet_namestore_edit_tlsa.glade
===================================================================
--- gnunet-gtk/contrib/gnunet_namestore_edit_tlsa.glade 2014-06-06 14:49:26 UTC
(rev 33573)
+++ gnunet-gtk/contrib/gnunet_namestore_edit_tlsa.glade 2014-06-06 23:52:12 UTC
(rev 33574)
@@ -525,6 +525,7 @@
<property
name="height_request">100</property>
<property
name="visible">True</property>
<property
name="can_focus">True</property>
+ <signal name="preedit-changed"
handler="edit_dialog_tlsa_value_textview_preedit_changed_cb" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
@@ -582,6 +583,7 @@
<object class="GtkButton"
id="edit_dialog_tlsa_import_button">
<property
name="label">gtk-convert</property>
<property
name="visible">True</property>
+ <property
name="sensitive">False</property>
<property
name="can_focus">True</property>
<property
name="receives_default">True</property>
<property name="tooltip_text"
translatable="yes">Import Certificate from external source.</property>
Modified: gnunet-gtk/src/namestore/Makefile.am
===================================================================
--- gnunet-gtk/src/namestore/Makefile.am 2014-06-06 14:49:26 UTC (rev
33573)
+++ gnunet-gtk/src/namestore/Makefile.am 2014-06-06 23:52:12 UTC (rev
33574)
@@ -88,7 +88,7 @@
libgnunet_plugin_gtk_namestore_box_la_LIBADD = \
@GNUNET_LIBS@ \
-lgnunetdnsparser \
- -lgnunetutil
+ -lgnunetutil -lgnutls
libgnunet_plugin_gtk_namestore_box_la_LDFLAGS = \
$(GN_PLUGIN_LDFLAGS)
@@ -214,7 +214,7 @@
@GLADE_CFLAGS@
libgnunet_plugin_gtk_namestore_tlsa_la_LIBADD = \
@GNUNET_LIBS@ \
- -lgnunetutil
+ -lgnunetutil -lgnutls
libgnunet_plugin_gtk_namestore_tlsa_la_LDFLAGS = \
$(GN_PLUGIN_LDFLAGS)
Modified: gnunet-gtk/src/namestore/plugin_gtk_namestore_srv.c
===================================================================
--- gnunet-gtk/src/namestore/plugin_gtk_namestore_srv.c 2014-06-06 14:49:26 UTC
(rev 33573)
+++ gnunet-gtk/src/namestore/plugin_gtk_namestore_srv.c 2014-06-06 23:52:12 UTC
(rev 33574)
@@ -95,7 +95,7 @@
GtkTreeModel *tm;
if (7 != SSCANF (n_value,
- "%u %u %u %d %d %d %253s",
+ "%u %u %u %u %u %u %253s",
&protocol,
&service,
&record_type,
@@ -109,7 +109,11 @@
n_value);
return;
}
-
+ if (GNUNET_DNSPARSER_TYPE_SRV != record_type)
+ {
+ GNUNET_break (0);
+ return;
+ }
gtk_spin_button_set_value
(GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
"edit_dialog_port_spinbutton")),
@@ -210,7 +214,7 @@
target = gtk_entry_get_text (entry);
GNUNET_asprintf (&result,
- "%u %u %u %d %d %d %s",
+ "%u %u %u %u %u %u %s",
protocol,
(unsigned int) service,
GNUNET_DNSPARSER_TYPE_SRV,
Modified: gnunet-gtk/src/namestore/plugin_gtk_namestore_tlsa.c
===================================================================
--- gnunet-gtk/src/namestore/plugin_gtk_namestore_tlsa.c 2014-06-06
14:49:26 UTC (rev 33573)
+++ gnunet-gtk/src/namestore/plugin_gtk_namestore_tlsa.c 2014-06-06
23:52:12 UTC (rev 33574)
@@ -29,6 +29,8 @@
*/
#include "gnunet_gtk.h"
#include "gnunet_gtk_namestore_plugin.h"
+#include <gnutls/gnutls.h>
+#include <gnutls/x509.h>
/**
@@ -36,11 +38,13 @@
* button depending on the validity of the value.
*
* @param entry editing widget
+ * @param preedit
* @param user_data the plugin environment
*/
static void
-GNS_edit_dialog_tlsa_target_entry_changed_cb (GtkEditable *entry,
- gpointer user_data)
+GNS_edit_dialog_tlsa_value_textview_preedit_changed_cb (GtkTextView *textview,
+ gchar *preedit,
+ gpointer user_data)
{
struct GNUNET_GTK_NAMESTORE_PluginEnvironment *edc = user_data;
@@ -85,31 +89,37 @@
unsigned int protocol;
GtkComboBox *cb;
GtkTreeIter iter;
+ GtkTreeModel *tm;
unsigned int service;
guint service_at_iter;
- unsigned int priority;
- unsigned int weight;
- unsigned int port;
unsigned int record_type;
- char target_name[253 + 1];
- GtkTreeModel *tm;
+ unsigned int usage;
+ unsigned int selector;
+ unsigned int matching_type;
+ GtkTextBuffer *tb;
+ size_t slen = strlen (n_value) + 1;
+ char cert_data[slen];
if (7 != SSCANF (n_value,
- "%u %u %u %d %d %d %253s",
+ "%u %u %u %u %u %u %s",
&protocol,
&service,
&record_type,
- &priority,
- &weight,
- &port,
- target_name))
+ &usage,
+ &selector,
+ &matching_type,
+ cert_data))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
_("Unable to parse (boxed) TLSA record `%s'\n"),
n_value);
return;
}
-
+ if (GNUNET_DNSPARSER_TYPE_TLSA != record_type)
+ {
+ GNUNET_break (0);
+ return;
+ }
gtk_spin_button_set_value
(GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
"edit_dialog_port_spinbutton")),
@@ -137,21 +147,87 @@
while (gtk_tree_model_iter_next (tm,
&iter));
}
- gtk_spin_button_set_value
- (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
-
"edit_dialog_tlsa_priority_spinbutton")),
- priority);
- gtk_spin_button_set_value
- (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
-
"edit_dialog_tlsa_weight_spinbutton")),
- weight);
- gtk_spin_button_set_value
- (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
-
"edit_dialog_tlsa_value_port_spinbutton")),
- port);
- gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (builder,
-
"edit_dialog_tlsa_target_entry")),
- target_name);
+ switch (usage)
+ {
+ case 0: /* CA cert */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+ (gtk_builder_get_object
+ (builder,
+ "edit_dialog_tlsa_usage_ca_radiobutton")),
+ TRUE);
+ break;
+ case 1: /* Entity cert */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+ (gtk_builder_get_object
+ (builder,
+
"edit_dialog_tlsa_usage_service_cert_radiobutton")),
+ TRUE);
+ break;
+ case 2: /* Trust anchor */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+ (gtk_builder_get_object
+ (builder,
+
"edit_dialog_tlsa_usage_trust_anchor_radiobutton")),
+ TRUE);
+ break;
+ case 3: /* Domain-issued cert */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+ (gtk_builder_get_object
+ (builder,
+
"edit_dialog_tlsa_usage_domain_issued_cert_radiobutton")),
+ TRUE);
+ break;
+ default:
+ GNUNET_break_op (0);
+ break;
+ }
+ switch (selector)
+ {
+ case 0: /* full cert, binary */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+ (gtk_builder_get_object
+ (builder,
+
"edit_dialog_tlsa_selector_full_cert_radiobutton")),
+ TRUE);
+ break;
+ case 1: /* full cert, DER */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+ (gtk_builder_get_object
+ (builder,
+
"edit_dialog_tlsa_selector_subject_public_key_radiobutton")),
+ TRUE);
+ break;
+ }
+ switch (matching_type)
+ {
+ case 0: /* exact match */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+ (gtk_builder_get_object
+ (builder,
+
"edit_dialog_tlsa_matching_type_full_contents_radiobutton")),
+ TRUE);
+ break;
+ case 1: /* SHA-256 hash */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+ (gtk_builder_get_object
+ (builder,
+
"edit_dialog_tlsa_matching_type_sha256_radiobutton")),
+ TRUE);
+ break;
+ case 2: /* SHA-512 hash */
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
+ (gtk_builder_get_object
+ (builder,
+
"edit_dialog_tlsa_matching_type_sha512_radiobutton")),
+ TRUE);
+ break;
+ }
+ tb = gtk_text_view_get_buffer (GTK_TEXT_VIEW
+ (gtk_builder_get_object (builder,
+
"edit_dialog_tlsa_value_textview")));
+ gtk_text_buffer_set_text (tb,
+ cert_data,
+ -1);
}
@@ -171,13 +247,15 @@
GtkComboBox *cb;
GtkTreeIter iter;
guint service;
- unsigned int priority;
- unsigned int weight;
- unsigned int port;
- GtkEntry *entry;
- const gchar *target;
+ unsigned int usage;
+ unsigned int selector;
+ unsigned int matching_type;
+ GtkTextBuffer *tb;
+ gchar *value;
char *result;
GtkTreeModel *tm;
+ GtkTextIter ti_start;
+ GtkTextIter ti_end;
protocol = gtk_spin_button_get_value
(GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
@@ -196,28 +274,31 @@
&iter,
1, &service,
-1);
- priority = gtk_spin_button_get_value
- (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
-
"edit_dialog_tlsa_priority_spinbutton")));
- weight = gtk_spin_button_get_value
- (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
-
"edit_dialog_tlsa_weight_spinbutton")));
- port = gtk_spin_button_get_value
- (GTK_SPIN_BUTTON (gtk_builder_get_object (builder,
-
"edit_dialog_tlsa_value_port_spinbutton")));
- entry = GTK_ENTRY (gtk_builder_get_object (builder,
- "edit_dialog_tlsa_target_entry"));
- target = gtk_entry_get_text (entry);
+ usage = 0;
+ selector = 0;
+ matching_type = 0;
+ tb = gtk_text_view_get_buffer (GTK_TEXT_VIEW
+ (gtk_builder_get_object (builder,
+
"edit_dialog_tlsa_value_textview")));
+
+ gtk_text_buffer_get_iter_at_offset (tb, &ti_start, 0);
+ gtk_text_buffer_get_iter_at_offset (tb, &ti_end, -1);
+
+ value = gtk_text_buffer_get_text (tb,
+ &ti_start,
+ &ti_end,
+ FALSE);
GNUNET_asprintf (&result,
- "%u %u %u %d %d %d %s",
+ "%u %u %u %u %u %u %s",
protocol,
(unsigned int) service,
GNUNET_DNSPARSER_TYPE_TLSA,
- priority,
- weight,
- port,
- target);
+ usage,
+ selector,
+ matching_type,
+ value);
+ g_free (value);
return result;
}
@@ -235,12 +316,19 @@
*/
static int
tlsa_validate (void *cls,
- GtkBuilder *builder)
+ GtkBuilder *builder)
{
GtkEditable *entry;
const gchar *preedit;
GtkComboBox *cb;
GtkTreeIter iter;
+ gchar *value;
+ GtkTextBuffer *tb;
+ GtkTextIter ti_start;
+ GtkTextIter ti_end;
+ gnutls_datum_t datum;
+ gnutls_pkcs7_t pkcs7;
+ int ret;
entry = GTK_EDITABLE (gtk_builder_get_object (builder,
"edit_dialog_tlsa_target_entry"));
@@ -253,11 +341,77 @@
if (! gtk_combo_box_get_active_iter (cb,
&iter))
return GNUNET_SYSERR;
- return GNUNET_OK;
+
+ tb = gtk_text_view_get_buffer (GTK_TEXT_VIEW
+ (gtk_builder_get_object (builder,
+
"edit_dialog_tlsa_value_textview")));
+ gtk_text_buffer_get_iter_at_offset (tb, &ti_start, 0);
+ gtk_text_buffer_get_iter_at_offset (tb, &ti_end, -1);
+
+ value = gtk_text_buffer_get_text (tb,
+ &ti_start,
+ &ti_end,
+ FALSE);
+ datum.size = strlen (value);
+ datum.data = (void *) value;
+ gnutls_pkcs7_init (&pkcs7);
+ if (GNUTLS_E_SUCCESS !=
+ gnutls_pkcs7_import (pkcs7,
+ &datum,
+ GNUTLS_X509_FMT_PEM))
+ ret = GNUNET_SYSERR;
+ else
+ ret = GNUNET_OK;
+ gnutls_pkcs7_deinit (pkcs7);
+ g_free (value);
+ return ret;
}
/**
+ * The user clicked the "import" button. Try to import
+ * certificate from the server.
+ *
+ * @param button the 'import' button
+ * @param user_data the plugin environment
+ */
+static void
+tlsa_import_button_clicked_cb (GtkButton *button,
+ gpointer user_data)
+{
+ struct GNUNET_GTK_NAMESTORE_PluginEnvironment *edc = user_data;
+
+ GNUNET_break (0); // FIXME: import not implemented
+}
+
+
+/**
+ * The user has edited the hostname used for the import button.
+ * Update the import button's sensitivity.
+ */
+static void
+GNS_edit_dialog_tlsa_entry_changed_cb (GtkEditable *entry,
+ gpointer user_data)
+{
+ struct GNUNET_GTK_NAMESTORE_PluginEnvironment *edc = user_data;
+ GtkWidget *button;
+ const gchar *preedit;
+ gboolean sens;
+
+ button = GTK_WIDGET (gtk_builder_get_object (edc->builder,
+ "edit_dialog_tlsa_entry"));
+ preedit = gtk_editable_get_chars (entry, 0, -1);
+ if ( (NULL == preedit) ||
+ (0 == strlen (preedit)) ||
+ (GNUNET_OK != GNUNET_DNSPARSER_check_name (preedit)) )
+ sens = FALSE;
+ else
+ sens = TRUE;
+ gtk_widget_set_sensitive (button, sens);
+}
+
+
+/**
* Entry point for the plugin.
*
* @param cls the `struct GNUNET_GTK_NAMESTORE_PluginEnvironment`
@@ -269,10 +423,14 @@
struct GNUNET_GTK_NAMESTORE_PluginEnvironment *env = cls;
struct GNUNET_GTK_NAMESTORE_PluginFunctions *plugin;
static struct GNUNET_GTK_NAMESTORE_Symbol symbols[] = {
- { "GNS_edit_dialog_tlsa_target_entry_changed_cb",
- G_CALLBACK (GNS_edit_dialog_tlsa_target_entry_changed_cb) },
+ { "GNS_edit_dialog_tlsa_value_textview_preedit_changed_cb",
+ G_CALLBACK (GNS_edit_dialog_tlsa_value_textview_preedit_changed_cb) },
{ "edit_dialog_protocol_combobox_changed_cb",
G_CALLBACK (edit_dialog_protocol_combobox_changed_cb) },
+ { "tlsa_import_button_clicked_cb",
+ G_CALLBACK (tlsa_import_button_clicked_cb) },
+ { "GNS_edit_dialog_tlsa_entry_changed_cb",
+ G_CALLBACK (GNS_edit_dialog_tlsa_entry_changed_cb) },
{ NULL, NULL }
};
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r33574 - in gnunet-gtk: contrib src/namestore,
gnunet <=