X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/212380e3f42f585dc1ea927402252eb943f91f7b..c88cdb00957d1bafae4587343b5ab7df14b75f8b:/src/s_serv.c diff --git a/src/s_serv.c b/src/s_serv.c index e4869dc..1c62d64 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 2723 2006-11-09 23:35:48Z 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(); @@ -260,8 +261,7 @@ hunt_server(struct Client *client_p, struct Client *source_p, * Assume it's me, if no server */ if(parc <= server || EmptyString(parv[server]) || - match(me.name, parv[server]) || match(parv[server], me.name) || - (strcmp(parv[server], me.id) == 0)) + match(parv[server], me.name) || (strcmp(parv[server], me.id) == 0)) return (HUNTED_ISME); new = LOCAL_COPY(parv[server]); @@ -280,10 +280,6 @@ hunt_server(struct Client *client_p, struct Client *source_p, if(target_p->from == source_p->from && !MyConnect(target_p)) target_p = NULL; - if(target_p == NULL && (target_p = find_server(source_p, new))) - if(target_p->from == source_p->from && !MyConnect(target_p)) - target_p = NULL; - collapse(new); wilds = (strchr(new, '?') || strchr(new, '*')); @@ -699,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", @@ -853,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)) { @@ -1053,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 */ @@ -1108,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); @@ -1134,6 +1124,11 @@ server_estab(struct Client *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", @@ -1373,8 +1368,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++) { @@ -1636,6 +1633,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); @@ -1654,9 +1652,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 */ @@ -1719,12 +1717,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 */