X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/4d7a1ee5d1f53fab128cceef8a57f2aa5746977a..c98390004f4f14cd8215302d77313f81e2546e22:/src/s_serv.c diff --git a/src/s_serv.c b/src/s_serv.c index 9df924d..df8dfe4 100644 --- a/src/s_serv.c +++ b/src/s_serv.c @@ -21,7 +21,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: s_serv.c 3183 2007-02-01 01:07:42Z jilles $ + * $Id: s_serv.c 3550 2007-08-09 06:47:26Z nenolod $ */ #include "stdinc.h" @@ -57,6 +57,7 @@ #include "channel.h" /* chcap_usage_counts stuff... */ #include "hook.h" #include "msg.h" +#include "reject.h" extern char *crypt(); @@ -694,7 +695,7 @@ burst_TS5(struct Client *client_p) target_p->name, target_p->hopcount + 1, (long) target_p->tsinfo, ubuf, target_p->username, target_p->host, - target_p->user->server, target_p->info); + target_p->servptr->name, target_p->info); if(IsDynSpoof(target_p)) sendto_one(client_p, ":%s ENCAP * REALHOST %s", @@ -848,7 +849,7 @@ burst_TS6(struct Client *client_p) (long) target_p->tsinfo, ubuf, target_p->username, target_p->host, - target_p->user->server, target_p->info); + target_p->servptr->name, target_p->info); if(!has_id(target_p) || !IsCapable(client_p, CAP_EUID)) { @@ -1048,15 +1049,8 @@ server_estab(struct Client *client_p) */ if(!EmptyString(server_p->spasswd)) { - /* kludge, if we're not using TS6, dont ever send - * ourselves as being TS6 capable. - */ - if(ServerInfo.use_ts6) - sendto_one(client_p, "PASS %s TS %d :%s", - server_p->spasswd, TS_CURRENT, me.id); - else - sendto_one(client_p, "PASS %s :TS", - server_p->spasswd); + sendto_one(client_p, "PASS %s TS %d :%s", + server_p->spasswd, TS_CURRENT, me.id); } /* pass info to new server */ @@ -1103,6 +1097,7 @@ server_estab(struct Client *client_p) set_chcap_usage_counts(client_p); dlinkAdd(client_p, &client_p->lnode, &me.serv->servers); + del_unknown_ip(client_p); dlinkMoveNode(&client_p->localClient->tnode, &unknown_list, &serv_list); dlinkAddTailAlloc(client_p, &global_serv_list); @@ -1112,8 +1107,6 @@ server_estab(struct Client *client_p) add_to_client_hash(client_p->name, client_p); /* doesnt duplicate client_p->serv if allocated this struct already */ make_server(client_p); - client_p->serv->up = me.name; - client_p->serv->upid = me.id; client_p->serv->caps = client_p->localClient->caps; @@ -1124,11 +1117,15 @@ server_estab(struct Client *client_p) client_p->localClient->fullcaps = NULL; } - /* add it to scache */ - find_or_add(client_p->name); + client_p->serv->nameinfo = scache_connect(client_p->name, client_p->info, IsHidden(client_p)); client_p->localClient->firsttime = CurrentTime; /* fixing eob timings.. -gnp */ + if((dlink_list_length(&lclient_list) + dlink_list_length(&serv_list)) > + (unsigned long)MaxConnectionCount) + MaxConnectionCount = dlink_list_length(&lclient_list) + + dlink_list_length(&serv_list); + /* Show the real host/IP to admins */ sendto_realops_snomask(SNO_GENERAL, L_ALL, "Link with %s established: (%s) link", @@ -1218,12 +1215,12 @@ server_estab(struct Client *client_p) /* presumption, if target has an id, so does its uplink */ if(has_id(client_p) && has_id(target_p)) sendto_one(client_p, ":%s SID %s %d %s :%s%s", - target_p->serv->upid, target_p->name, + target_p->servptr->id, target_p->name, target_p->hopcount + 1, target_p->id, IsHidden(target_p) ? "(H) " : "", target_p->info); else sendto_one(client_p, ":%s SERVER %s %d :%s%s", - target_p->serv->up, + target_p->servptr->name, target_p->name, target_p->hopcount + 1, IsHidden(target_p) ? "(H) " : "", target_p->info); @@ -1368,8 +1365,10 @@ fork_server(struct Client *server) goto fork_error; else if(ret == 0) { + int maxconn = comm_get_maxconnections(); + /* set our fds as non blocking and close everything else */ - for (i = 0; i < HARD_FDLIMIT; i++) + for (i = 0; i < maxconn; i++) { @@ -1563,8 +1562,6 @@ serv_connect(struct server_conf *server_p, struct Client *by) free_user(client_p->serv->user, NULL); client_p->serv->user = NULL; } - client_p->serv->up = me.name; - client_p->serv->upid = me.id; SetConnecting(client_p); dlinkAddTail(client_p, &client_p->node, &global_client_list); @@ -1631,6 +1628,7 @@ serv_connect_callback(int fd, int status, void *data) struct Client *client_p = data; struct server_conf *server_p; char *errstr; + fde_t *F = comm_locate_fd(fd); /* First, make sure its a real client! */ s_assert(client_p != NULL); @@ -1649,9 +1647,9 @@ serv_connect_callback(int fd, int status, void *data) } /* Next, for backward purposes, record the ip of the server */ - memcpy(&client_p->localClient->ip, &fd_table[fd].connect.hostaddr, sizeof client_p->localClient->ip); + memcpy(&client_p->localClient->ip, &F->connect.hostaddr, sizeof client_p->localClient->ip); /* Set sockhost properly now -- jilles */ - inetntop_sock((struct sockaddr *)&fd_table[fd].connect.hostaddr, + inetntop_sock((struct sockaddr *)&F->connect.hostaddr, client_p->sockhost, sizeof client_p->sockhost); /* Check the status */ @@ -1714,12 +1712,8 @@ serv_connect_callback(int fd, int status, void *data) */ if(!EmptyString(server_p->spasswd)) { - if(ServerInfo.use_ts6) - sendto_one(client_p, "PASS %s TS %d :%s", - server_p->spasswd, TS_CURRENT, me.id); - else - sendto_one(client_p, "PASS %s :TS", - server_p->spasswd); + sendto_one(client_p, "PASS %s TS %d :%s", + server_p->spasswd, TS_CURRENT, me.id); } /* pass my info to the new server */