From db5b678e093650c994411be7e44c035f5847e98d Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Thu, 28 Aug 1997 01:25:40 +0000 Subject: [PATCH] leak less memory git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@3213 ec53bebd-3082-4978-b11e-865c3cabbd6b --- admin/ank.c | 8 ++++++-- admin/extkeytab.c | 7 ++++++- admin/get.c | 13 ++++++++++--- admin/mod.c | 6 ++++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/admin/ank.c b/admin/ank.c index ebe1eea38..50cec299d 100644 --- a/admin/ank.c +++ b/admin/ank.c @@ -46,13 +46,15 @@ doit(const char *principal) HDB *db; hdb_entry ent; krb5_error_code ret; + krb5_principal ent_principal; memset(&ent, 0, sizeof(ent)); if((ret = hdb_open(context, &db, database, O_RDWR, 0600))) { krb5_warn(context, ret, "hdb_open"); return; } - krb5_parse_name(context, principal, &ent.principal); + krb5_parse_name(context, principal, &ent_principal); + ent.principal = ent_principal; ret = db->fetch(context, db, &ent); @@ -61,7 +63,8 @@ doit(const char *principal) break; case 0: krb5_warnx(context, "Principal exists"); - return; + krb5_free_principal (context, ent_principal); + goto cleanup; default: krb5_err(context, 1, ret, "dbget"); } @@ -74,6 +77,7 @@ doit(const char *principal) if(ret) krb5_err(context, 1, ret, "db->store"); +cleanup: db->close(context, db); hdb_free_entry(context, &ent); } diff --git a/admin/extkeytab.c b/admin/extkeytab.c index 1d7c0decc..34bba31d6 100644 --- a/admin/extkeytab.c +++ b/admin/extkeytab.c @@ -48,6 +48,7 @@ ext_keytab(int argc, char **argv) int ret; krb5_keytab kid; krb5_keytab_entry key_entry; + krb5_principal principal; if(argc < 2 || argc > 3){ krb5_warnx(context, "Usage: ext_keytab principal [file]"); @@ -60,11 +61,12 @@ ext_keytab(int argc, char **argv) return 0; } - ret = krb5_parse_name (context, argv[1], &ent.principal); + ret = krb5_parse_name (context, argv[1], &principal); if (ret) { krb5_warn(context, ret, "krb5_parse_name"); goto cleanup1; } + ent.principal = principal; ret = db->fetch(context, db, &ent); if (ret) { @@ -73,7 +75,10 @@ ext_keytab(int argc, char **argv) goto cleanup1; } + key_entry.principal = principal; +#if 0 krb5_copy_principal (context, ent.principal, &key_entry.principal); +#endif key_entry.vno = ent.kvno; /* XXX XXX XXX XXX */ key_entry.keyblock.keytype = ent.keys.val[0].key.keytype; diff --git a/admin/get.c b/admin/get.c index 2631b81ff..6f4f8732b 100644 --- a/admin/get.c +++ b/admin/get.c @@ -47,19 +47,24 @@ get_entry(int argc, char **argv) int ret; hdb_entry ent; int i; + krb5_principal principal; if(argc != 2) { krb5_warnx(context, "Usage: get_entry principal"); return 0; } - krb5_parse_name(context, argv[1], &ent.principal); - if((ret = hdb_open(context, &db, database, O_RDONLY, 0600))) { krb5_warn(context, ret, "hdb_open"); return 0; } + krb5_parse_name(context, argv[1], &principal); + + memset (&ent, 0, sizeof(ent)); + + ent.principal = principal; + ret = db->fetch(context, db, &ent); switch(ret){ @@ -70,6 +75,8 @@ get_entry(int argc, char **argv) char buf[128]; char *name; + krb5_free_principal(context, principal); + krb5_unparse_name(context, ent.principal, &name); printf("Principal: %s\n", name); free(name); @@ -126,7 +133,7 @@ get_entry(int argc, char **argv) krb5_warn(context, ret, "db->fetch"); break; } - memset(&ent, 0, sizeof(ent)); + hdb_free_entry (context, &ent); db->close(context, db); return 0; } diff --git a/admin/mod.c b/admin/mod.c index a28c2085d..841532eec 100644 --- a/admin/mod.c +++ b/admin/mod.c @@ -45,7 +45,10 @@ doit2(HDB *db, hdb_entry *ent) { char buf[1024]; int ret; + krb5_principal hata; + hata = ent->principal; + ret = db->fetch(context, db, ent); switch(ret){ @@ -53,6 +56,7 @@ doit2(HDB *db, hdb_entry *ent) krb5_warnx(context, "Entry not found in database"); return; case 0: + krb5_free_principal (context, hata); break; default: krb5_err(context, 1, ret, "dbget"); @@ -81,6 +85,8 @@ doit(const char *principal) HDB *db; hdb_entry ent; krb5_error_code ret; + + memset(&ent, 0, sizeof(ent)); if((ret = hdb_open(context, &db, database, O_RDWR, 0600))){ krb5_warn(context, ret, "hdb_open");