contrib/git-credential-gnome-keyring.c: support ancient gnome-keyring

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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Brandon Casey 2013-09-23 11:49:16 -07:00 committed by Junio C Hamano
parent 81c57e2c9d
commit 5a3db11053

View File

@ -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}
*/