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:
parent
8bb7a54c57
commit
9fe3e6cf9e
@ -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';
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user