Example #1
0
 /**
  * Magic function __toString
  *
  * @return string
  */
 public function __toString()
 {
     if (!$this->Error) {
         // Add version
         $spf = str_replace("{version}", $this->Version, self::DEFAULT_TEMPLATE);
         // Add sender verification mechanisms
         $sendermechanisms = "";
         foreach ((array) $this->SenderMechanisms as $m) {
             $sendermechanisms .= "{$m[0]}{$m[1]} ";
         }
         $spf = str_replace("{sendermechanisms}", trim($sendermechanisms), $spf);
         // Add basic verification mechanisms
         $basicmechanisms = "";
         foreach ((array) $this->BasicMechanisms as $m) {
             $basicmechanisms .= "{$m[0]}{$m[1]} ";
         }
         $spf = str_replace("{basicmechanisms}", trim($basicmechanisms), $spf);
         // Add Modifiers
         $mods = "";
         foreach ((array) $this->Modifiers as $m) {
             $mods .= "{$m[0]}={$m[1]} ";
         }
         $spf = str_replace("{mod}", trim($mods), $spf);
         $this->Value = trim($spf);
         return parent::__toString();
     } else {
         return "";
     }
 }
Example #2
0
        function testDNSZone2()
        {
			Core::Load("NET/DNS/class.DNSZone2.php");
			Core::Load("NET/DNS/class.DNSRecord.php");
			
			$dnszone = new DNSZone();
			
			/////
			// Test SOA DNS Record
			//
			Core::Load("NET/DNS/class.SOADNSRecord.php");
			
			// Valid SOA
			$SOA = new SOADNSRecord("test.com","ns.hostdad.com", "*****@*****.**");			
			$this->assertWantedPattern("/@\s+IN\s+SOA[\s\t]+/msi", $SOA->__toString(), "Generated SOA Record");
			$dnszone->AddRecord($SOA);
			
			// Invalid SOA
			$soa = new SOADNSRecord("test", "ns.hostdad.com", "*****@*****.**");
			$this->assertFalse($soa->__toString(), "SOA Record NOT generated with invalid params");
			
			/////
			// Test A DNS Record
			//
			Core::Load("NET/DNS/class.ADNSRecord.php");
			
			// subdomain record
			$a1 = new ADNSRecord("test", "192.168.1.1");
			$this->assertWantedPattern("/[A-Za-z0-9]+\s+IN\s+A[\s\t]+/msi", $a1->__toString(), "Generated A Record");
			$dnszone->AddRecord($a1);
			
			//domain record
			$a2 = new ADNSRecord("test.com", "192.168.1.2");
			$this->assertWantedPattern("/[A-Za-z0-9\.]+\s+IN\s+A[\s\t]+/msi", $a2->__toString(), "Generated A Record");
			$dnszone->AddRecord($a2);
			
			//dottify domain record
			$a3 = new ADNSRecord("test.com.", "192.168.1.3");
			$this->assertWantedPattern("/[A-Za-z0-9\.]+\s+IN\s+A[\s\t]+/msi", $a3->__toString(), "Generated A Record");
			$dnszone->AddRecord($a3);
			
			//@ domain record
			$a4 = new ADNSRecord("@", "192.168.1.100");
			$this->assertWantedPattern("/@\s+[0-9]*\sIN\s+A[\s\t]+/msi", $a4->__toString(), "Generated A Record");
			$dnszone->AddRecord($a4);
			
			//invalid record
			$record = new ADNSRecord("-1test.com", "192.168.1");
			$this->assertFalse($record->__toString(), "A Record NOT generated with invalid params");
			
			//////
			// Test MX DNS Record
			//
			Core::Load("NET/DNS/class.MXDNSRecord.php");
			
			//domain record
			$record = new MXDNSRecord("mail", "test.com");
			$this->assertWantedPattern("/[A-Za-z0-9\.]+\s+IN\s+MX[\s\t]+/msi", $record->__toString(), "Generated MX Record");
			$dnszone->AddRecord($record);
			
			//dottify domain record
			$record = new MXDNSRecord("test.com.", "mailtest.com");
			$this->assertWantedPattern("/[A-Za-z0-9\.]+\s+IN\s+MX[\s\t]+/msi", $record->__toString(), "Generated MX Record");
			$dnszone->AddRecord($record);
			
			//@ domain record
			$record = new MXDNSRecord("@", "mail2.test.com");
			
			$this->assertWantedPattern("/@\s+[0-9]*\sIN\s+MX[\s\t]+/msi", $record->__toString(), "Generated MX Record");
			$dnszone->AddRecord($record);
			
			//invalid record
			$record = new MXDNSRecord("-1test.com", "test2");
			$this->assertFalse($record->__toString(), "MX Record NOT generated with invalid params");
			
			///////
			// Test NS DNS Record
			//
			Core::Load("NET/DNS/class.NSDNSRecord.php");
			
			// subdomain record
	
			//domain record
			$record = new NSDNSRecord("test.com", "ns1.test.com");
			$this->assertWantedPattern("/[A-Za-z0-9\.]+\s+IN\s+NS[\s\t]+/msi", $record->__toString(), "Generated NS Record");
			$dnszone->AddRecord($record);
			
			//dottify domain record
			$record = new NSDNSRecord("test.com.", "ns2.test.com");
			$this->assertWantedPattern("/[A-Za-z0-9\.]+\s+IN\s+NS[\s\t]+/msi", $record->__toString(), "Generated NS Record");
			$dnszone->AddRecord($record);
			
			//sub domain record
			$record = new NSDNSRecord("name.com", "ns1");
			$this->assertWantedPattern("/[A-Za-z0-9\.]+\s+[0-9]*\sIN\s+NS[\s\t]+/msi", $record->__toString(), "Generated NS Record");
			$dnszone->AddRecord($record);
			
			//invalid record
			$record = new NSDNSRecord("-1test.com", "asdasda");
			$this->assertFalse($record->__toString(), "NS Record NOT generated with invalid params");
			
			///////
			// Test CNAME DNS Record
			//
			Core::Load("NET/DNS/class.CNAMEDNSRecord.php");
			
			//domain record
			$record = new CNAMEDNSRecord("test", "ns2.test.com");
			$this->assertWantedPattern("/[A-Za-z0-9\.]+\s+IN\s+CNAME[\s\t]+/msi", $record->__toString(), "Generated CNAME Record");
			$dnszone->AddRecord($record);
			
			//sub domain record
			$record = new CNAMEDNSRecord("name", "ns1", 28800);
			$this->assertWantedPattern("/[A-Za-z0-9\.]+\s+[0-9]+\sIN\s+CNAME[\s\t]+/msi", $record->__toString(), "Generated CNAME Record");
			$dnszone->AddRecord($record);
			
			//invalid record
			$record = new CNAMEDNSRecord("-1test.com", "192.168.1.1");
			$this->assertFalse($record->__toString(), "CNAME Record NOT generated with invalid params");
			
			///////
			// Test TXT DNS Record
			//
			Core::Load("NET/DNS/class.TXTDNSRecord.php");
			
			$record = new TXTDNSRecord("example.com.", "This is a test TXT record");
			$this->assertWantedPattern("/[A-Za-z0-9\.]+\s+[0-9]*\sIN\s+TXT[\s\t]+\"([^\"]+)\"/si", $record->__toString(), "Generated TXT record");
			
			$record = new TXTDNSRecord("test", "This is a test TXT record");
			$this->assertWantedPattern("/[A-Za-z0-9\.]+\s+[0-9]*\sIN\s+TXT[\s\t]+\"([^\"]+)\"/si", $record->__toString(), "Generated TXT record");
			
			$record = new CNAMEDNSRecord("192.168.1.20", "This is a test TXT record");
			$this->assertFalse($record->__toString(), "TXT Record NOT generated with invalid params");
			
			////////
			// Test SPF DNS Record
			//
			Core::Load("NET/DNS/class.SPFDNSRecord.php");
			
			
			// Test data
			$basics = array(
			                 array("?", "include:test.com"),
			                 array("-", "all")
			               );
			$sender_a    = array(
			                     array("", "a"),
			                     array("+", "a:test.com"), 
			                     array("~", "a:test.com/16"), 
			                     array("?", "a/16")
			                     );
			
			$sender_mx   = array(
			                     array("+", "mx"), 
			                     array("-", "mx:test.com"), 
			                     array("~", "mx:test.com/16"), 
			                     array("?", "mx/16")
			                     );
			
			$sender_ptr  = array(
			                     array("+", "ptr"), 
			                     array("", "ptr:test.com")
			                    );
			
			$sender_ip4  = array(
			                     array("~", "ip4:192.168.1.1"),
			                     array("", "ip4:192.168.1.1/16")
			                    );
			
			$sender_ip6  = array(
			                     array("?", "ip6:2001:db8::10"), 
			                     array("", "ip6:2001:db8::10/16")
			                    );
			
			$sender_exists  = array(
			                         array("-", "exists:test.com")
			                       );
			
			$mods = array(array("redirect", "test.net"), array("exp", "test.test.com"));
			
			$record = new SPFDNSRecord("test.com.", $sender_a, $basics, $mods);
			$this->assertTrue($record->__toString(), "Generated SPF TXT Record Width A rules");
			
			$record = new SPFDNSRecord("test.com.", $sender_mx, $basics, $mods);
			$this->assertTrue($record->__toString(), "Generated SPF TXT Record Width MX rules");
			
			$record = new SPFDNSRecord("test.com.", $sender_ptr, $basics, $mods);
			$this->assertTrue($record->__toString(), "Generated SPF TXT Record Width PTR rules");
			
			$record = new SPFDNSRecord("test.com.", $sender_ip4, $basics, $mods);
			$this->assertTrue($record->__toString(), "Generated SPF TXT Record Width IP4 rules");
			
			$record = new SPFDNSRecord("test.com.", $sender_exists, $basics, $mods);
			$this->assertTrue($record->__toString(), "Generated SPF TXT Record Width EXISTS rules");
			
			$record = new SPFDNSRecord("-test.com.", $sender_exists, $basics, $mods);
			$this->assertFalse($record->__toString(), "SPF TXT Record NOT generated Width invalid name");
			
			// Custom SPF record
			$basics = array(
			                 array("", "include:webmail.pair.com"),
			                 array("?", "include:spf.trusted-forwarder.org"),
			                 array("-", "all")
			               );
			$sender = array(
			                 array("", "ip4:72.81.252.18"),
			                 array("", "ip4:72.81.252.19"),
			                 array("", "ip4:70.91.79.100"),
			                 array("?", "a:relay.pair.com")
			               );
            $record = new SPFDNSRecord("kitterman.com.", $sender, $basics);
            $this->assertTrue($record->__toString(), "Custom SPF TXT Record generated");
			
            // Test SPF With macroses
            $basics = array(
			                 array("-", "include:ip4._spf.%{d}"),
			                 array("-", "include:include:ip4._spf.%{d}"),
			                 array("+", "all")
			               );
			$sender = array(
			                 array("", "exists:%{l1r+}.%{d}"),
			                 array("", "exists:%{l1r+}.%{d}")
			               );
            $record = new SPFDNSRecord("kitterman.com.", $sender, $basics);
            $this->assertTrue($record->__toString(), "Custom SPF TXT Record with macroses generated");
            
            // Test SPF With bad macroses
            $basics = array(
			                 array("-", "include:ip4._spf.%{dfhsd}"),
			                 array("-", "include:include:ip4._spf.%{asdfklj}"),
			                 array("+", "all")
			               );
			$sender = array(
			                 array("", "exists:%{l1r+}.%{32}"),
			                 array("", "exists:%{l1r+}.%{sdaf}")
			               );
            $record = new SPFDNSRecord("kitterman.com.", $sender, $basics);
            $this->assertFalse($record->__toString(), "Custom SPF TXT Record with bad macroses NOT generated");
            
			///////
			// Test PTR DNS Record
			//
			Core::Load("NET/DNS/class.PTRDNSRecord.php");
			
			//domain record
			$record = new PTRDNSRecord("2", "c1.test.com");
			$this->assertWantedPattern("/[0-9]+\s+[0-9]*\s+IN\s+PTR[\s\t]+/msi", $record->__toString(), "Generated PTR Record");
			
			//dotify domain record
			$record = new PTRDNSRecord("245", "c2.test.com.");
			$this->assertWantedPattern("/[A-Za-z0-9\.]+\s+[0-9]*\sIN\s+PTR[\s\t]+/msi", $record->__toString(), "Generated PTR Record");

			//invalid record
			$record = new PTRDNSRecord("370", "192.168.1.1");
			$this->assertFalse($record->__toString(), "PTR Record NOT generated with invalid params");

			$content = $dnszone->__toString();  
			$this->assertWantedPattern("/test.com/msi", $content, "Generated DNS zone contains at least SOA name");
			$this->assertWantedPattern("/IN\s+A[\s\t]+192\.168\.1\.100/msi", $content, "Generated DNS zone contains added A record");
        }