]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd.cpp
Auth fixes
[user/henk/code/inspircd.git] / src / inspircd.cpp
index 044719b7e1023b978f66a08148aa5e7d508fb3b3..c0e5ee313f66c80341aaf474cb3bacd6d85148c3 100644 (file)
@@ -6674,11 +6674,14 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve
                // F <TS>
                // end netburst
                case 'F':
-                       WriteOpers("Server %s has completed netburst. (%d secs)",source->name,time(NULL)-nb_start);
+                       WriteOpers("Server %s has completed netburst. (%d secs)",udp_host,time(NULL)-nb_start);
                        handle_F(token,params,source,reply,udp_host);
-                       WriteOpers("Sending my netburst to %s",source->name);
-                       DoSync(serv,udp_host);
-                       WriteOpers("Send of netburst to %s completed",source->name);
+               break;
+               case 'X':
+                       WriteOpers("Sending my netburst to %s",udp_host);
+                       DoSync(source,udp_host);
+                       WriteOpers("Send of netburst to %s completed",udp_host);
+               
                break;
                // anything else
                default:
@@ -6705,6 +6708,14 @@ void handle_link_packet(char* udp_msg, char* udp_host, serverrec *serv)
                char* serverdesc = finalparam+2;
                WriteOpers("CONNECT from %s (%s)",servername,udp_host);
                
+               for (int j = 0; j < serv->connectors.size(); j++)
+               {
+                       if (!strcasecmp(serv->connectors[j].GetServerName().c_str(),udp_host))
+                       {
+                               serv->connectors[j].SetServerName(servername);
+                       }
+               }
+               
                
                char Link_ServerName[1024];
                char Link_IPAddr[1024];
@@ -6724,38 +6735,17 @@ void handle_link_packet(char* udp_msg, char* udp_host, serverrec *serv)
                        log(DEBUG,"(%d) Comparing against name='%s', ipaddr='%s', port='%s', recvpass='%s'",i,Link_ServerName,Link_IPAddr,Link_Port,Link_Pass);
                        LinkPort = atoi(Link_Port);
                        if (!strcasecmp(Link_ServerName,servername))
-                       {
-                               if (!strcasecmp(Link_IPAddr,udp_host))
-                               {
-                                       // we have a matching link line -
-                                       // send a 'diminutive' server message back...
-                                       snprintf(response,10240,"s %s %s :%s",ServerName,Link_SendPass,ServerDesc);
-                                       serv->SendPacket(response,udp_host);
-                                       WriteOpers("CONNECT from %s accepted, authenticating",servername);
-                                       for (int j = 0; j < 255; j++)
-                                       {
-                                               if (servers[j] == NULL)
-                                               {
-                                                       servers[j] = new serverrec;
-                                                       strcpy(servers[j]->internal_addr,udp_host);
-                                                       strcpy(servers[j]->name,servername);
-                                                       strcpy(servers[j]->description,serverdesc);
-                                                       // create a server record for this server
-                                                       WriteOpers("Server %s authenticated, exchanging server keys...",servername);
-                                                       snprintf(response,10240,"O %d",MyKey);
-                                                       serv->SendPacket(response,udp_host);
-                                                       return;
-                                               }
-                                       }
-                                       WriteOpers("Internal error connecting to %s, failed to create server record!",servername);
-                                       return;
-                               }
-                       }
-                       else {
-                               log(DEBUG,"Server names '%s' and '%s' don't match",Link_ServerName,servername);
+                       {
+                               // we have a matching link line -
+                               // send a 'diminutive' server message back...
+                               snprintf(response,10240,"s %s %s :%s",ServerName,Link_SendPass,ServerDesc);
+                               serv->SendPacket(response,servername);
+                               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;
        }
@@ -6796,34 +6786,34 @@ void handle_link_packet(char* udp_msg, char* udp_host, serverrec *serv)
                        LinkPort = atoi(Link_Port);
                        if (!strcasecmp(Link_ServerName,servername))
                        {
-                               if (!strcasecmp(Link_IPAddr,udp_host))
-                               {
-                                       // matching link at this end too, we're all done!
-                                       // at this point we must begin key exchange and insert this
-                                       // server into our 'active' table.
-                                       for (int j = 0; j < 255; j++) {
-                                               if (servers[j] != NULL) {
-                                                       if (!strcasecmp(servers[j]->name,udp_host)) {
-                                                               strcpy(servers[j]->description,serverdesc);
-                                                               WriteOpers("Server %s authenticated, exchanging server keys...",servername);
-                                                               DoSync(serv,udp_host);
-                                                               return;
-                                                       }
+                               // matching link at this end too, we're all done!
+                               // at this point we must begin key exchange and insert this
+                               // server into our 'active' table.
+                               for (int j = 0; j < 255; j++)
+                               {
+                                       if (servers[j] != NULL)
+                                       {
+                                               if (!strcasecmp(servers[j]->name,udp_host))
+                                               {
+                                                       strcpy(servers[j]->description,serverdesc);
+                                                       DoSync(serv,udp_host);
+                                                       char buffer[MAXBUF];
+                                                       sprintf(buffer,"X 0");
+                                                       serv->SendPacket(buffer,udp_host);
+                                                       return;
                                                }
-                                               WriteOpers("\2WARNING!\2 %s sent us an authentication packet but we are not authenticating with this server right noe! Possible intrusion attempt!",udp_host);
-                                               return;
-
                                        }
-                               }
-                               else {
-                                       log(DEBUG,"IP Addresses '%s' and '%s' don't match",Link_IPAddr,udp_host);
+                                       WriteOpers("\2WARNING!\2 %s sent us an authentication packet but we are not authenticating with this server right noe! Possible intrusion attempt!",udp_host);
+                                       return;
                                }
                        }
                        else {
                                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;
        }
@@ -6846,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;
                                        }
                                }
@@ -7098,20 +7100,25 @@ int InspIRCd(void)
      
                for (int x = 0; x != UDPportCount; x++)
                {
-                       long theirkey = 0;
-                       if (me[x]->RecvPacket(udp_msg, udp_host))
-                       {
-                               if (strlen(udp_msg)<1) {
-                               log(DEBUG,"Invalid string from %s [route%d]",udp_host,x);
-                       }
-                       else
+                       std::deque<std::string> msgs;
+                       msgs.clear();
+                       if (me[x]->RecvPacket(msgs, udp_host))
                        {
-                               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())