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>
This commit is contained in:
Brandon Casey 2013-09-23 11:49:11 -07:00 committed by Junio C Hamano
parent 8bb7a54c57
commit 9fe3e6cf9e

View File

@ -30,6 +30,7 @@
#include <errno.h> #include <errno.h>
#include <glib.h> #include <glib.h>
#include <gnome-keyring.h> #include <gnome-keyring.h>
#include <gnome-keyring-memory.h>
/* /*
* 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}
@ -60,16 +61,6 @@ struct credential_operation
/* ---------------- common helper functions ----------------- */ /* ---------------- 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, ...) static inline void warning(const char *fmt, ...)
{ {
va_list ap; va_list ap;
@ -159,8 +150,8 @@ static int keyring_get(struct credential *c)
/* pick the first one from the list */ /* pick the first one from the list */
password_data = (GnomeKeyringNetworkPasswordData *) entries->data; password_data = (GnomeKeyringNetworkPasswordData *) entries->data;
free_password(c->password); gnome_keyring_memory_free(c->password);
c->password = xstrdup(password_data->password); c->password = gnome_keyring_memory_strdup(password_data->password);
if (!c->username) if (!c->username)
c->username = xstrdup(password_data->user); c->username = xstrdup(password_data->user);
@ -291,7 +282,7 @@ static void credential_clear(struct credential *c)
free(c->host); free(c->host);
free(c->path); free(c->path);
free(c->username); free(c->username);
free_password(c->password); gnome_keyring_memory_free(c->password);
credential_init(c); credential_init(c);
} }
@ -338,8 +329,8 @@ static int credential_read(struct credential *c)
free(c->username); free(c->username);
c->username = xstrdup(value); c->username = xstrdup(value);
} else if (!strcmp(key, "password")) { } else if (!strcmp(key, "password")) {
free_password(c->password); gnome_keyring_memory_free(c->password);
c->password = xstrdup(value); c->password = gnome_keyring_memory_strdup(value);
while (*value) *value++ = '\0'; while (*value) *value++ = '\0';
} }
/* /*