diff options
author | Brandon Casey <drafnel@gmail.com> | 2013-09-23 11:49:11 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-10-16 09:35:31 -0700 |
commit | 9fe3e6cf9e5e3dbf8777dd78dbd27c44cfc4eb85 (patch) | |
tree | 7993505a412391bc206262d8a7bbf1e3cf5f24a0 | |
parent | 8bb7a54c57d5bd8113886fc04be8d22d10337eef (diff) | |
download | git-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.c | 21 |
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'; } /* |