/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2019 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
assert(Idx >= 0);
- /* Nothing to do if DNS (and resolver subprocess) is disabled */
- if (!Conf_DNS)
- return;
-
#ifdef IDENTAUTH
/* Should we make an IDENT request? */
if (Conf_Ident)
if (Conf_NoticeBeforeRegistration) {
/* Send "NOTICE *" messages to the client */
#ifdef IDENTAUTH
- if (Conf_Ident)
- (void)Conn_WriteStr(Idx,
- "NOTICE * :*** Looking up your hostname and checking ident");
- else
+ if (Conf_Ident) {
+ if (Conf_DNS)
+ (void)Conn_WriteStr(Idx,
+ "NOTICE * :*** Looking up your hostname and checking ident");
+ else
+ (void)Conn_WriteStr(Idx,
+ "NOTICE * :*** Checking ident");
+ } else
#endif
+ if(Conf_DNS)
(void)Conn_WriteStr(Idx,
"NOTICE * :*** Looking up your hostname");
+ else
+ (void)Conn_WriteStr(Idx,
+ "NOTICE * :*** Processing your connection");
/* Send buffered data to the client, but break on errors
* because Handle_Write() would have closed the connection
* again in this case! */
return;
}
- Resolve_Addr(&My_Connections[Idx].proc_stat, &My_Connections[Idx].addr,
- ident_sock, cb_Read_Resolver_Result);
+ Resolve_Addr_Ident(&My_Connections[Idx].proc_stat,
+ &My_Connections[Idx].addr,
+ ident_sock, cb_Read_Resolver_Result);
}
/**
* the resolver results, so we don't have to worry to override settings
* from these commands here. */
if(Client_Type(c) == CLIENT_UNKNOWN) {
- strlcpy(My_Connections[i].host, readbuf,
- sizeof(My_Connections[i].host));
- Client_SetHostname(c, readbuf);
- if (Conf_NoticeBeforeRegistration)
- (void)Conn_WriteStr(i,
+ if (readbuf[0]) {
+ /* We got a hostname */
+ strlcpy(My_Connections[i].host, readbuf,
+ sizeof(My_Connections[i].host));
+ Client_SetHostname(c, readbuf);
+ if (Conf_NoticeBeforeRegistration)
+ (void)Conn_WriteStr(i,
"NOTICE * :*** Found your hostname: %s",
My_Connections[i].host);
+ }
#ifdef IDENTAUTH
++identptr;
if (*identptr) {
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "resolve.h"
-static void Do_ResolveAddr PARAMS(( const ng_ipaddr_t *Addr, int Sock, int w_fd ));
+static void Do_ResolveAddr_Ident PARAMS(( const ng_ipaddr_t *Addr, int Sock, int w_fd ));
static void Do_ResolveName PARAMS(( const char *Host, int w_fd ));
#ifdef WANT_IPV6
/**
- * Resolve IP (asynchronous!).
+ * Resolve IP address and do IDENT lookup asynchronously.
*/
GLOBAL bool
-Resolve_Addr(PROC_STAT * s, const ng_ipaddr_t *Addr, int identsock,
- void (*cbfunc) (int, short))
+Resolve_Addr_Ident(PROC_STAT * s, const ng_ipaddr_t *Addr, int identsock,
+ void (*cbfunc) (int, short))
{
int pipefd[2];
pid_t pid;
/* Sub process */
Log_Init_Subprocess("Resolver");
Conn_CloseAllSockets(identsock);
- Do_ResolveAddr(Addr, identsock, pipefd[1]);
+ Do_ResolveAddr_Ident(Addr, identsock, pipefd[1]);
Log_Exit_Subprocess("Resolver");
exit(0);
}
static void
-Do_ResolveAddr(const ng_ipaddr_t *Addr, int identsock, int w_fd)
+Do_ResolveAddr_Ident(const ng_ipaddr_t *Addr, int identsock, int w_fd)
{
/* Resolver sub-process: resolve IP address and write result into
* pipe to parent. */
size_t len;
array resolved_addr;
+ hostname[0] = '\0';
array_init(&resolved_addr);
ng_ipaddr_tostr_r(Addr, tmp_ip_str);
+
+ /* Skip DNS lookup when DNS is disabled; just return an empty ("") host
+ * name but still issue an IDENT query, if supported and enabled. */
+ if (!Conf_DNS)
+ goto dns_done;
+
Log_Subprocess(LOG_DEBUG, "Now resolving %s ...", tmp_ip_str);
if (!ReverseLookup(Addr, hostname, sizeof(hostname)))
goto dns_done;
ArrayWrite(w_fd, &resolved_addr);
array_free(&resolved_addr);
-} /* Do_ResolveAddr */
+} /* Do_ResolveAddr_Ident */
static void
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2010 by Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* Asynchronous resolver (header)
*/
-GLOBAL bool Resolve_Addr PARAMS((PROC_STAT * s, const ng_ipaddr_t * Addr,
+GLOBAL bool Resolve_Addr_Ident PARAMS((PROC_STAT * s, const ng_ipaddr_t * Addr,
int identsock, void (*cbfunc) (int, short)));
GLOBAL bool Resolve_Name PARAMS((PROC_STAT * s, const char *Host,
void (*cbfunc) (int, short)));