From d444a7c3705df4bb7b9f53ded979d0abfadcf8db Mon Sep 17 00:00:00 2001 From: Johan Danielsson Date: Thu, 1 Apr 1999 18:23:14 +0000 Subject: [PATCH] add support for adding an extra set of addresses git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@5837 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/context.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++ lib/krb5/krb5.h | 1 + 2 files changed, 54 insertions(+) diff --git a/lib/krb5/context.c b/lib/krb5/context.c index 1248f8f74..a8b592f51 100644 --- a/lib/krb5/context.c +++ b/lib/krb5/context.c @@ -129,6 +129,23 @@ krb5_init_context(krb5_context *context) if(tmp) roken_gethostby_setup(p->http_proxy, tmp); krb5_set_default_realm(p, NULL); + + { + krb5_addresses addresses; + char **adr, **a; + adr = krb5_config_get_strings(p, NULL, + "libdefaults", + "extra_addresses", + NULL); + memset(&addresses, 0, sizeof(addresses)); + for(a = adr; a && *a; a++) { + krb5_parse_address(p, *a, &addresses); + krb5_add_extra_addresses(p, &addresses); + krb5_free_addresses(p, &addresses); + } + krb5_config_free_strings(adr); + } + *context = p; return 0; } @@ -243,3 +260,39 @@ krb5_get_use_admin_kdc (krb5_context context) { return context->use_admin_kdc; } + +krb5_error_code +krb5_add_extra_addresses(krb5_context context, krb5_addresses *addresses) +{ + + if(context->extra_addresses) + return krb5_append_addresses(context, + context->extra_addresses, addresses); + else + return krb5_set_extra_addresses(context, addresses); +} + +krb5_error_code +krb5_set_extra_addresses(krb5_context context, krb5_addresses *addresses) +{ + if(context->extra_addresses) { + krb5_free_addresses(context, context->extra_addresses); + free(context->extra_addresses); + } + if(context->extra_addresses == NULL) { + context->extra_addresses = malloc(sizeof(*context->extra_addresses)); + if(context->extra_addresses == NULL) + return ENOMEM; + } + return copy_HostAddresses(addresses, context->extra_addresses); +} + +krb5_error_code +krb5_get_extra_addresses(krb5_context context, krb5_addresses *addresses) +{ + if(context->extra_addresses == NULL) { + memset(addresses, 0, sizeof(*addresses)); + return 0; + } + return copy_HostAddresses(context->extra_addresses, addresses); +} diff --git a/lib/krb5/krb5.h b/lib/krb5/krb5.h index a6176f18d..5e77b6c4a 100644 --- a/lib/krb5/krb5.h +++ b/lib/krb5/krb5.h @@ -363,6 +363,7 @@ typedef struct krb5_context_data { krb5_boolean log_utc; const char *default_keytab; krb5_boolean use_admin_kdc; + krb5_addresses *extra_addresses; } krb5_context_data; enum {