From 06a5eb07ff0b2b748e9d0601ff03bf50f1763298 Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Wed, 23 Jul 1997 23:52:51 +0000 Subject: [PATCH] free data git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2566 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/hdb/db.c | 15 ++++++++++----- lib/hdb/ndbm.c | 14 +++++++++----- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/lib/hdb/db.c b/lib/hdb/db.c index 885433549..a70d16d5a 100644 --- a/lib/hdb/db.c +++ b/lib/hdb/db.c @@ -64,6 +64,7 @@ DB_op(krb5_context context, HDB *db, hdb_entry *entry, int op) key.size = data.length; switch(op){ case 0: + krb5_free_principal (context, entry->principal); err = d->get(d, &key, &value, 0); break; case 1: @@ -74,6 +75,7 @@ DB_op(krb5_context context, HDB *db, hdb_entry *entry, int op) krb5_data_free(&data); break; case 2: + krb5_free_principal (context, entry->principal); err = d->del(d, &key, 0); break; } @@ -116,8 +118,9 @@ DB_seq(krb5_context context, HDB *db, hdb_entry *entry, int flag) { DB *d = (DB*)db->db; DBT key, value; - krb5_data data; + krb5_data key_data, data; int err; + krb5_principal principal; err = d->seq(d, &key, &value, flag); if(err == -1) @@ -125,13 +128,15 @@ DB_seq(krb5_context context, HDB *db, hdb_entry *entry, int flag) if(err == 1) return KRB5_HDB_NOENTRY; - data.data = key.data; - data.length = key.size; - entry->principal = malloc(sizeof(*entry->principal)); - hdb_key2principal(context, &data, &entry->principal); + key_data.data = key.data; + key_data.length = key.size; data.data = value.data; data.length = value.size; hdb_value2entry(context, &data, entry); + if (entry->principal == NULL) { + entry->principal = malloc(sizeof(*entry->principal)); + hdb_key2principal(context, &key_data, &entry->principal); + } return 0; } diff --git a/lib/hdb/ndbm.c b/lib/hdb/ndbm.c index 22994eefc..74e8709b0 100644 --- a/lib/hdb/ndbm.c +++ b/lib/hdb/ndbm.c @@ -59,6 +59,7 @@ NDBM_fetch(krb5_context context, HDB *db, hdb_entry *entry) krb5_data data; hdb_principal2key(context, entry->principal, &data); + krb5_free_principal (context, entry->principal); key.dptr = data.data; key.dsize = data.length; @@ -121,7 +122,8 @@ NDBM_seq(krb5_context context, HDB *db, hdb_entry *entry, int first) { DBM *d = (DBM*)db->db; datum key, value; - krb5_data data; + krb5_data key_data, data; + krb5_principal principal; if(first) key = dbm_firstkey(d); @@ -129,15 +131,17 @@ NDBM_seq(krb5_context context, HDB *db, hdb_entry *entry, int first) key = dbm_nextkey(d); if(key.dptr == NULL) return KRB5_HDB_NOENTRY; - data.data = key.dptr; - data.length = key.dsize; - entry->principal = malloc(sizeof(*entry->principal)); - hdb_key2principal(context, &data, entry->principal); + key_data.data = key.dptr; + key_data.length = key.dsize; value = dbm_fetch(d, key); /* krb5_data_free(&data); */ data.data = value.dptr; data.length = value.dsize; hdb_value2entry(context, &data, entry); + if (entry->principal == NULL) { + entry->principal = malloc (sizeof(*entry->principal)); + hdb_key2principal (context, &key_data, entry->principal); + } /* krb5_data_free(&data); */ return 0; }