Skip to content

Commit

Permalink
contrib/git-credential-gnome-keyring.c: use secure memory functions f…
Browse files Browse the repository at this point in the history
…or 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 <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
drafnel authored and gitster committed Oct 16, 2013
1 parent 8bb7a54 commit 9fe3e6c
Showing 1 changed file with 6 additions and 15 deletions.
21 changes: 6 additions & 15 deletions contrib/credential/gnome-keyring/git-credential-gnome-keyring.c
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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';
}
/*
Expand Down

0 comments on commit 9fe3e6c

Please sign in to comment.