]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd.cpp
Auth fixes
[user/henk/code/inspircd.git] / src / inspircd.cpp
index 4207e4f23d58a33b8b094fea9f60818ff52e6367..c0e5ee313f66c80341aaf474cb3bacd6d85148c3 100644 (file)
@@ -6743,7 +6743,9 @@ void handle_link_packet(char* udp_msg, char* udp_host, serverrec *serv)
                                return;
                        }
                }
-               serv->SendPacket("E :Access is denied (no matching link block)",udp_host);
+               char buffer[MAXBUF];
+               sprintf(buffer,"E :Access is denied (no matching link block)");
+               serv->SendPacket(buffer,udp_host);
                WriteOpers("CONNECT from %s denied, no matching link block",servername);
                return;
        }
@@ -6795,7 +6797,9 @@ void handle_link_packet(char* udp_msg, char* udp_host, serverrec *serv)
                                                {
                                                        strcpy(servers[j]->description,serverdesc);
                                                        DoSync(serv,udp_host);
-                                                       Serv->SendPacket("X 0",udp_host);
+                                                       char buffer[MAXBUF];
+                                                       sprintf(buffer,"X 0");
+                                                       serv->SendPacket(buffer,udp_host);
                                                        return;
                                                }
                                        }
@@ -6807,7 +6811,9 @@ void handle_link_packet(char* udp_msg, char* udp_host, serverrec *serv)
                                log(DEBUG,"Server names '%s' and '%s' don't match",Link_ServerName,servername);
                        }
                }
-               serv->SendPacket("E :Access is denied (no matching link block)",udp_host);
+               char buffer[MAXBUF];
+               sprintf(buffer,"E :Access is denied (no matching link block)");
+               serv->SendPacket(buffer,udp_host);
                WriteOpers("CONNECT from %s denied, no matching link block",servername);
                return;
        }
@@ -6830,12 +6836,24 @@ void handle_link_packet(char* udp_msg, char* udp_host, serverrec *serv)
 
                serverrec* source_server = NULL;
 
-               for (int j = 0; j < 255; j++) {
-                       if (servers[j] != NULL) {
-                               if (!strcasecmp(servers[j]->name,udp_host)) {
-                                       if (servers[j]->haspassed) {
-                                               // found a valid key for this server, can process restricted stuff here
-                                               process_restricted_commands(token,params,servers[j],serv,udp_host);
+               log(DEBUG,"Begin checking");
+
+               for (int j = 0; j < 255; j++)
+               {
+                       log(DEBUG,"Loop %d",j);
+                       if (servers[j] != NULL)
+                       {
+                               log(DEBUG,"Server %d not null",j);
+                               for (int x = 0; x < servers[j]->connectors.size(); x++)
+                               {
+                                       log(DEBUG,"Servers are: '%s' '%s'",udp_host,servers[j]->connectors[x].GetServerName().c_str());
+                                       if (!strcasecmp(servers[j]->connectors[x].GetServerName().c_str(),udp_host))
+                                       {
+                                               log(DEBUG,"match! process restricted stuff here");
+                                               // found a valid ircd_connector.
+                                               // TODO: Fix this so it only lets servers in that are in the 
+                                               // STATE_CONNECTED state!!!
+                                               process_restricted_commands(token,params,servers[j],serv,udp_host);
                                                return;
                                        }
                                }
@@ -7082,20 +7100,25 @@ int InspIRCd(void)
      
                for (int x = 0; x != UDPportCount; x++)
                {
-                       long theirkey = 0;
-                       if (me[x]->RecvPacket(udp_msg, udp_host))
+                       std::deque<std::string> msgs;
+                       msgs.clear();
+                       if (me[x]->RecvPacket(msgs, udp_host))
                        {
-                               if (strlen(udp_msg)<1) {
-                               log(DEBUG,"Invalid string from %s [route%d]",udp_host,x);
-                       }
-                       else
-                       {
-                               FOREACH_MOD OnPacketReceive(udp_msg);
-                               handle_link_packet(udp_msg, udp_host, me[x]);
+                               for (int ctr = 0; ctr < msgs.size(); ctr++)
+                               {
+                                       char udp_msg[MAXBUF];
+                                       strncpy(udp_msg,msgs[ctr].c_str(),MAXBUF);
+                                       if (strlen(udp_msg)<1)
+                                       {
+                                               log(DEBUG,"Invalid string from %s [route%d]",udp_host,x);
+                                               break;
+                                       }
+                                       FOREACH_MOD OnPacketReceive(udp_msg);
+                                       handle_link_packet(udp_msg, udp_host, me[x]);
+                               }
                                goto label;
                        }
                }
-       }
        
 
        while (count2 != clientlist.end())