free data
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2566 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
15
lib/hdb/db.c
15
lib/hdb/db.c
@@ -64,6 +64,7 @@ DB_op(krb5_context context, HDB *db, hdb_entry *entry, int op)
|
|||||||
key.size = data.length;
|
key.size = data.length;
|
||||||
switch(op){
|
switch(op){
|
||||||
case 0:
|
case 0:
|
||||||
|
krb5_free_principal (context, entry->principal);
|
||||||
err = d->get(d, &key, &value, 0);
|
err = d->get(d, &key, &value, 0);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
@@ -74,6 +75,7 @@ DB_op(krb5_context context, HDB *db, hdb_entry *entry, int op)
|
|||||||
krb5_data_free(&data);
|
krb5_data_free(&data);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
krb5_free_principal (context, entry->principal);
|
||||||
err = d->del(d, &key, 0);
|
err = d->del(d, &key, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -116,8 +118,9 @@ DB_seq(krb5_context context, HDB *db, hdb_entry *entry, int flag)
|
|||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->db;
|
||||||
DBT key, value;
|
DBT key, value;
|
||||||
krb5_data data;
|
krb5_data key_data, data;
|
||||||
int err;
|
int err;
|
||||||
|
krb5_principal principal;
|
||||||
|
|
||||||
err = d->seq(d, &key, &value, flag);
|
err = d->seq(d, &key, &value, flag);
|
||||||
if(err == -1)
|
if(err == -1)
|
||||||
@@ -125,13 +128,15 @@ DB_seq(krb5_context context, HDB *db, hdb_entry *entry, int flag)
|
|||||||
if(err == 1)
|
if(err == 1)
|
||||||
return KRB5_HDB_NOENTRY;
|
return KRB5_HDB_NOENTRY;
|
||||||
|
|
||||||
data.data = key.data;
|
key_data.data = key.data;
|
||||||
data.length = key.size;
|
key_data.length = key.size;
|
||||||
entry->principal = malloc(sizeof(*entry->principal));
|
|
||||||
hdb_key2principal(context, &data, &entry->principal);
|
|
||||||
data.data = value.data;
|
data.data = value.data;
|
||||||
data.length = value.size;
|
data.length = value.size;
|
||||||
hdb_value2entry(context, &data, entry);
|
hdb_value2entry(context, &data, entry);
|
||||||
|
if (entry->principal == NULL) {
|
||||||
|
entry->principal = malloc(sizeof(*entry->principal));
|
||||||
|
hdb_key2principal(context, &key_data, &entry->principal);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -59,6 +59,7 @@ NDBM_fetch(krb5_context context, HDB *db, hdb_entry *entry)
|
|||||||
krb5_data data;
|
krb5_data data;
|
||||||
|
|
||||||
hdb_principal2key(context, entry->principal, &data);
|
hdb_principal2key(context, entry->principal, &data);
|
||||||
|
krb5_free_principal (context, entry->principal);
|
||||||
|
|
||||||
key.dptr = data.data;
|
key.dptr = data.data;
|
||||||
key.dsize = data.length;
|
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;
|
DBM *d = (DBM*)db->db;
|
||||||
datum key, value;
|
datum key, value;
|
||||||
krb5_data data;
|
krb5_data key_data, data;
|
||||||
|
krb5_principal principal;
|
||||||
|
|
||||||
if(first)
|
if(first)
|
||||||
key = dbm_firstkey(d);
|
key = dbm_firstkey(d);
|
||||||
@@ -129,15 +131,17 @@ NDBM_seq(krb5_context context, HDB *db, hdb_entry *entry, int first)
|
|||||||
key = dbm_nextkey(d);
|
key = dbm_nextkey(d);
|
||||||
if(key.dptr == NULL)
|
if(key.dptr == NULL)
|
||||||
return KRB5_HDB_NOENTRY;
|
return KRB5_HDB_NOENTRY;
|
||||||
data.data = key.dptr;
|
key_data.data = key.dptr;
|
||||||
data.length = key.dsize;
|
key_data.length = key.dsize;
|
||||||
entry->principal = malloc(sizeof(*entry->principal));
|
|
||||||
hdb_key2principal(context, &data, entry->principal);
|
|
||||||
value = dbm_fetch(d, key);
|
value = dbm_fetch(d, key);
|
||||||
/* krb5_data_free(&data); */
|
/* krb5_data_free(&data); */
|
||||||
data.data = value.dptr;
|
data.data = value.dptr;
|
||||||
data.length = value.dsize;
|
data.length = value.dsize;
|
||||||
hdb_value2entry(context, &data, entry);
|
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); */
|
/* krb5_data_free(&data); */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user