aboutsummaryrefslogtreecommitdiff
path: root/src/lib/krb5/krb
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2005-01-03 19:30:18 +0000
committerKen Raeburn <raeburn@mit.edu>2005-01-03 19:30:18 +0000
commit0babe45929bd4ea488b7e05808fc37026938ac66 (patch)
treefb44a06a1ab9fc8e3f32a40450c714d24007556a /src/lib/krb5/krb
parentc5353b742898cafcc85f204f03c02445e05791d5 (diff)
downloadkrb5-0babe45929bd4ea488b7e05808fc37026938ac66.zip
krb5-0babe45929bd4ea488b7e05808fc37026938ac66.tar.gz
krb5-0babe45929bd4ea488b7e05808fc37026938ac66.tar.bz2
krb5_parse_name not thread-safe, not responsive to environment changes
As Ezra noted, krb5_parse_name saves away the default realm the first time it looks it up, and will never look it up again, even if the config file has changed, the context isn't the same one, etc. It also used a static variable which wasn't thread-safe. With this patch, we still won't catch changes in the config file specification after the default realm has been looked up for a given krb5_context, because it's cached in the context too, but this will at least be more responsive, and thread safe. * parse.c (krb5_parse_name): Don't cache the default realm name. ticket: new target_version: 1.4 tags: pullup git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16988 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/krb5/krb')
-rw-r--r--src/lib/krb5/krb/ChangeLog4
-rw-r--r--src/lib/krb5/krb/parse.c7
2 files changed, 9 insertions, 2 deletions
diff --git a/src/lib/krb5/krb/ChangeLog b/src/lib/krb5/krb/ChangeLog
index 46483ac..4b01bfc 100644
--- a/src/lib/krb5/krb/ChangeLog
+++ b/src/lib/krb5/krb/ChangeLog
@@ -1,3 +1,7 @@
+2005-01-03 Ken Raeburn <raeburn@mit.edu>
+
+ * parse.c (krb5_parse_name): Don't cache the default realm name.
+
2004-10-26 Tom Yu <tlyu@mit.edu>
* mk_req_ext.c (krb5_mk_req_extended): Free keyblock before
diff --git a/src/lib/krb5/krb/parse.c b/src/lib/krb5/krb/parse.c
index 50f7b22..cd23d14 100644
--- a/src/lib/krb5/krb/parse.c
+++ b/src/lib/krb5/krb/parse.c
@@ -73,8 +73,8 @@ krb5_parse_name(krb5_context context, const char *name, krb5_principal *nprincip
const char *parsed_realm = NULL;
int fcompsize[FCOMPNUM];
unsigned int realmsize = 0;
- static char *default_realm = NULL;
- static int default_realm_size = 0;
+ char *default_realm = NULL;
+ int default_realm_size = 0;
char *tmpdata;
krb5_principal principal;
krb5_error_code retval;
@@ -211,6 +211,7 @@ krb5_parse_name(krb5_context context, const char *name, krb5_principal *nprincip
if (tmpdata == 0) {
krb5_xfree(principal->data);
krb5_xfree(principal);
+ krb5_xfree(default_realm);
return ENOMEM;
}
krb5_princ_set_realm_length(context, principal, realmsize);
@@ -224,6 +225,7 @@ krb5_parse_name(krb5_context context, const char *name, krb5_principal *nprincip
krb5_xfree(krb5_princ_realm(context, principal)->data);
krb5_xfree(principal->data);
krb5_xfree(principal);
+ krb5_xfree(default_realm);
return(ENOMEM);
}
krb5_princ_component(context, principal, i)->data = tmpdata2;
@@ -276,6 +278,7 @@ krb5_parse_name(krb5_context context, const char *name, krb5_principal *nprincip
principal->magic = KV5M_PRINCIPAL;
principal->realm.magic = KV5M_DATA;
*nprincipal = principal;
+ krb5_xfree(default_realm);
return(0);
}