]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/s_serv.c
Get rid of User.server.
[irc/rqf/shadowircd.git] / src / s_serv.c
index e4869dc10dc36fd2b23dacf998298eec420ed5a3..1c62d6494a6e7e5102939e6727d1bea0adb3c617 100644 (file)
@@ -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 */