1
0
mirror of https://github.com/unrealircd/unrealircd.git synced 2026-06-26 10:36:37 +02:00

We already set the IP in add_connection, no need to do that in check_init again.

Fix bug where "insecure link" message was shown despite localhost.
This commit is contained in:
Bram Matthys
2015-06-22 20:49:40 +02:00
parent d7e9d00e57
commit 5286b50c19
2 changed files with 25 additions and 48 deletions
+1 -1
View File
@@ -670,7 +670,7 @@ int m_server_synch(aClient *cptr, ConfigItem_link *aconf)
* Yeah.. there are still other cases when non-SSL links are fine (eg: local IP
* of the same machine), we won't bother with detecting that. -- Syzop
*/
if (strcmp(cptr->sockhost, "localhost"))
if (!IsLocal(cptr))
{
sendto_realops("\002WARNING:\002 This link is unencrypted (non-SSL). We highly recommend to use "
"SSL server linking. See https://www.unrealircd.org/docs/Linking_servers");
+24 -47
View File
@@ -680,10 +680,9 @@ void write_pidfile(void)
#endif
}
/*
* Initialize the various name strings used to store hostnames. This is set
* from either the server's sockhost (if client fd is a tty or localhost)
* or from the ip# converted into a string. 0 = success, -1 = fail.
/* This used to initialize the various name strings used to store hostnames.
* But nowadays this takes place much earlier (in add_connection?).
* It's mainly used for "localhost" and WEBIRC magic only now...
*/
static int check_init(aClient *cptr, char *sockn, size_t size)
{
@@ -692,32 +691,8 @@ static int check_init(aClient *cptr, char *sockn, size_t size)
RunHookReturnInt3(HOOKTYPE_CHECK_INIT, cptr, sockn, size, ==0);
/* If descriptor is a tty, special checking... */
#if defined(DEBUGMODE) && !defined(_WIN32)
if (isatty(cptr->fd))
#else
if (0)
#endif
{
strlcpy(sockn, me.sockhost, HOSTLEN);
bzero((char *)&sk, sizeof(struct SOCKADDR_IN));
}
else if (getpeername(cptr->fd, (struct SOCKADDR *)&sk, &len) == -1)
{
/* On Linux 2.4 and FreeBSD the socket may just have been disconnected
* so it's not a serious error and can happen quite frequently -- Syzop
*/
if (ERRNO != P_ENOTCONN)
report_error("connect failure: %s %s", cptr);
return -1;
}
(void)strlcpy(sockn, (char *)Inet_si2p(&sk), size);
#ifdef INET6
if (IN6_IS_ADDR_LOOPBACK(&sk.SIN_ADDR) || !strcmp(sockn, "127.0.0.1"))
#else
if (inet_netof(sk.SIN_ADDR) == IN_LOOPBACKNET)
#endif
/* Some silly hack to convert 127.0.0.1 and such into 'localhost' */
if (IsLocal(cptr))
{
if (cptr->hostp)
{
@@ -726,7 +701,6 @@ static int check_init(aClient *cptr, char *sockn, size_t size)
}
strlcpy(sockn, "localhost", HOSTLEN);
}
bcopy((char *)&sk.SIN_ADDR, (char *)&cptr->ip, sizeof(struct IN_ADDR));
cptr->port = (int)ntohs(sk.SIN_PORT);
@@ -780,22 +754,6 @@ int check_client(aClient *cptr, char *username)
Debug((DEBUG_DNS, "ch_cl: access ok: %s[%s]", cptr->name, sockname));
#ifdef INET6
if (IN6_IS_ADDR_LOOPBACK(&cptr->ip) ||
(cptr->ip.s6_addr[0] == mysk.sin6_addr.s6_addr[0] &&
cptr->ip.s6_addr[1] == mysk.sin6_addr.s6_addr[1])
/* ||
IN6_ARE_ADDR_SAMEPREFIX(&cptr->ip, &mysk.SIN_ADDR))
about the same, I think NOT */
)
#else
if (inet_netof(cptr->ip) == IN_LOOPBACKNET ||
inet_netof(cptr->ip) == inet_netof(mysk.SIN_ADDR))
#endif
{
ircstp->is_loc++;
cptr->flags |= FLAGS_LOCAL;
}
return 0;
}
@@ -1190,6 +1148,25 @@ add_con_refuse:
*/
get_sockhost(acptr, Inet_si2p(&addr));
bcopy((char *)&addr.SIN_ADDR, (char *)&acptr->ip, sizeof(struct IN_ADDR));
/* Tag loopback connections as FLAGS_LOCAL */
#ifdef INET6
if (IN6_IS_ADDR_LOOPBACK(&acptr->ip) ||
(acptr->ip.s6_addr[0] == mysk.sin6_addr.s6_addr[0] &&
acptr->ip.s6_addr[1] == mysk.sin6_addr.s6_addr[1])
/* ||
IN6_ARE_ADDR_SAMEPREFIX(&acptr->ip, &mysk.SIN_ADDR))
about the same, I think NOT */
)
#else
if (inet_netof(acptr->ip) == IN_LOOPBACKNET ||
inet_netof(acptr->ip) == inet_netof(mysk.SIN_ADDR))
#endif
{
ircstp->is_loc++;
acptr->flags |= FLAGS_LOCAL;
}
j = 1;
list_for_each_entry(acptr2, &unknown_list, lclient_node)