* tcl_kadm5.c (unparse_principal_ent): don't unparse allocated
authorBarry Jaspan <bjaspan@mit.edu>
Fri, 18 Oct 1996 17:24:33 +0000 (17:24 +0000)
committerBarry Jaspan <bjaspan@mit.edu>
Fri, 18 Oct 1996 17:24:33 +0000 (17:24 +0000)
  fields that were not requested in mask to get_principal

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@9198 dc483132-0cff-0310-8789-dd5450dbe970

src/kadmin/testing/util/ChangeLog
src/kadmin/testing/util/tcl_kadm5.c

index d77ad746ea66a3a023af38a081828b13ee10466d..84a5977b42688a86e3fcd8777d547b53b0c9e276 100644 (file)
@@ -1,3 +1,8 @@
+Fri Oct 18 13:23:46 1996  Barry Jaspan  <bjaspan@mit.edu>
+
+       * tcl_kadm5.c (unparse_principal_ent): don't unparse allocated
+       fields that were not requested in mask to get_principal
+
 Mon Oct 14 07:01:34 1996  Ezra Peisach  <epeisach@kangaroo.mit.edu>
 
        * Makefile.in: Only attempt to build programs if Tcl present.
index b102cdfc2a3c1016ffb1fc9d249130b6fb9fa78b..515056a3c6ef7ddfc5f2190833c66978961cc4c7 100644 (file)
@@ -631,7 +631,8 @@ static int parse_policy_mask(Tcl_Interp *interp, char *str, krb5_int32 *flags)
 }
 
 
-static Tcl_DString *unparse_principal_ent(kadm5_principal_ent_t princ)
+static Tcl_DString *unparse_principal_ent(kadm5_principal_ent_t princ,
+                                         krb5_int32 mask)
 {
      Tcl_DString *str, *tmp_dstring;
      char *tmp;
@@ -649,14 +650,17 @@ static Tcl_DString *unparse_principal_ent(kadm5_principal_ent_t princ)
              /* code for krb5_parse_name that the pointer passed into */
              /* it should be initialized to 0 if I want it do be */
              /* allocated automatically. */
-     if (krb5_ret = krb5_unparse_name(context, princ->principal, &tmp)) {
-         /* XXX Do we want to return an error?  Not sure. */
-         Tcl_DStringAppendElement(str, "[unparseable principal]");
-     }
-     else {
-         Tcl_DStringAppendElement(str, tmp);
-         free(tmp);
-     }
+     if (mask & KADM5_PRINCIPAL) {
+         if ( krb5_ret = krb5_unparse_name(context, princ->principal, &tmp)) {
+              /* XXX Do we want to return an error?  Not sure. */
+              Tcl_DStringAppendElement(str, "[unparseable principal]");
+         }
+         else {
+              Tcl_DStringAppendElement(str, tmp);
+              free(tmp);
+         }
+     } else
+         Tcl_DStringAppendElement(str, "null");
 
      sprintf(buf, "%d", princ->princ_expire_time);
      Tcl_DStringAppendElement(str, buf);
@@ -671,22 +675,28 @@ static Tcl_DString *unparse_principal_ent(kadm5_principal_ent_t princ)
      Tcl_DStringAppendElement(str, buf);
 
      tmp = 0;
-     if (krb5_ret = krb5_unparse_name(context, princ->mod_name, &tmp)) {
-         /* XXX */
-         Tcl_DStringAppendElement(str, "[unparseable principal]");
-     }
-     else {
-         Tcl_DStringAppendElement(str, tmp);
-         free(tmp);
-     }
+     if (mask & KADM5_MOD_NAME) {
+         if (krb5_ret = krb5_unparse_name(context, princ->mod_name, &tmp)) {
+              /* XXX */
+              Tcl_DStringAppendElement(str, "[unparseable principal]");
+         }
+         else {
+              Tcl_DStringAppendElement(str, tmp);
+              free(tmp);
+         }
+     } else
+         Tcl_DStringAppendElement(str, "null");
 
      sprintf(buf, "%d", princ->mod_date);
      Tcl_DStringAppendElement(str, buf);
 
-     tmp_dstring = unparse_krb5_flags(princ->attributes);
-     Tcl_DStringAppendElement(str, tmp_dstring->string);
-     Tcl_DStringFree(tmp_dstring);
-     free(tmp_dstring);
+     if (mask & KADM5_ATTRIBUTES) {
+         tmp_dstring = unparse_krb5_flags(princ->attributes);
+         Tcl_DStringAppendElement(str, tmp_dstring->string);
+         Tcl_DStringFree(tmp_dstring);
+         free(tmp_dstring);
+     } else
+         Tcl_DStringAppendElement(str, "null");
 
      sprintf(buf, "%d", princ->kvno);
      Tcl_DStringAppendElement(str, buf);
@@ -1887,7 +1897,7 @@ int tcl_kadm5_get_principal(ClientData clientData, Tcl_Interp *interp,
 
      if (ret == KADM5_OK) {
          if (ent_var) {
-              ent_dstring = unparse_principal_ent(&ent);
+              ent_dstring = unparse_principal_ent(&ent, mask);
               if (! Tcl_SetVar(interp, ent_var, ent_dstring->string,
                                TCL_LEAVE_ERR_MSG)) {
                    Tcl_AppendElement(interp,