summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Casey <drafnel@gmail.com>2013-09-23 11:49:11 -0700
committerJunio C Hamano <gitster@pobox.com>2013-10-16 09:35:31 -0700
commit9fe3e6cf9e5e3dbf8777dd78dbd27c44cfc4eb85 (patch)
tree7993505a412391bc206262d8a7bbf1e3cf5f24a0
parent8bb7a54c57d5bd8113886fc04be8d22d10337eef (diff)
downloadgit-9fe3e6cf9e5e3dbf8777dd78dbd27c44cfc4eb85.tar.gz
contrib/git-credential-gnome-keyring.c: use secure memory functions for passwds
gnome-keyring provides functions for allocating non-pageable memory (if possible) intended to be used for storing passwords. Let's use them. Signed-off-by: Brandon Casey <drafnel@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--contrib/credential/gnome-keyring/git-credential-gnome-keyring.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c b/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
index b692e1f890..d8a7038a6e 100644
--- a/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
+++ b/contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
@@ -30,6 +30,7 @@
#include <errno.h>
#include <glib.h>
#include <gnome-keyring.h>
+#include <gnome-keyring-memory.h>
/*
* This credential struct and API is simplified from git's credential.{h,c}
@@ -60,16 +61,6 @@ struct credential_operation
/* ---------------- common helper functions ----------------- */
-static inline void free_password(char *password)
-{
- char *c = password;
- if (!password)
- return;
-
- while (*c) *c++ = '\0';
- free(password);
-}
-
static inline void warning(const char *fmt, ...)
{
va_list ap;
@@ -159,8 +150,8 @@ static int keyring_get(struct credential *c)
/* pick the first one from the list */
password_data = (GnomeKeyringNetworkPasswordData *) entries->data;
- free_password(c->password);
- c->password = xstrdup(password_data->password);
+ gnome_keyring_memory_free(c->password);
+ c->password = gnome_keyring_memory_strdup(password_data->password);
if (!c->username)
c->username = xstrdup(password_data->user);
@@ -291,7 +282,7 @@ static void credential_clear(struct credential *c)
free(c->host);
free(c->path);
free(c->username);
- free_password(c->password);
+ gnome_keyring_memory_free(c->password);
credential_init(c);
}
@@ -338,8 +329,8 @@ static int credential_read(struct credential *c)
free(c->username);
c->username = xstrdup(value);
} else if (!strcmp(key, "password")) {
- free_password(c->password);
- c->password = xstrdup(value);
+ gnome_keyring_memory_free(c->password);
+ c->password = gnome_keyring_memory_strdup(value);
while (*value) *value++ = '\0';
}
/*