From 67693d72ed7add10e482a87b3dba23a967c886c8 Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Sat, 23 Sep 2000 18:04:49 +0000 Subject: [PATCH] (set_address): fix bad return of pointer to automatic data git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@9082 ec53bebd-3082-4978-b11e-865c3cabbd6b --- kdc/524.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/kdc/524.c b/kdc/524.c index dd55684ef..21a02957f 100644 --- a/kdc/524.c +++ b/kdc/524.c @@ -118,7 +118,8 @@ verify_flags (const EncTicketPart *et, /* * set the `et->caddr' to the most appropriate address to use, where - * `addr' is the address the request was received from. */ + * `addr' is the address the request was received from. + */ static krb5_error_code set_address (EncTicketPart *et, @@ -126,29 +127,37 @@ set_address (EncTicketPart *et, const char *from) { krb5_error_code ret; - krb5_address v4_addr; + krb5_address *v4_addr; - ret = krb5_sockaddr2address(addr, &v4_addr); + v4_addr = malloc (sizeof(*v4_addr)); + if (v4_addr == NULL) + return ENOMEM; + + ret = krb5_sockaddr2address(addr, v4_addr); if(ret) { + free (v4_addr); kdc_log(0, "Failed to convert address (%s)", from); return ret; } - if (et->caddr && !krb5_address_search (context, &v4_addr, et->caddr)) { + if (et->caddr && !krb5_address_search (context, v4_addr, et->caddr)) { kdc_log(0, "Incorrect network address (%s)", from); - krb5_free_address(context, &v4_addr); + krb5_free_address(context, v4_addr); + free (v4_addr); return KRB5KRB_AP_ERR_BADADDR; } - if(v4_addr.addr_type == KRB5_ADDRESS_INET) { + if(v4_addr->addr_type == KRB5_ADDRESS_INET) { /* we need to collapse the addresses in the ticket to a single address; best guess is to use the address the connection came from */ free_HostAddresses(et->caddr); - et->caddr->val = &v4_addr; + et->caddr->val = v4_addr; et->caddr->len = 1; - } else - krb5_free_address(context, &v4_addr); + } else { + krb5_free_address(context, v4_addr); + free(v4_addr); + } return 0; }