struct Timer i_reconn_timer; /**< when to reconnect the connection */
struct Timer i_request_timer; /**< when the current request times out */
struct IAuthFlags i_flags; /**< connection state/status/flags */
- struct DNSQuery i_query; /**< DNS lookup for iauth server */
unsigned int i_recvM; /**< messages received */
unsigned int i_sendM; /**< messages sent */
unsigned int i_recvK; /**< kilobytes received */
assert(format != 0);
vd.vd_format = format;
va_start(vd.vd_args, format);
- sendwallto_group_butone(&me, WALL_DESYNCH, NULL, "IAuth protocol violation: %v", &vd);
+ sendto_opmask_butone(NULL, SNO_CONNEXIT, "IAuth protocol violation: %v", &vd);
va_end(vd.vd_args);
}
* @param[in] vptr Pointer to the IAuth struct.
* @param[in] he DNS reply parameters.
*/
-static void iauth_dns_callback(void *vptr, struct DNSReply *he)
+static void iauth_dns_callback(void *vptr, const struct irc_in_addr *addr, const char *h_name)
{
struct IAuth *iauth = vptr;
- if (!he) {
+ if (!addr) {
log_write(LS_IAUTH, L_NOTICE, 0, "IAuth connection to %s failed: host lookup failed", i_host(iauth));
} else {
- memcpy(&i_addr(iauth).addr, &he->addr, sizeof(i_addr(iauth).addr));
+ memcpy(&i_addr(iauth).addr, addr, sizeof(i_addr(iauth).addr));
if (!irc_in_addr_valid(&i_addr(iauth).addr)) {
log_write(LS_IAUTH, L_NOTICE, 0, "IAuth connection to %s failed: host came back as unresolved", i_host(iauth));
return;
log_write(LS_IAUTH, L_DEBUG, 0, "IAuth attempt connection to %s port %p.", i_host(iauth), i_port(iauth));
if (!irc_in_addr_valid(&i_addr(iauth).addr)
&& !ircd_aton(&i_addr(iauth).addr, i_host(iauth))) {
- i_query(iauth).vptr = iauth;
- i_query(iauth).callback = iauth_dns_callback;
- gethost_byname(i_host(iauth), &i_query(iauth));
+ gethost_byname(i_host(iauth), iauth_dns_callback, iauth);
return;
}
local = irc_in_addr_is_ipv4(&i_addr(iauth).addr) ? &VirtualHost_v4 : &VirtualHost_v6;
iauth_dispose_request(iauth_active, cli_iauth(cptr));
cli_iauth(cptr) = NULL;
}
- if (!i_GetConnected(iauth_active))
- return;
- iauth_send(iauth_active, "ExitUser %x", cptr);
- iauth_write(iauth_active);
+ if (iauth_active && i_GetConnected(iauth_active)) {
+ iauth_send(iauth_active, "ExitUser %x", cptr);
+ iauth_write(iauth_active);
+ }
}
/** Find pending request with a particular ID.
static void iauth_dispose_request(struct IAuth *iauth, struct IAuthRequest *iar)
{
assert(iar->iar_client != NULL);
- if (iar->iar_timed)
+ if (iar->iar_timed && t_active(&i_request_timer(iauth)))
timer_del(&i_request_timer(iauth));
cli_iauth(iar->iar_client) = NULL;
iar->iar_prev->iar_next = iar->iar_next;