gnunet-svn
[Top][All Lists]
Advanced

[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 }
   };
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]