X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/b0b7de54b122c7b4cb7b1ccdee1835a6d57afe8b..03d18a46b12cab6358d58033569ab2302ad9a543:/modules/core/m_server.c diff --git a/modules/core/m_server.c b/modules/core/m_server.c index f6fb2b4..dfcf18e 100644 --- a/modules/core/m_server.c +++ b/modules/core/m_server.c @@ -21,24 +21,22 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: m_server.c 3179 2007-02-01 00:34:33Z jilles $ + * $Id: m_server.c 3291 2007-03-28 14:30:10Z jilles $ */ #include "stdinc.h" -#include "tools.h" #include "client.h" /* client struct */ #include "common.h" /* TRUE bleah */ -#include "event.h" #include "hash.h" /* add_to_client_hash */ #include "irc_string.h" #include "ircd.h" /* me */ #include "numeric.h" /* ERR_xxx */ #include "s_conf.h" /* struct ConfItem */ #include "s_newconf.h" -#include "s_log.h" /* log level defines */ +#include "logger.h" /* log level defines */ #include "s_serv.h" /* server_estab, check_server */ #include "s_stats.h" /* ServerStats */ -#include "scache.h" /* find_or_add */ +#include "scache.h" #include "send.h" /* sendto_one */ #include "msg.h" #include "parse.h" @@ -59,7 +57,7 @@ struct Message sid_msgtab = { mapi_clist_av1 server_clist[] = { &server_msgtab, &sid_msgtab, NULL }; -DECLARE_MODULE_AV1(server, NULL, NULL, server_clist, NULL, NULL, "$Revision: 3179 $"); +DECLARE_MODULE_AV1(server, NULL, NULL, server_clist, NULL, NULL, "$Revision: 3291 $"); int bogus_host(const char *host); static int set_server_gecos(struct Client *, const char *); @@ -83,6 +81,17 @@ mr_server(struct Client *client_p, struct Client *source_p, int parc, const char hop = atoi(parv[2]); strlcpy(info, parv[3], sizeof(info)); + if (IsHandshake(client_p) && irccmp(client_p->name, name)) + { + sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) ? L_NETWIDE : L_ALL, + "Server %s has unexpected name %s", + get_server_name(client_p, HIDE_IP), name); + ilog(L_SERVER, "Server %s has unexpected name %s", + log_client_name(client_p, SHOW_IP), name); + exit_client(client_p, client_p, client_p, "Server name mismatch"); + return 0; + } + /* * Reject a direct nonTS server connection if we're TS_ONLY -orabidoo */ @@ -123,7 +132,7 @@ mr_server(struct Client *client_p, struct Client *source_p, int parc, const char break; case -2: - sendto_realops_snomask(SNO_GENERAL, L_ALL, + sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) ? L_NETWIDE : L_ALL, "Unauthorised server connection attempt from %s: " "Bad password for server %s", get_server_name(client_p, HIDE_IP), name); @@ -164,6 +173,15 @@ mr_server(struct Client *client_p, struct Client *source_p, int parc, const char return 0; /* NOT REACHED */ break; + case -5: + sendto_realops_snomask(SNO_GENERAL, L_ALL, + "Connection from servername %s requires SSL/TLS but is plaintext", + name); + ilog(L_SERVER, "Access denied, requires SSL/TLS but is plaintext from %s", + log_client_name(client_p, SHOW_IP)); + + exit_client(client_p, client_p, client_p, "Access denied, requires SSL/TLS but is plaintext"); + return 0; } if((target_p = find_server(NULL, name))) @@ -192,7 +210,7 @@ mr_server(struct Client *client_p, struct Client *source_p, int parc, const char if(has_id(client_p) && (target_p = find_id(client_p->id)) != NULL) { - sendto_realops_snomask(SNO_GENERAL, L_ALL, + sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) ? L_NETWIDE : L_ALL, "Attempt to re-introduce SID %s from %s%s", client_p->id, EmptyString(client_p->name) ? name : "", @@ -239,7 +257,7 @@ ms_server(struct Client *client_p, struct Client *source_p, int parc, const char int hop; int hlined = 0; int llined = 0; - dlink_node *ptr; + rb_dlink_node *ptr; name = parv[1]; hop = atoi(parv[2]); @@ -322,7 +340,7 @@ ms_server(struct Client *client_p, struct Client *source_p, int parc, const char * leaf. If so, close the link. * */ - DLINK_FOREACH(ptr, hubleaf_conf_list.head) + RB_DLINK_FOREACH(ptr, hubleaf_conf_list.head) { hub_p = ptr->data; @@ -407,19 +425,16 @@ ms_server(struct Client *client_p, struct Client *source_p, int parc, const char set_server_gecos(target_p, info); - target_p->serv->up = find_or_add(source_p->name); - - if(has_id(source_p)) - target_p->serv->upid = source_p->id; - target_p->servptr = source_p; SetServer(target_p); - dlinkAddTail(target_p, &target_p->node, &global_client_list); - dlinkAddTailAlloc(target_p, &global_serv_list); + rb_dlinkAddTail(target_p, &target_p->node, &global_client_list); + rb_dlinkAddTailAlloc(target_p, &global_serv_list); add_to_client_hash(target_p->name, target_p); - dlinkAdd(target_p, &target_p->lnode, &target_p->servptr->serv->servers); + rb_dlinkAdd(target_p, &target_p->lnode, &target_p->servptr->serv->servers); + + target_p->serv->nameinfo = scache_connect(target_p->name, target_p->info, IsHidden(target_p)); sendto_server(client_p, NULL, NOCAPS, NOCAPS, ":%s SERVER %s %d :%s%s", @@ -445,7 +460,7 @@ ms_sid(struct Client *client_p, struct Client *source_p, int parc, const char *p struct Client *target_p; struct remote_conf *hub_p; hook_data_client hdata; - dlink_node *ptr; + rb_dlink_node *ptr; int hop; int hlined = 0; int llined = 0; @@ -476,7 +491,7 @@ ms_sid(struct Client *client_p, struct Client *source_p, int parc, const char *p ilog(L_SERVER, "Link %s cancelled, SID %s already exists", client_p->name, parv[3]); - exit_client(NULL, client_p, &me, "Server Exists"); + exit_client(NULL, client_p, &me, "SID Exists"); return 0; } @@ -511,7 +526,7 @@ ms_sid(struct Client *client_p, struct Client *source_p, int parc, const char *p * H: allows it to introduce a server matching that mask * L: disallows it introducing a server matching that mask */ - DLINK_FOREACH(ptr, hubleaf_conf_list.head) + RB_DLINK_FOREACH(ptr, hubleaf_conf_list.head) { hub_p = ptr->data; @@ -559,19 +574,16 @@ ms_sid(struct Client *client_p, struct Client *source_p, int parc, const char *p strcpy(target_p->id, parv[3]); set_server_gecos(target_p, parv[4]); - target_p->serv->up = find_or_add(source_p->name); - - if(has_id(source_p)) - target_p->serv->upid = source_p->id; - target_p->servptr = source_p; SetServer(target_p); - dlinkAddTail(target_p, &target_p->node, &global_client_list); - dlinkAddTailAlloc(target_p, &global_serv_list); + rb_dlinkAddTail(target_p, &target_p->node, &global_client_list); + rb_dlinkAddTailAlloc(target_p, &global_serv_list); add_to_client_hash(target_p->name, target_p); add_to_id_hash(target_p->id, target_p); - dlinkAdd(target_p, &target_p->lnode, &target_p->servptr->serv->servers); + rb_dlinkAdd(target_p, &target_p->lnode, &target_p->servptr->serv->servers); + + target_p->serv->nameinfo = scache_connect(target_p->name, target_p->info, IsHidden(target_p)); sendto_server(client_p, NULL, CAP_TS6, NOCAPS, ":%s SID %s %d %s :%s%s",