git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 14/15] contrib/git-credential-gnome-keyring.c: support ancient gnome-keyring

From
Brandon Casey <drafnel@gmail.com>
Date
Sep 23, 2013, 05:08 UTC
Message-ID
<1379912891-12277-15-git-send-email-drafnel@gmail.com>
In-Reply-To
<1379912891-12277-1-git-send-email-drafnel@gmail.com>

The gnome-keyring lib distributed with RHEL 5.X is ancient and does not provide a few of the functions/defines that more recent versions do, but mostly the API is the same. Let's provide the missing bits via macro definitions and function implementation.

Signed-off-by: Brandon Casey <drafnel@gmail.com>
---
 .../gnome-keyring/git-credential-gnome-keyring.c   | 58 ++++++++++++++++++++++
 1 file changed, 58 insertions(+)
diff --git a/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c b/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
index 6fa1278..f8f4df9 100644
--- a/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
+++ b/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
@@ -28,8 +28,66 @@
 #include <stdlib.h>
 #include <glib.h>
 #include <gnome-keyring.h>
+
+#ifdef GNOME_KEYRING_DEFAULT
+
+   /* Modern gnome-keyring */
+
 #include <gnome-keyring-memory.h>
 
+#else
+
+   /*
+    * Support ancient gnome-keyring, circ. RHEL 5.X.
+    * GNOME_KEYRING_DEFAULT seems to have been introduced with Gnome 2.22,
+    * and the other features roughly around Gnome 2.20, 6 months before.
+    * Ubuntu 8.04 used Gnome 2.22 (I think).  Not sure any distro used 2.20.
+    * So the existence/non-existence of GNOME_KEYRING_DEFAULT seems like
+    * a decent thing to use as an indicator.
+    */
+
+#define GNOME_KEYRING_DEFAULT NULL
+
+/*
+ * ancient gnome-keyring returns DENIED when an entry is not found.
+ * Setting NO_MATCH to DENIED will prevent us from reporting denied
+ * errors during get and erase operations, but we will still report
+ * DENIED errors during a store.
+ */
+#define GNOME_KEYRING_RESULT_NO_MATCH GNOME_KEYRING_RESULT_DENIED
+
+#define gnome_keyring_memory_alloc g_malloc
+#define gnome_keyring_memory_free gnome_keyring_free_password
+#define gnome_keyring_memory_strdup g_strdup
+
+static const char* gnome_keyring_result_to_message(GnomeKeyringResult result)
+{
+	switch (result) {
+	case GNOME_KEYRING_RESULT_OK:
+		return "OK";
+	case GNOME_KEYRING_RESULT_DENIED:
+		return "Denied";
+	case GNOME_KEYRING_RESULT_NO_KEYRING_DAEMON:
+		return "No Keyring Daemon";
+	case GNOME_KEYRING_RESULT_ALREADY_UNLOCKED:
+		return "Already UnLocked";
+	case GNOME_KEYRING_RESULT_NO_SUCH_KEYRING:
+		return "No Such Keyring";
+	case GNOME_KEYRING_RESULT_BAD_ARGUMENTS:
+		return "Bad Arguments";
+	case GNOME_KEYRING_RESULT_IO_ERROR:
+		return "IO Error";
+	case GNOME_KEYRING_RESULT_CANCELLED:
+		return "Cancelled";
+	case GNOME_KEYRING_RESULT_ALREADY_EXISTS:
+		return "Already Exists";
+	default:
+		return "Unknown Error";
+	}
+}
+
+#endif
+
 /*
  * This credential struct and API is simplified from git's credential.{h,c}
  */
-- 
1.8.4.489.g545bc72
Previous: Brandon CaseyNext: Brandon Casey
Message 17 of 20 in “Make Gnome Credential helper more Gnome-y and support ancient distros”
  1. 00/15 Make Gnome Credential helper more Gnome-y and support ancient distrosBrandon Casey, Sep 23, 2013
  2. 01/15 contrib/git-credential-gnome-keyring.c: remove unnecessary pre-declarationsBrandon Casey, Sep 23, 2013
  3. 02/15 contrib/git-credential-gnome-keyring.c: remove unused die() functionBrandon Casey, Sep 23, 2013
  4. 03/15 contrib/git-credential-gnome-keyring.c: add static where applicableBrandon Casey, Sep 23, 2013
  5. 04/15 contrib/git-credential-gnome-keyring.c: exit non-zero when called incorrectlyBrandon Casey, Sep 23, 2013
  6. 05/15 contrib/git-credential-gnome-keyring.c: set Gnome application nameBrandon Casey, Sep 23, 2013
  7. 06/15 contrib/git-credential-gnome-keyring.c: strlen() returns size_t, not ssize_tBrandon Casey, Sep 23, 2013
  8. 07/15 contrib/git-credential-gnome-keyring.c: ensure buffer is non-empty before accessingBrandon Casey, Sep 23, 2013
  9. Felipe ContrerasSep 23, 2013
  10. Brandon CaseySep 23, 2013
  11. 08/15 contrib/git-credential-gnome-keyring.c: use gnome helpers in keyring_object()Brandon Casey, Sep 23, 2013
  12. 09/15 contrib/git-credential-gnome-keyring.c: use secure memory functions for passwdsBrandon Casey, Sep 23, 2013
  13. 10/15 contrib/git-credential-gnome-keyring.c: use secure memory for reading passwordsBrandon Casey, Sep 23, 2013
  14. 11/15 contrib/git-credential-gnome-keyring.c: use glib memory allocation functionsBrandon Casey, Sep 23, 2013
  15. 12/15 contrib/git-credential-gnome-keyring.c: use glib messaging functionsBrandon Casey, Sep 23, 2013
  16. 13/15 contrib/git-credential-gnome-keyring.c: report failure to store passwordBrandon Casey, Sep 23, 2013
  17. 14/15 contrib/git-credential-gnome-keyring.c: support ancient gnome-keyringBrandon Casey, Sep 23, 2013
  18. 15/15 contrib/git-credential-gnome-keyring.c: support really ancient gnome-keyringBrandon Casey, Sep 23, 2013
  19. John SzakmeisterSep 23, 2013
  20. Brandon CaseySep 23, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.