[arch-projects] [PATCH] valid_email :: check all sorts of stuff, as described by: http://www.linuxjournal.com/article/9585
BlackEagle
ike.devolder at gmail.com
Mon Mar 19 15:39:03 EDT 2012
Signed-off-by: BlackEagle <ike.devolder at gmail.com>
---
web/lib/aur.inc.php | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 47 insertions(+), 1 deletion(-)
diff --git a/web/lib/aur.inc.php b/web/lib/aur.inc.php
index c662b80..9b604fe 100644
--- a/web/lib/aur.inc.php
+++ b/web/lib/aur.inc.php
@@ -80,7 +80,53 @@ function check_sid($dbh=NULL) {
# verify that an email address looks like it is legitimate
#
function valid_email($addy) {
- return (filter_var($addy, FILTER_VALIDATE_EMAIL) !== false);
+ $isValid = true;
+ $atIndex = strrpos($addy, "@");
+ if (is_bool($atIndex) && !$atIndex) {
+ $isValid = false;
+ } else {
+ $domain = substr($addy, $atIndex+1);
+ $local = substr($addy, 0, $atIndex);
+ $localLen = strlen($local);
+ $domainLen = strlen($domain);
+ if ($localLen < 1 || $localLen > 64) {
+ // local part length exceeded
+ $isValid = false;
+ } elseif ($domainLen < 1 || $domainLen > 255) {
+ // domain part length exceeded
+ $isValid = false;
+ } elseif ($local[0] == '.' || $local[$localLen-1] == '.') {
+ // local part starts or ends with '.'
+ $isValid = false;
+ } elseif (preg_match('/\\.\\./', $local)) {
+ // local part has two consecutive dots
+ $isValid = false;
+ } elseif (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) {
+ // character not valid in domain part
+ $isValid = false;
+ } elseif (preg_match('/\\.\\./', $domain)) {
+ // domain part has two consecutive dots
+ $isValid = false;
+ } elseif (
+ !preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
+ str_replace("\\\\","",$local))
+ ) {
+ // character not valid in local part unless
+ // local part is quoted
+ if (
+ !preg_match('/^"(\\\\"|[^"])+"$/',
+ str_replace("\\\\","",$local))
+ ) {
+ $isValid = false;
+ }
+ }
+
+ if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A"))) {
+ // domain not found in DNS
+ $isValid = false;
+ }
+ }
+ return $isValid;
}
# a new seed value for mt_srand()
--
1.7.9.4
More information about the arch-projects
mailing list