[gnome-disk-utility] Make GNOME Keyring usage optional



commit 795ab7fd14211737e149fc3e2ad242b2ebcc30b0
Author: David Zeuthen <davidz redhat com>
Date:   Tue Jan 12 15:59:22 2010 -0500

    Make GNOME Keyring usage optional
    
    At least for the time being (currently libgnome-keyring-1 crashes for
    me - looks like an internal error).

 configure.ac          |   24 ++++++++++++++++++++++--
 src/gdu-gtk/gdu-gtk.c |   13 ++++++++++++-
 src/gdu-gtk/gdu-gtk.h |    1 +
 src/gdu/gdu-util.c    |   37 ++++++++++++++++++++++++++++++++++++-
 4 files changed, 71 insertions(+), 4 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 039270e..4e0ec91 100644
--- a/configure.ac
+++ b/configure.ac
@@ -144,7 +144,6 @@ PKG_CHECK_MODULES(GIO2, [gio-2.0 >= $GIO2_REQUIRED])
 PKG_CHECK_MODULES(GIO_UNIX2, [gio-unix-2.0 >= $GIO2_REQUIRED])
 PKG_CHECK_MODULES(GTHREAD2, [gthread-2.0 >= $GLIB2_REQUIRED])
 PKG_CHECK_MODULES(DBUS_GLIB, [dbus-glib-1 >= $DBUS_GLIB_REQUIRED])
-PKG_CHECK_MODULES(GNOME_KEYRING, [gnome-keyring-1 >= $GNOME_KEYRING_REQUIRED])
 PKG_CHECK_MODULES(GTK2, [gtk+-2.0 >= $GTK2_REQUIRED])
 PKG_CHECK_MODULES(UNIQUE, [unique-1.0 >= $UNIQUE_REQUIRED])
 PKG_CHECK_MODULES(LIBNOTIFY, [libnotify  >= $LIBNOTIFY_REQUIRED])
@@ -154,6 +153,26 @@ PKG_CHECK_MODULES(LIBATASMART, [libatasmart >= 0.14])
 PKG_CHECK_MODULES(AVAHI_UI, [avahi-ui >= $AVAHI_UI_REQUIRED])
 
 # *************
+# GNOME Keyring
+# *************
+
+have_gnome_keyring=no
+AC_ARG_ENABLE(gnome-keyring, AS_HELP_STRING([--disable-gnome-keyring], [disable use of GNOME Keyring]))
+
+if test "x$enable_gnome_keyring" != "xno"; then
+	PKG_CHECK_MODULES(GNOME_KEYRING, gnome-keyring-1 >= $GNOME_KEYRING_REQUIRED,
+			  [AC_DEFINE(HAVE_GNOME_KEYRING, 1, [Define if gnome-keyring is available])
+			  have_gnome_keyring=yes], have_gnome_keyring=no)
+	if test "x$have_gnome_keyring" = xno -a "x$enable_gnome_keyring" = xyes; then
+		AC_MSG_ERROR([gnome-keyring support requested but libraries not found])
+	fi
+fi
+
+AC_SUBST(GNOME_KEYRING_LIBS)
+AC_SUBST(GNOME_KEYRING_CFLAGS)
+AM_CONDITIONAL(ENABLE_GNOME_KEYRING, [test "$have_gnome_keyring" = "yes"])
+
+# *************
 # Documentation
 # *************
 
@@ -163,7 +182,7 @@ if test x$SCROLLKEEPER_CONFIG = xno; then
 fi
 
 # ********************
-# Internationalisation
+# Internationalization
 # ********************
 
 IT_PROG_INTLTOOL([$INTLTOOL_REQUIRED])
@@ -249,4 +268,5 @@ echo "
         Maintainer mode:            ${USE_MAINTAINER_MODE}
         Building api docs:          ${enable_gtk_doc}
         Nautilus extension:         ${have_nautilus}
+        GNOME Keyring support:      ${have_gnome_keyring}
 "
diff --git a/src/gdu-gtk/gdu-gtk.c b/src/gdu-gtk/gdu-gtk.c
index c6bd4b6..cbca84b 100644
--- a/src/gdu-gtk/gdu-gtk.c
+++ b/src/gdu-gtk/gdu-gtk.c
@@ -24,9 +24,12 @@
 
 #include <glib-object.h>
 #include <string.h>
-#include <gnome-keyring.h>
 #include <dbus/dbus-glib.h>
 
+#ifdef HAVE_GNOME_KEYRING
+#include <gnome-keyring.h>
+#endif
+
 #include <gdu/gdu.h>
 #include "gdu-gtk.h"
 
@@ -806,6 +809,7 @@ out:
         return secret;
 }
 
+#ifdef HAVE_GNOME_KEYRING
 static GnomeKeyringPasswordSchema encrypted_device_password_schema = {
         GNOME_KEYRING_ITEM_GENERIC_SECRET,
         {
@@ -813,6 +817,7 @@ static GnomeKeyringPasswordSchema encrypted_device_password_schema = {
                 { NULL, 0 }
         }
 };
+#endif
 
 char *
 gdu_util_dialog_ask_for_new_secret (GtkWidget      *parent_window,
@@ -892,6 +897,7 @@ gdu_util_dialog_ask_for_secret (GtkWidget      *parent_window,
         }
 
         if (!bypass_keyring) {
+#ifdef HAVE_GNOME_KEYRING
                 if (gnome_keyring_find_password_sync (&encrypted_device_password_schema,
                                                       &password,
                                                       "luks-device-uuid", uuid,
@@ -903,6 +909,7 @@ gdu_util_dialog_ask_for_secret (GtkWidget      *parent_window,
                         gnome_keyring_free_password (password);
                         goto out;
                 }
+#endif
         }
 
         if (gdu_device_is_partition (device)) {
@@ -937,6 +944,7 @@ gdu_util_dialog_ask_for_secret (GtkWidget      *parent_window,
         if (asked_user != NULL)
                 *asked_user = TRUE;
 
+#ifdef HAVE_GNOME_KEYRING
         if (secret != NULL && (save_in_keyring || save_in_keyring_session)) {
                 const char *keyring;
                 gchar *name;
@@ -958,6 +966,7 @@ gdu_util_dialog_ask_for_secret (GtkWidget      *parent_window,
 
                 g_free (name);
         }
+#endif
 
 out:
         if (device != NULL)
@@ -1030,6 +1039,7 @@ gdu_util_dialog_change_secret (GtkWidget       *parent_window,
                 goto out;
         }
 
+#ifdef HAVE_GNOME_KEYRING
         if (!bypass_keyring) {
                 if (gnome_keyring_find_password_sync (&encrypted_device_password_schema,
                                                       &password,
@@ -1042,6 +1052,7 @@ gdu_util_dialog_change_secret (GtkWidget       *parent_window,
                         gnome_keyring_free_password (password);
                 }
         }
+#endif
 
         if (gdu_device_is_partition (device)) {
                 char *s;
diff --git a/src/gdu-gtk/gdu-gtk.h b/src/gdu-gtk/gdu-gtk.h
index 65aef65..5e5d45f 100644
--- a/src/gdu-gtk/gdu-gtk.h
+++ b/src/gdu-gtk/gdu-gtk.h
@@ -54,6 +54,7 @@
 #include <gdu-gtk/gdu-edit-linux-md-dialog.h>
 #include <gdu-gtk/gdu-drive-benchmark-dialog.h>
 #include <gdu-gtk/gdu-connect-to-server-dialog.h>
+#include <gdu-gtk/gdu-create-linux-lvm2-volume-dialog.h>
 #undef __GDU_GTK_INSIDE_GDU_GTK_H
 
 G_BEGIN_DECLS
diff --git a/src/gdu/gdu-util.c b/src/gdu/gdu-util.c
index 0a04d8b..e658cd3 100644
--- a/src/gdu/gdu-util.c
+++ b/src/gdu/gdu-util.c
@@ -24,9 +24,12 @@
 
 #include <glib-object.h>
 #include <string.h>
-#include <gnome-keyring.h>
 #include <dbus/dbus-glib.h>
 
+#ifdef HAVE_GNOME_KEYRING
+#include <gnome-keyring.h>
+#endif
+
 #include "gdu-util.h"
 #include "gdu-pool.h"
 #include "gdu-device.h"
@@ -680,6 +683,7 @@ gdu_util_get_default_part_type_for_scheme_and_fstype (const char *scheme, const
 
 /* ---------------------------------------------------------------------------------------------------- */
 
+#ifdef HAVE_GNOME_KEYRING
 static GnomeKeyringPasswordSchema encrypted_device_password_schema = {
         GNOME_KEYRING_ITEM_GENERIC_SECRET,
         {
@@ -841,6 +845,37 @@ out:
 }
 
 /* ---------------------------------------------------------------------------------------------------- */
+#else /* ifdef HAVE_GNOME_KEYRING */
+
+gboolean
+gdu_util_save_secret (GduDevice      *device,
+                      const char     *secret,
+                      gboolean        save_in_keyring_session)
+{
+        return FALSE;
+}
+
+gboolean
+gdu_util_delete_secret (GduDevice *device)
+{
+        return FALSE;
+}
+
+gboolean
+gdu_util_have_secret (GduDevice *device)
+{
+        return FALSE;
+}
+
+gchar *
+gdu_util_get_secret (GduDevice *device)
+{
+        return NULL;
+}
+
+#endif
+
+/* ---------------------------------------------------------------------------------------------------- */
 
 char *
 gdu_util_get_speed_for_display (guint64 speed)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]