diff options
Diffstat (limited to 'src/resolv')
-rw-r--r-- | src/resolv/async_resolv.c | 18 | ||||
-rw-r--r-- | src/resolv/async_resolv.h | 2 |
2 files changed, 12 insertions, 8 deletions
diff --git a/src/resolv/async_resolv.c b/src/resolv/async_resolv.c index 0a2c5189..dda28857 100644 --- a/src/resolv/async_resolv.c +++ b/src/resolv/async_resolv.c @@ -2048,8 +2048,7 @@ static struct ares_srv_reply *reply_priority_sort(struct ares_srv_reply *list) return list; } -static int reply_weight_rearrange(TALLOC_CTX *mem_ctx, - int len, +static int reply_weight_rearrange(int len, struct ares_srv_reply **start, struct ares_srv_reply **end) { @@ -2059,12 +2058,13 @@ static int reply_weight_rearrange(TALLOC_CTX *mem_ctx, struct ares_srv_reply *r, *prev, *tmp; struct ares_srv_reply *new_start = NULL; struct ares_srv_reply *new_end = NULL; + int ret; if (len <= 1) { return EOK; } - totals = talloc_array(mem_ctx, int, len); + totals = talloc_array(NULL, int, len); if (!totals) { return ENOMEM; } @@ -2122,7 +2122,8 @@ static int reply_weight_rearrange(TALLOC_CTX *mem_ctx, if (r == NULL || totals[i] == -1) { DEBUG(1, ("Bug: did not select any server!\n")); - return EIO; + ret = EIO; + goto done; } /* remove r from the old list */ @@ -2146,12 +2147,15 @@ static int reply_weight_rearrange(TALLOC_CTX *mem_ctx, /* return the rearranged list */ *start = new_start; *end = new_end; + ret = EOK; + +done: talloc_free(totals); - return EOK; + return ret; } int -resolv_sort_srv_reply(TALLOC_CTX *mem_ctx, struct ares_srv_reply **reply) +resolv_sort_srv_reply(struct ares_srv_reply **reply) { int ret; struct ares_srv_reply *pri_start, *pri_end, *next, *prev_end; @@ -2184,7 +2188,7 @@ resolv_sort_srv_reply(TALLOC_CTX *mem_ctx, struct ares_srv_reply **reply) /* rearrange each priority level according to the weight field */ next = pri_end->next; pri_end->next = NULL; - ret = reply_weight_rearrange(mem_ctx, len, &pri_start, &pri_end); + ret = reply_weight_rearrange(len, &pri_start, &pri_end); if (ret) { DEBUG(1, ("Error rearranging priority level [%d]: %s\n", ret, strerror(ret))); diff --git a/src/resolv/async_resolv.h b/src/resolv/async_resolv.h index 2895753b..919ba370 100644 --- a/src/resolv/async_resolv.h +++ b/src/resolv/async_resolv.h @@ -148,7 +148,7 @@ int resolv_getsrv_recv(TALLOC_CTX *mem_ctx, /* This is an implementation of section "Usage rules" of RFC 2782 */ int -resolv_sort_srv_reply(TALLOC_CTX *mem_ctx, struct ares_srv_reply **reply); +resolv_sort_srv_reply(struct ares_srv_reply **reply); /** Get TXT record **/ struct tevent_req *resolv_gettxt_send(TALLOC_CTX *mem_ctx, |