enum act_return dns_action_do_resolve(struct act_rule *rule, struct proxy *px,
struct session *sess, struct stream *s, int flags)
{
- struct connection *cli_conn;
struct dns_resolution *resolution;
+ struct sample *smp;
+ char *fqdn;
/* we have a response to our DNS resolution */
if (s->dns_ctx.dns_requester && s->dns_ctx.dns_requester->resolution != NULL) {
}
/* need to configure and start a new DNS resolution */
- cli_conn = objt_conn(sess->origin);
- if (cli_conn && conn_ctrl_ready(cli_conn)) {
- struct sample *smp;
- char *fqdn;
-
- conn_get_from_addr(cli_conn);
+ smp = sample_fetch_as_type(px, sess, s, SMP_OPT_DIR_REQ|SMP_OPT_FINAL, rule->arg.dns.expr, SMP_T_STR);
+ if (smp == NULL)
+ return ACT_RET_CONT;
- smp = sample_fetch_as_type(px, sess, s, SMP_OPT_DIR_REQ|SMP_OPT_FINAL, rule->arg.dns.expr, SMP_T_STR);
- if (smp == NULL)
- return ACT_RET_CONT;
+ fqdn = smp->data.u.str.area;
+ if (action_prepare_for_resolution(s, fqdn) == -1)
+ return ACT_RET_ERR;
- fqdn = smp->data.u.str.area;
- if (action_prepare_for_resolution(s, fqdn) == -1) {
- return ACT_RET_ERR;
- }
-
- s->dns_ctx.parent = rule;
- dns_link_resolution(s, OBJ_TYPE_STREAM, 0);
- dns_trigger_resolution(s->dns_ctx.dns_requester);
- }
+ s->dns_ctx.parent = rule;
+ dns_link_resolution(s, OBJ_TYPE_STREAM, 0);
+ dns_trigger_resolution(s->dns_ctx.dns_requester);
return ACT_RET_YIELD;
}