mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-24 23:31:40 +02:00
MINOR: resolvers: new function find_srvrq_answer_record()
This function search for a SRV answer item associated to a requester whose type is server. This is mainly useful to "link" a server to its SRV record when no additional record were found to configure the IP address. This patch is required by a bug fix.
This commit is contained in:
parent
77f860699c
commit
6a8d11dc80
@ -31,6 +31,7 @@ extern unsigned int resolv_failed_resolutions;
|
||||
struct resolvers *find_resolvers_by_id(const char *id);
|
||||
struct resolv_srvrq *find_srvrq_by_name(const char *name, struct proxy *px);
|
||||
struct resolv_srvrq *new_resolv_srvrq(struct server *srv, char *fqdn);
|
||||
struct resolv_answer_item *find_srvrq_answer_record(const struct resolv_requester *requester);
|
||||
|
||||
int resolv_str_to_dn_label(const char *str, int str_len, char *dn, int dn_len);
|
||||
int resolv_dn_label_to_str(const char *dn, int dn_len, char *str, int str_len);
|
||||
|
@ -224,6 +224,37 @@ struct resolv_srvrq *new_resolv_srvrq(struct server *srv, char *fqdn)
|
||||
}
|
||||
|
||||
|
||||
/* finds and return the SRV answer item associated to a requester (whose type is 'server').
|
||||
*
|
||||
* returns NULL in case of error or not found.
|
||||
*/
|
||||
struct resolv_answer_item *find_srvrq_answer_record(const struct resolv_requester *requester)
|
||||
{
|
||||
struct resolv_resolution *res;
|
||||
struct resolv_answer_item *item;
|
||||
struct server *srv;
|
||||
|
||||
if (!requester)
|
||||
return NULL;
|
||||
|
||||
if ((srv = objt_server(requester->owner)) == NULL)
|
||||
return NULL;
|
||||
/* check if the server is managed by a SRV record */
|
||||
if (srv->srvrq == NULL)
|
||||
return NULL;
|
||||
|
||||
res = srv->srvrq->requester->resolution;
|
||||
/* search an ANSWER record whose target points to the server's hostname and whose port is
|
||||
* the same as server's svc_port */
|
||||
list_for_each_entry(item, &res->response.answer_list, list) {
|
||||
if (resolv_hostname_cmp(srv->hostname_dn, item->target, srv->hostname_dn_len) == 0 &&
|
||||
(srv->svc_port == item->port))
|
||||
return item;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 2 bytes random generator to generate DNS query ID */
|
||||
static inline uint16_t resolv_rnd16(void)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user