really check if PASS was sent on Server handshake
authorpk910 <philipp@zoelle1.de>
Tue, 26 Jul 2011 10:59:20 +0000 (12:59 +0200)
committerpk910 <philipp@zoelle1.de>
Tue, 26 Jul 2011 10:59:20 +0000 (12:59 +0200)
Uplink/Uplink.class.php

index 4891df22a05aaf12a493abe597856a4c8b440628..6908ab7a0d5fb987eaa7aff54e3d2b7b58528f9f 100644 (file)
@@ -68,6 +68,7 @@ class Uplink {
        const FLAG_NOT_CONNECTABLE = 0x0004; //remote server is not connectable
        const FLAG_BURST_PENDING   = 0x0008; //we still have to burst
        const FLAG_CONNECTED       = 0x0010; //connected and synced (ready)
+       const FLAG_GOT_PASS        = 0x0020; //got PASS from the remote Server
        private $flags = 0;
        
        public function __construct() {
@@ -242,7 +243,9 @@ class Uplink {
                                $this->flags |= self::FLAG_SECURITY_QUIT;
                                $this->send("ERROR", "Incorrect password received.");
                                $this->client->disconnect();
+                               return;
                        }
+                       $this->flags |= self::FLAG_GOT_PASS;
                }
        }
        
@@ -262,6 +265,12 @@ class Uplink {
                                $this->client->disconnect();
                                return;
                        }
+                       if($this->getSetting("their_password") && !($this->flags & self::FLAG_GOT_PASS)) {
+                               $this->flags |= self::FLAG_SECURITY_QUIT;
+                               $this->send("ERROR", "PASS missing.");
+                               $this->client->disconnect();
+                               return;
+                       }
                        $new_server = new P10_Server($args[0], substr($args[5],0,2), $this->server, $args[2], $args[3], $args[7]);
                        $this->server->addServer($new_server);
                        $this->flags |= self::FLAG_P10SESSION | self::FLAG_BURST_PENDING;
@@ -322,7 +331,7 @@ class Uplink {
        }
        
        private function recv_end_of_burst_ack($from, $args) {
-               $this->flags |= FLAG_CONNECTED;
+               $this->flags |= self::FLAG_CONNECTED;
        }
        
        private function recv_server_quit($from, $args) {