View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update | 
|---|---|---|---|---|---|
| 0000517 | Main CAcert Website | GPG/PGP | public | 2008-03-14 16:42 | 2013-01-15 02:12 | 
| Reporter | ph3 | Assigned To | |||
| Priority | normal | Severity | crash | Reproducibility | have not tried | 
| Status | closed | Resolution | open | ||
| Fixed in Version | 2009 Q2 | ||||
| Summary | 0000517: Can get any UUCP Style email address signed | ||||
| Description | I have a OpenPGP key with _two_ UUCP style E-Mail addresses. The system said: # Name Email Result 1 Error: Both Name and Email address are empty 2 Philipp Schafft The name is OK. The email is empty. 3 Philipp Schafft The name is OK. The email is empty. The systems seems to forget about them as they seems to be invalid. | ||||
| Additional Information | UUCP Style E-Mail addresses are addresses in form 'host!user'. They _ARE_ sitll valid even outside UUCP ans supported by all MTAs I know. The major benefit is that spambots don't find them :) Consider you check email addys by a regex like this one: /^([^\@]+)\@(.+)$/ and use $1 as the username and $2 as the host part you may use this to check uucp style addresses: /^([^\!]+)\!([^\!]+)$/ and use $1 as the host and $2 as the username. You also can use this regex to convert it: s/^([^\!]+)\!([^\!]+)$/$2\@$1/; | ||||
| Tags | No tags attached. | ||||
| Attached Files |  gpg.patch (2,697 bytes)   
 --- gpg.php.orig	2009-04-09 14:58:20.000000000 +0200
+++ gpg.php	2009-04-09 14:59:32.000000000 +0200
@@ -116,38 +116,11 @@
 				if($bits[6] != "")
 					$expires = 1;
 			}
-			//if(!strstr($line, "@")) continue;
-
-
-
-			$pos = strpos($bits[9], "(") - 1;
-			$nocomment = 0;
-			if($pos < 0)
-			{
-				$nocomment = 1;
-				$pos = strpos($bits[9], "<") - 1;
-			}
-			if($pos < 0)
-			{
-				$pos = strlen($bits[9]);
-			}
-			$name = trim(hex2bin(trim(substr($bits[9], 0, $pos))));
-			$nameok=verifyName($name);
-			$resulttable.="<td bgcolor='#".($nameok?"c0ffc0":"ffc0c0")."'>$name</td>";
-
-
-			if($nocomment == 0 && (strpos($bits[9],")")>$pos))
-			{
-				$pos += 2;
-				$pos2 = strpos($bits[9], ")");
-				$comm = trim(hex2bin(trim(substr($bits[9], $pos, $pos2 - $pos))));
-				if($comm != "")
-					$comment[] = $comm;
-				$pos = $pos2 + 3;
-			} else {
-				$pos = strpos($bits[9], "<") + 1;
-			}
+			$name="";
+			$comm="";
 			$mail="";
+			$uidformatwrong=0;
+
 			if(preg_match("/\@.*\@/",$bits[9]))
 			{
 				showheader(_("Welcome to CAcert.org"));
@@ -158,23 +131,46 @@
 				unset($oldid);
 				exit();
 			}
-                        if (preg_match("/<([\w.-]*\@[\w.-]*)>/", $bits[9],$match)) {
-				//echo "Found: ".$match[1];
-				$mail = trim(hex2bin($match[1]));
+
+
+			if(preg_match("/^([^\(\[@]+) \(([^@<>)]*)\) <([\w=\/%.-]*\@[\w.-]*|[\w.-]*\![\w=\/%.-]*)>/",$bits[9],$matches))
+			{
+			  $name=trim(hex2bin($matches[1]));
+	  		  $nameok=verifyName($name);
+			  $nocomment=0;
+			  $comm=trim(hex2bin($matches[2]));
+			  $mail=trim(hex2bin($matches[3]));
+			}
+			elseif(preg_match("/^([^\(\[@]+) <([\w=\/%.-]*\@[\w.-]*|[\w.-]*\![\w=\/%.-]*)>/",$bits[9],$matches))
+			{
+			  $name=trim(hex2bin($matches[1]));
+			  $nocomment=1;
+			  $mail=trim(hex2bin($matches[2]));
 			}
 			else
 			{
-				//echo "Not found!\n";
+				$nocomment=1;
+				$uidformatwrong=1;
 			}
-
+  		  	$nameok=verifyName($name);
 			$emailok=verifyEmail($mail);
 
-                        $resulttable.="<td bgcolor='#".($emailok?"c0ffc0":"ffc0c0")."'>$mail</td>";
+
+			if($comm != "")
+				$comment[] = $comm;
+
+			$resulttable.="<td bgcolor='#".($nameok?"c0ffc0":"ffc0c0")."'>".sanitizeHTML($name)."</td>";
+                        $resulttable.="<td bgcolor='#".($emailok?"c0ffc0":"ffc0c0")."'>".sanitizeHTML($mail)."</td>";
+
 			$uidok=0;
 			if($bits[1]=="r")
 			{
 				$rmessage=_("Error: UID is revoked");
 			}
+			elseif($uidformatwrong==1)
+			{
+				$rmessage=_("The format of the UID was not recognized. Please use 'Name (comment) <email@domain>' ");
+			}
 			elseif($mail=="" and $name=="")
 			{
 				$rmessage=_("Error: Both Name and Email address are empty");
 | ||||
| Reviewed by | |||||
| Test Instructions | |||||
| related to | 0000518 | new | Valid E-Mail addresses with specal chars are rejected | 
|  | The regular expressions are also matching spaces and other whitespaces: "Philipp is not an email address! or?" would match /^([^\!]+)\!([^\!]+)$/ but it's clearly not a UUCP address. | 
|  | the regex was only to show the general schema as /^([^\@]+)\@(.+)$/ is not a good regex for 'normal' addresses. The same rules as in 0000518 apply to the address. Maybe the system should reformat it internally to a single schema and check that to reduce the need for a big regex or multiple similar ones. | 
|  | Yesterday I uploaded a OpenPGP key with a normal not UUCP style mail addy with a '=' included. The behavior of the system is the same: it gets accepted without need to verify it before. I believe that the regex problem is the same as in 0000518. | 
|  | The bug has been fixed. Please test and close this report. | 
|  | Closing issues that have been resolved more than one year ago… | 
| Date Modified | Username | Field | Change | 
|---|---|---|---|
| 2008-03-14 16:42 | ph3 | New Issue | |
| 2008-10-14 12:07 | Sourcerer | Note Added: 0001233 | |
| 2008-10-14 14:34 | ph3 | Note Added: 0001235 | |
| 2008-10-14 14:36 | ph3 | Relationship added | related to 0000518 | 
| 2009-04-07 15:48 | ph3 | Note Added: 0001349 | |
| 2009-04-07 16:55 | Sourcerer | File Added: gpg.patch | |
| 2009-04-09 13:06 | Sourcerer | File Deleted: gpg.patch | |
| 2009-04-09 13:07 | Sourcerer | File Added: gpg.patch | |
| 2009-04-19 23:14 | Sourcerer | Note Added: 0001374 | |
| 2009-04-19 23:14 | Sourcerer | Status | new => solved? | 
| 2012-05-30 21:17 | NEOatNHNG | Note Added: 0003041 | |
| 2012-05-30 21:17 | NEOatNHNG | Status | solved? => closed | 
| 2013-01-15 02:12 | Werner Dworak | Fixed in Version | => 2009 Q2 | 
