pull up r18748 from trunk
authorTom Yu <tlyu@mit.edu>
Wed, 8 Nov 2006 23:44:23 +0000 (23:44 +0000)
committerTom Yu <tlyu@mit.edu>
Wed, 8 Nov 2006 23:44:23 +0000 (23:44 +0000)
 r18748@cathode-dark-space:  raeburn | 2006-10-27 23:06:30 -0400
 ticket: new
 subject: don't confuse profile iterator in 425 princ conversion
 target_version: 1.6
 tags: pullup

 The profile iterator code hangs onto and uses the list of names passed
 in.  The krb5_425_conv_principal code reuses that array when the
 iterator may still be used.

 * conv_princ.c (krb5_425_conv_principal): Use separate name arrays for
 the iterator and the v4_realm lookup that may be done inside the
 iteration loop.

ticket: 4534
version_fixed: 1.6

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-6@18772 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/krb/conv_princ.c

index 67768835f2f5411c9d73c2fd01a1bb3a14651e51..5648b28f769eb5263d80ed46451437317da22f84 100644 (file)
@@ -253,7 +253,7 @@ krb5_425_conv_principal(krb5_context context, const char *name, const char *inst
      krb5_error_code retval;
      char *domain, *cp;
      char **full_name = 0;
-     const char *names[5];
+     const char *names[2], *names2[5];
      void*     iterator = NULL;
      char** v4realms = NULL;
      char* realm_name = NULL;
@@ -262,9 +262,9 @@ krb5_425_conv_principal(krb5_context context, const char *name, const char *inst
      /* First, convert the realm, since the v4 realm is not necessarily the same as the v5 realm
         To do that, iterate over all the realms in the config file, looking for a matching 
         v4_realm line */
-     names [0] = "realms";
-     names [1] = NULL;
-     retval = profile_iterator_create (context -> profile, names, PROFILE_ITER_LIST_SECTION | PROFILE_ITER_SECTIONS_ONLY, &iterator);
+     names2 [0] = "realms";
+     names2 [1] = NULL;
+     retval = profile_iterator_create (context -> profile, names2, PROFILE_ITER_LIST_SECTION | PROFILE_ITER_SECTIONS_ONLY, &iterator);
      while (retval == 0) {
        retval = profile_iterator (&iterator, &realm_name, &dummy_value);
        if ((retval == 0) && (realm_name != NULL)) {
@@ -340,7 +340,7 @@ krb5_425_conv_principal(krb5_context context, const char *name, const char *inst
          }
      }
      
-not_service:   
+not_service:
      retval = krb5_build_principal(context, princ, strlen(realm), realm, name,
                                   instance, NULL);
      if (iterator) profile_iterator_free (&iterator);