From f617e02a96d3a8a25f8a5bc2467bb16e6978d911 Mon Sep 17 00:00:00 2001 From: Konrad Mohrfeldt Date: Fri, 6 Apr 2012 02:33:41 +0200 Subject: [PATCH] [Validator] added less-strict email host verification New checkHost attribute in email constraint will make the validator check for only one of MX, A or AAAA DNS resource records to verify it as a valid email address. --- .../Component/Validator/Constraints/Email.php | 1 + .../Validator/Constraints/EmailValidator.php | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Validator/Constraints/Email.php b/src/Symfony/Component/Validator/Constraints/Email.php index 65537f6dfc..a1265e37cc 100644 --- a/src/Symfony/Component/Validator/Constraints/Email.php +++ b/src/Symfony/Component/Validator/Constraints/Email.php @@ -22,4 +22,5 @@ class Email extends Constraint { public $message = 'This value is not a valid email address'; public $checkMX = false; + public $checkHost = false; } diff --git a/src/Symfony/Component/Validator/Constraints/EmailValidator.php b/src/Symfony/Component/Validator/Constraints/EmailValidator.php index b26dd55441..a55c137e76 100644 --- a/src/Symfony/Component/Validator/Constraints/EmailValidator.php +++ b/src/Symfony/Component/Validator/Constraints/EmailValidator.php @@ -51,9 +51,11 @@ class EmailValidator extends ConstraintValidator $valid = false; } - // Check MX records + // Check for host DNS resource records if ($valid && $constraint->checkMX) { $valid = $this->checkMX($host); + } else if ($valid && $constraint->checkHost) { + $valid = $this->checkHost($host); } } @@ -69,7 +71,7 @@ class EmailValidator extends ConstraintValidator /** * Check DNS Records for MX type. * - * @param string $host Host name + * @param string $host Hostname * * @return Boolean */ @@ -77,4 +79,16 @@ class EmailValidator extends ConstraintValidator { return checkdnsrr($host, 'MX'); } + + /** + * Check if one of MX, A or AAAA DNS RR exists. + * + * @param string $host Hostname + * + * @return Boolean + */ + private function checkHost($host) + { + return $this->checkMX($host) || (checkdnsrr($host, "A") || checkdnsrr($host, "AAAA")); + } }