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:

committed by
Junio C Hamano

parent
81c57e2c9d
commit
5a3db11053
@ -28,8 +28,66 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <gnome-keyring.h>
|
#include <gnome-keyring.h>
|
||||||
|
|
||||||
|
#ifdef GNOME_KEYRING_DEFAULT
|
||||||
|
|
||||||
|
/* Modern gnome-keyring */
|
||||||
|
|
||||||
#include <gnome-keyring-memory.h>
|
#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}
|
* This credential struct and API is simplified from git's credential.{h,c}
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user