svn rev #24987: trunk/src/kadmin/cli/

ghudson@MIT.EDU ghudson at MIT.EDU
Thu Jun 23 15:26:01 EDT 2011


http://src.mit.edu/fisheye/changelog/krb5/?cs=24987
Commit By: ghudson
Log Message:
Fix a minor memory leak in kadmin.

kadmin_getprinc() was using the variable "canon" for two purposes.
After r22785, canon wasn't freed between constructions, so the first
value was leaked.  Fix by using separate variables for separate
strings.


Changed Files:
U   trunk/src/kadmin/cli/kadmin.c
Modified: trunk/src/kadmin/cli/kadmin.c
===================================================================
--- trunk/src/kadmin/cli/kadmin.c	2011-06-23 19:25:58 UTC (rev 24986)
+++ trunk/src/kadmin/cli/kadmin.c	2011-06-23 19:26:01 UTC (rev 24987)
@@ -1428,7 +1428,7 @@
     kadm5_principal_ent_rec dprinc;
     krb5_principal princ = NULL;
     krb5_error_code retval;
-    char *canon = NULL, *modcanon = NULL;
+    char *canon = NULL, *princstr = NULL, *modprincstr = NULL;
     int i;
     size_t j;
 
@@ -1455,18 +1455,18 @@
         com_err("get_principal", retval, _("while retrieving \"%s\"."), canon);
         goto cleanup;
     }
-    retval = krb5_unparse_name(context, dprinc.principal, &canon);
+    retval = krb5_unparse_name(context, dprinc.principal, &princstr);
     if (retval) {
-        com_err("get_principal", retval, _("while canonicalizing principal"));
+        com_err("get_principal", retval, _("while unparsing principal"));
         goto cleanup;
     }
-    retval = krb5_unparse_name(context, dprinc.mod_name, &modcanon);
+    retval = krb5_unparse_name(context, dprinc.mod_name, &modprincstr);
     if (retval) {
-        com_err("get_principal", retval, _("while unparsing modname"));
+        com_err("get_principal", retval, _("while unparsing principal"));
         goto cleanup;
     }
     if (argc == 2) {
-        printf(_("Principal: %s\n"), canon);
+        printf(_("Principal: %s\n"), princstr);
         printf(_("Expiration date: %s\n"), dprinc.princ_expire_time ?
                strdate(dprinc.princ_expire_time) : _("[never]"));
         printf(_("Last password change: %s\n"), dprinc.last_pwd_change ?
@@ -1478,7 +1478,7 @@
         printf(_("Maximum renewable life: %s\n"),
                strdur(dprinc.max_renewable_life));
         printf(_("Last modified: %s (%s)\n"), strdate(dprinc.mod_date),
-               modcanon);
+               modprincstr);
         printf(_("Last successful authentication: %s\n"),
                dprinc.last_success ? strdate(dprinc.last_success) :
                _("[never]"));
@@ -1518,8 +1518,8 @@
     } else {
         printf("\"%s\"\t%d\t%d\t%d\t%d\t\"%s\"\t%d\t%d\t%d\t%d\t\"%s\""
                "\t%d\t%d\t%d\t%d\t%d",
-               canon, dprinc.princ_expire_time, dprinc.last_pwd_change,
-               dprinc.pw_expiration, dprinc.max_life, modcanon,
+               princstr, dprinc.princ_expire_time, dprinc.last_pwd_change,
+               dprinc.pw_expiration, dprinc.max_life, modprincstr,
                dprinc.mod_date, dprinc.attributes, dprinc.kvno,
                dprinc.mkvno, dprinc.policy ? dprinc.policy : "[none]",
                dprinc.max_renewable_life, dprinc.last_success,
@@ -1536,8 +1536,9 @@
 cleanup:
     krb5_free_principal(context, princ);
     kadm5_free_principal_ent(handle, &dprinc);
-    free(modcanon);
     free(canon);
+    free(princstr);
+    free(modprincstr);
 }
 
 void




More information about the cvs-krb5 mailing list