diff options
Diffstat (limited to 'src/lib/libc')
| -rw-r--r-- | src/lib/libc/net/getrrsetbyname.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/lib/libc/net/getrrsetbyname.c b/src/lib/libc/net/getrrsetbyname.c index f00ac2b021..60610e4943 100644 --- a/src/lib/libc/net/getrrsetbyname.c +++ b/src/lib/libc/net/getrrsetbyname.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: getrrsetbyname.c,v 1.7 2003/03/07 07:34:14 itojun Exp $ */ | 1 | /* $OpenBSD: getrrsetbyname.c,v 1.8 2004/07/18 19:07:38 jakob Exp $ */ |
| 2 | 2 | ||
| 3 | /* | 3 | /* |
| 4 | * Copyright (c) 2001 Jakob Schlyter. All rights reserved. | 4 | * Copyright (c) 2001 Jakob Schlyter. All rights reserved. |
| @@ -100,7 +100,7 @@ getrrsetbyname(const char *hostname, unsigned int rdclass, | |||
| 100 | struct __res_state *_resp = _THREAD_PRIVATE(_res, _res, &_res); | 100 | struct __res_state *_resp = _THREAD_PRIVATE(_res, _res, &_res); |
| 101 | int result; | 101 | int result; |
| 102 | struct rrsetinfo *rrset = NULL; | 102 | struct rrsetinfo *rrset = NULL; |
| 103 | struct dns_response *response; | 103 | struct dns_response *response = NULL; |
| 104 | struct dns_rr *rr; | 104 | struct dns_rr *rr; |
| 105 | struct rdatainfo *rdata; | 105 | struct rdatainfo *rdata; |
| 106 | int length; | 106 | int length; |
| @@ -186,13 +186,11 @@ getrrsetbyname(const char *hostname, unsigned int rdclass, | |||
| 186 | rrset->rri_flags |= RRSET_VALIDATED; | 186 | rrset->rri_flags |= RRSET_VALIDATED; |
| 187 | 187 | ||
| 188 | /* copy name from answer section */ | 188 | /* copy name from answer section */ |
| 189 | length = strlen(response->answer->name); | 189 | rrset->rri_name = strdup(response->answer->name); |
| 190 | rrset->rri_name = malloc(length + 1); | ||
| 191 | if (rrset->rri_name == NULL) { | 190 | if (rrset->rri_name == NULL) { |
| 192 | result = ERRSET_NOMEMORY; | 191 | result = ERRSET_NOMEMORY; |
| 193 | goto fail; | 192 | goto fail; |
| 194 | } | 193 | } |
| 195 | strlcpy(rrset->rri_name, response->answer->name, length + 1); | ||
| 196 | 194 | ||
| 197 | /* count answers */ | 195 | /* count answers */ |
| 198 | rrset->rri_nrdatas = count_dns_rr(response->answer, rrset->rri_rdclass, | 196 | rrset->rri_nrdatas = count_dns_rr(response->answer, rrset->rri_rdclass, |
| @@ -240,6 +238,7 @@ getrrsetbyname(const char *hostname, unsigned int rdclass, | |||
| 240 | memcpy(rdata->rdi_data, rr->rdata, rr->size); | 238 | memcpy(rdata->rdi_data, rr->rdata, rr->size); |
| 241 | } | 239 | } |
| 242 | } | 240 | } |
| 241 | free_dns_response(response); | ||
| 243 | 242 | ||
| 244 | *res = rrset; | 243 | *res = rrset; |
| 245 | return (ERRSET_SUCCESS); | 244 | return (ERRSET_SUCCESS); |
| @@ -247,6 +246,8 @@ getrrsetbyname(const char *hostname, unsigned int rdclass, | |||
| 247 | fail: | 246 | fail: |
| 248 | if (rrset != NULL) | 247 | if (rrset != NULL) |
| 249 | freerrset(rrset); | 248 | freerrset(rrset); |
| 249 | if (response != NULL) | ||
| 250 | free_dns_response(response); | ||
| 250 | return (result); | 251 | return (result); |
| 251 | } | 252 | } |
| 252 | 253 | ||
