/*
* 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 "numeric.h"
#include "ngircd.h"
#include "irc.h"
+#include "irc-channel.h"
#include "irc-info.h"
#include "irc-write.h"
#include "op.h"
return DISCONNECTED;
}
+#ifdef SSL_SUPPORT
+ /* Does this server require an SSL connection? */
+ if (Conf_Server[i].SSLConnect &&
+ !(Conn_Options(Client_Conn(Client)) & CONN_SSL)) {
+ Log(LOG_ERR,
+ "Connection %d: Server \"%s\" requires a secure connection!",
+ Client_Conn(Client), Req->argv[0]);
+ Conn_Close(Client_Conn(Client), NULL,
+ "Secure connection required", true);
+ return DISCONNECTED;
+ }
+#endif
+
/* Check server password */
if (strcmp(Conn_Password(Client_Conn(Client)),
Conf_Server[i].pwd_in) != 0) {
IRC_WriteStrChannelPrefix(Client, chan, c, false,
"JOIN :%s", channame);
+ /* If the client is connected to this server, it was remotely
+ * joined to the channel by another server/service: So send
+ * TOPIC and NAMES messages like on a regular JOIN command! */
+ if(Client_Conn(c) != NONE)
+ IRC_Send_Channel_Info(c, chan);
+
/* Announce "channel user modes" to the channel, if any */
strlcpy(modes, Channel_UserModes(chan, c), sizeof(modes));
if (modes[0])