From 46569a331bac162950cc7c35d88c833adf548d11 Mon Sep 17 00:00:00 2001 From: Johan Danielsson Date: Sat, 3 Jan 1998 21:14:31 +0000 Subject: [PATCH] Add context to all krb5_config_*get_*. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@4256 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/kadm5/init_c.c | 5 +- lib/krb5/config_file.c | 111 +++++++++++++++++++++++------------ lib/krb5/context.c | 8 +-- lib/krb5/get_host_realm.c | 4 +- lib/krb5/init_creds_pw.c | 12 ++-- lib/krb5/log.c | 6 +- lib/krb5/principal.c | 25 ++++---- lib/krb5/set_default_realm.c | 4 +- lib/krb5/verify_init.c | 5 +- 9 files changed, 111 insertions(+), 69 deletions(-) diff --git a/lib/kadm5/init_c.c b/lib/kadm5/init_c.c index 50c376442..35d787a7d 100644 --- a/lib/kadm5/init_c.c +++ b/lib/kadm5/init_c.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997, 1998 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -80,7 +80,8 @@ _kadm5_c_init_context(kadm5_client_context **ctx, if(params->mask & KADM5_CONFIG_ADMIN_SERVER) (*ctx)->admin_server = strdup(params->admin_server); else{ - const char *h = krb5_config_get_string(context->cf, + const char *h = krb5_config_get_string(context, + NULL, "realms", (*ctx)->realm, "admin_server", diff --git a/lib/krb5/config_file.c b/lib/krb5/config_file.c index 3fa72d311..bfc0a74d8 100644 --- a/lib/krb5/config_file.c +++ b/lib/krb5/config_file.c @@ -359,7 +359,8 @@ krb5_config_file_free (krb5_config_section *s) } const void * -krb5_config_get_next (krb5_config_section *c, +krb5_config_get_next (krb5_context context, + krb5_config_section *c, krb5_config_binding **pointer, int type, ...) @@ -368,13 +369,14 @@ krb5_config_get_next (krb5_config_section *c, va_list args; va_start(args, type); - ret = krb5_config_vget_next (c, pointer, type, args); + ret = krb5_config_vget_next (context, c, pointer, type, args); va_end(args); return ret; } const void * -krb5_config_vget_next (krb5_config_section *c, +krb5_config_vget_next (krb5_context context, + krb5_config_section *c, krb5_config_binding **pointer, int type, va_list args) @@ -386,7 +388,7 @@ krb5_config_vget_next (krb5_config_section *c, return NULL; if (*pointer == NULL) { - b = c; + b = (c != NULL) ? c : context->cf; p = va_arg(args, const char *); if (p == NULL) return NULL; @@ -418,7 +420,8 @@ krb5_config_vget_next (krb5_config_section *c, } const void * -krb5_config_get (krb5_config_section *c, +krb5_config_get (krb5_context context, + krb5_config_section *c, int type, ...) { @@ -426,97 +429,121 @@ krb5_config_get (krb5_config_section *c, va_list args; va_start(args, type); - ret = krb5_config_vget (c, type, args); + ret = krb5_config_vget (context, c, type, args); va_end(args); return ret; } const void * -krb5_config_vget (krb5_config_section *c, +krb5_config_vget (krb5_context context, + krb5_config_section *c, int type, va_list args) { krb5_config_binding *foo = NULL; - return krb5_config_vget_next (c, &foo, type, args); + return krb5_config_vget_next (context, c, &foo, type, args); } const krb5_config_binding * -krb5_config_get_list (krb5_config_section *c, +krb5_config_get_list (krb5_context context, + krb5_config_section *c, ...) { const krb5_config_binding *ret; va_list args; va_start(args, c); - ret = krb5_config_vget_list (c, args); + ret = krb5_config_vget_list (context, c, args); va_end(args); return ret; } const krb5_config_binding * -krb5_config_vget_list (krb5_config_section *c, +krb5_config_vget_list (krb5_context context, + krb5_config_section *c, va_list args) { - return krb5_config_vget (c, krb5_config_list, args); + return krb5_config_vget (context, c, krb5_config_list, args); } const char * -krb5_config_get_string (krb5_config_section *c, +krb5_config_get_string (krb5_context context, + krb5_config_section *c, ...) { const char *ret; va_list args; va_start(args, c); - ret = krb5_config_vget_string (c, args); + ret = krb5_config_vget_string (context, c, args); va_end(args); return ret; } const char * -krb5_config_vget_string (krb5_config_section *c, +krb5_config_vget_string (krb5_context context, + krb5_config_section *c, va_list args) { - return krb5_config_vget (c, krb5_config_string, args); + return krb5_config_vget (context, c, krb5_config_string, args); } char ** -krb5_config_vget_strings(krb5_config_section *c, +krb5_config_vget_strings(krb5_context context, + krb5_config_section *c, va_list args) { char **strings = NULL; int nstr = 0; krb5_config_binding *b = NULL; const char *p; - while((p = krb5_config_vget_next(c, &b, krb5_config_string, args))){ + while((p = krb5_config_vget_next(context, c, &b, + krb5_config_string, args))){ char *tmp = strdup(p); char *pos = NULL; char *s; + if(tmp == NULL) + goto cleanup; s = strtok_r(tmp, " \t", &pos); while(s){ - strings = realloc(strings, (nstr + 1) * sizeof(*strings)); + char **tmp = realloc(strings, (nstr + 1) * sizeof(*strings)); + if(tmp == NULL) + goto cleanup; + strings = tmp; strings[nstr] = strdup(s); nstr++; + if(strings[nstr-1] == NULL) + goto cleanup; s = strtok_r(NULL, " \t", &pos); } free(tmp); } if(nstr){ - strings = realloc(strings, (nstr + 1) * sizeof(*strings)); + char **tmp = realloc(strings, (nstr + 1) * sizeof(*strings)); + if(strings == NULL) + goto cleanup; + strings = tmp; strings[nstr] = NULL; } return strings; +cleanup: + while(nstr--) + free(strings[nstr]); + free(strings); + return NULL; + } char** -krb5_config_get_strings(krb5_config_section *c, +krb5_config_get_strings(krb5_context context, + krb5_config_section *c, ...) { va_list ap; char **ret; va_start(ap, c); - ret = krb5_config_vget_strings(c, ap); + ret = krb5_config_vget_strings(context, c, ap); va_end(ap); return ret; } @@ -533,37 +560,42 @@ krb5_config_free_strings(char **strings) } krb5_boolean -krb5_config_vget_bool (krb5_config_section *c, +krb5_config_vget_bool (krb5_context context, + krb5_config_section *c, va_list args) { const char *str; - str = krb5_config_vget_string (c, args); + str = krb5_config_vget_string (context, c, args); if(str == NULL) return FALSE; - if(strcmp(str, "yes") == 0 || strcmp(str, "true") == 0 || atoi(str)) + if(strcasecmp(str, "yes") == 0 || + strcasecmp(str, "true") == 0 || + atoi(str)) return TRUE; return FALSE; } krb5_boolean -krb5_config_get_bool (krb5_config_section *c, +krb5_config_get_bool (krb5_context context, + krb5_config_section *c, ...) { va_list ap; krb5_boolean ret; va_start(ap, c); - ret = krb5_config_vget_bool(c, ap); + ret = krb5_config_vget_bool(context, c, ap); va_end(ap); return ret; } int -krb5_config_vget_time (krb5_config_section *c, +krb5_config_vget_time (krb5_context context, + krb5_config_section *c, va_list args) { const char *str; - str = krb5_config_vget_string (c, args); + str = krb5_config_vget_string (context, c, args); if (str == NULL) return -1; else @@ -571,25 +603,27 @@ krb5_config_vget_time (krb5_config_section *c, } int -krb5_config_get_time (krb5_config_section *c, +krb5_config_get_time (krb5_context context, + krb5_config_section *c, ...) { int ret; va_list args; va_start(args, c); - ret = krb5_config_vget_time (c, args); + ret = krb5_config_vget_time (context, c, args); va_end(args); return ret; } int -krb5_config_vget_int (krb5_config_section *c, +krb5_config_vget_int (krb5_context context, + krb5_config_section *c, va_list args) { const char *str; - str = krb5_config_vget_string (c, args); + str = krb5_config_vget_string (context, c, args); if (str == NULL) return -1; else { @@ -605,14 +639,15 @@ krb5_config_vget_int (krb5_config_section *c, } int -krb5_config_get_int (krb5_config_section *c, +krb5_config_get_int (krb5_context context, + krb5_config_section *c, ...) { int ret; va_list args; va_start(args, c); - ret = krb5_config_vget_int (c, args); + ret = krb5_config_vget_int (context, c, args); va_end(args); return ret; } @@ -685,17 +720,17 @@ main(void) printf ("%d\n", krb5_config_parse_file ("/etc/krb5.conf", &c)); print_config (stdout, c); printf ("[libdefaults]ticket_lifetime = %s\n", - krb5_config_get_string (c, + krb5_config_get_string (context, c, "libdefaults", "ticket_lifetime", NULL)); printf ("[realms]foo = %s\n", - krb5_config_get_string (c, + krb5_config_get_string (context, c, "realms", "foo", NULL)); printf ("[realms]ATHENA.MIT.EDU/v4_instance_convert/lithium = %s\n", - krb5_config_get_string (c, + krb5_config_get_string (context, c, "realms", "ATHENA.MIT.EDU", "v4_instance_convert", diff --git a/lib/krb5/context.c b/lib/krb5/context.c index d4b0e74e2..c0eb77d1f 100644 --- a/lib/krb5/context.c +++ b/lib/krb5/context.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997, 1998 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -60,17 +60,17 @@ krb5_init_context(krb5_context *context) else krb5_config_parse_file (krb5_config_file, &p->cf); p->max_skew = 5 * 60; - val = krb5_config_get_time (p->cf, "libdefaults", "clockskew", NULL); + val = krb5_config_get_time (p, NULL, "libdefaults", "clockskew", NULL); if (val >= 0) p->max_skew = val; p->kdc_timeout = 3; - val = krb5_config_get_time (p->cf, "libdefaults", "kdc_timeout", NULL); + val = krb5_config_get_time (p, NULL, "libdefaults", "kdc_timeout", NULL); if(val >= 0) p->kdc_timeout = val; p->max_retries = 3; - val = krb5_config_get_int (p->cf, "libdefaults", "max_retries", NULL); + val = krb5_config_get_int (p, NULL, "libdefaults", "max_retries", NULL); if (val >= 0) p->max_retries = val; diff --git a/lib/krb5/get_host_realm.c b/lib/krb5/get_host_realm.c index 6a3137e4c..c28df32e5 100644 --- a/lib/krb5/get_host_realm.c +++ b/lib/krb5/get_host_realm.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997, 1998 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -87,7 +87,7 @@ krb5_get_host_realm(krb5_context context, (*realms)[0] = NULL; (*realms)[1] = NULL; - for(l = krb5_config_get_list (context->cf, + for(l = krb5_config_get_list (context, NULL, "domain_realm", NULL); l; diff --git a/lib/krb5/init_creds_pw.c b/lib/krb5/init_creds_pw.c index 3356d25ef..c4f97bcf8 100644 --- a/lib/krb5/init_creds_pw.c +++ b/lib/krb5/init_creds_pw.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997, 1998 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -48,14 +48,14 @@ get_config_time (krb5_context context, { int ret; - ret = krb5_config_get_time (context->cf, + ret = krb5_config_get_time (context, NULL, "realms", realm, name, NULL); if (ret >= 0) return ret; - ret = krb5_config_get_time (context->cf, + ret = krb5_config_get_time (context, NULL, "libdefaults", name, NULL); @@ -69,12 +69,14 @@ get_config_bool (krb5_context context, char *realm, char *name) { - return krb5_config_get_bool (context->cf, + return krb5_config_get_bool (context, + NULL, "realms", realm, name, NULL) - || krb5_config_get_bool (context->cf, + || krb5_config_get_bool (context, + NULL, "libdefaults", name, NULL); diff --git a/lib/krb5/log.c b/lib/krb5/log.c index 1fbeb94ec..e2589e529 100644 --- a/lib/krb5/log.c +++ b/lib/krb5/log.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997, 1998 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -325,9 +325,9 @@ krb5_openlog(krb5_context context, if(ret) return ret; - p = krb5_config_get_strings(context->cf, "logging", program, NULL); + p = krb5_config_get_strings(context, NULL, "logging", program, NULL); if(p == NULL) - p = krb5_config_get_strings(context->cf, "logging", "default", NULL); + p = krb5_config_get_strings(context, NULL, "logging", "default", NULL); if(p){ for(q = p; *q; q++) ret = krb5_addlog_dest(context, *fac, *q); diff --git a/lib/krb5/principal.c b/lib/krb5/principal.c index f37cc9224..05876316f 100644 --- a/lib/krb5/principal.c +++ b/lib/krb5/principal.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997, 1998 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -476,15 +476,15 @@ krb5_425_conv_principal_ext(krb5_context context, instance = NULL; goto no_host; } - p = krb5_config_get_string(context->cf, "realms", realm, + p = krb5_config_get_string(context, NULL, "realms", realm, "v4_name_convert", "host", name, NULL); if(p == NULL) - p = krb5_config_get_string(context->cf, "libdefaults", + p = krb5_config_get_string(context, NULL, "libdefaults", "v4_name_convert", "host", name, NULL); if(p == NULL) goto no_host; name = p; - p = krb5_config_get_string(context->cf, "realms", realm, + p = krb5_config_get_string(context, NULL, "realms", realm, "v4_instance_convert", instance, NULL); if(p){ instance = p; @@ -512,7 +512,7 @@ krb5_425_conv_principal_ext(krb5_context context, } { char **domains, **d; - domains = krb5_config_get_strings(context->cf, "realms", realm, + domains = krb5_config_get_strings(context, NULL, "realms", realm, "v4_domains", NULL); for(d = domains; d && *d; d++){ snprintf(host, sizeof(host), "%s.%s", instance, *d); @@ -528,7 +528,7 @@ krb5_425_conv_principal_ext(krb5_context context, } - p = krb5_config_get_string(context->cf, "realms", realm, + p = krb5_config_get_string(context, NULL, "realms", realm, "default_domain", NULL); if(p == NULL){ /* should this be an error or should it silently @@ -545,7 +545,7 @@ krb5_425_conv_principal_ext(krb5_context context, krb5_free_principal(context, pr); return HEIM_ERR_V4_PRINC_NO_CONV; no_host: - p = krb5_config_get_string(context->cf, + p = krb5_config_get_string(context, NULL, "realms", realm, "v4_name_convert", @@ -553,7 +553,7 @@ no_host: name, NULL); if(p == NULL) - p = krb5_config_get_string(context->cf, + p = krb5_config_get_string(context, NULL, "libdefaults", "v4_name_convert", "plain", @@ -578,7 +578,8 @@ krb5_425_conv_principal(krb5_context context, const char *realm, krb5_principal *princ) { - krb5_boolean resolve = krb5_config_get_bool(context->cf, + krb5_boolean resolve = krb5_config_get_bool(context, + NULL, "libdefaults", "v4_instance_resolve", NULL); @@ -593,14 +594,16 @@ name_convert(krb5_context context, const char *name, const char *realm, const char *section) { const krb5_config_binding *l; - l = krb5_config_get_list (context->cf, + l = krb5_config_get_list (context, + NULL, "realms", realm, "v4_name_convert", section, NULL); if(l == NULL) - l = krb5_config_get_list (context->cf, + l = krb5_config_get_list (context, + NULL, "libdefaults", "v4_name_convert", section, diff --git a/lib/krb5/set_default_realm.c b/lib/krb5/set_default_realm.c index 31a5b68fc..d370a2027 100644 --- a/lib/krb5/set_default_realm.c +++ b/lib/krb5/set_default_realm.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997, 1998 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -49,7 +49,7 @@ krb5_set_default_realm(krb5_context context, char **realms = NULL; if (realm == NULL){ - foo = krb5_config_get_string (context->cf, + foo = krb5_config_get_string (context, NULL, "libdefaults", "default_realm", NULL); diff --git a/lib/krb5/verify_init.c b/lib/krb5/verify_init.c index 980d4e568..45d152dbd 100644 --- a/lib/krb5/verify_init.c +++ b/lib/krb5/verify_init.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997, 1998 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -155,7 +155,8 @@ krb5_verify_init_creds(krb5_context context, if (ret) { if (((options->flags & KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL) && options->ap_req_nofail == 1) || - krb5_config_get_bool (context->cf, + krb5_config_get_bool (context, + NULL, "libdefaults", "verify_ap_req_nofail", NULL)) {