Factor out common code to build subject string. Should fix bug #440. 2010-04-12 Martin von Gagern http://bugs.cacert.org/bug_view_page.php?bug_id=440 diff --git a/includes/account.php b/includes/account.php index 685b53a..c709bf8 100644 --- a/includes/account.php +++ b/includes/account.php @@ -19,6 +19,48 @@ loadem("account"); +function appendUnique($str, $suffix) { + if (!strstr($str, "$suffix/") && + substr($str, -strlen($suffix)) != $suffix) + $str .= $suffix; + return $str; +} + +function appendSubjectAltName($subject, $name, $supress) { + if (!$supress) + { + $subject = appendUnique($subject, "/subjectAltName=DNS:$name"); + $subject = appendUnique($subject, "/subjectAltName=otherName:1.3.6.1.5.5.7.8.5;UTF8:$name"); + } + return $subject; +} + +function buildSubject() { + $subject = ""; + $count = 0; + $supressSAN=0; + if($_SESSION["profile"]["id"] == 104074) $supressSAN=1; + + if(is_array($_SESSION['_config']['rows'])) + foreach($_SESSION['_config']['rows'] as $row) + { + $count++; + if($count <= 1) + $subject .= "/CN=$row"; + $subject = appendSubjectAltName($subject, $row, $supressSAN); + } + if(is_array($_SESSION['_config']['altrows'])) + foreach($_SESSION['_config']['altrows'] as $row) + { + if(substr($row, 0, 4) == "DNS:") + { + $row = substr($row, 4); + $subject = appendSubjectAltName($subject, $row, $supressSAN); + } + } + return $subject; +} + $id = 0; if(array_key_exists("id",$_REQUEST)) $id=intval($_REQUEST['id']); $oldid = 0; if(array_key_exists("oldid",$_REQUEST)) $oldid=intval($_REQUEST['oldid']); $process = ""; if(array_key_exists("process",$_REQUEST)) $process=$_REQUEST['process']; @@ -667,35 +709,7 @@ exit; } - $subject = ""; - $count = 0; - $supressSAN=0; - if($_SESSION["profile"]["id"] == 104074) $supressSAN=1; - - if(is_array($_SESSION['_config']['rows'])) - foreach($_SESSION['_config']['rows'] as $row) - { - $count++; - if($count <= 1) - { - $subject .= "/CN=$row"; - if(!$supressSAN) $subject .= "/subjectAltName=DNS:$row"; - if(!$supressSAN) $subject .= "/subjectAltName=otherName:1.3.6.1.5.5.7.8.5;UTF8:$row"; - } else { - if(!$supressSAN) $subject .= "/subjectAltName=DNS:$row"; - if(!$supressSAN) $subject .= "/subjectAltName=otherName:1.3.6.1.5.5.7.8.5;UTF8:$row"; - } - } - if(is_array($_SESSION['_config']['altrows'])) - foreach($_SESSION['_config']['altrows'] as $row) - { - if(substr($row, 0, 4) == "DNS:") - { - $row = substr($row, 4); - if(!$supressSAN) $subject .= "/subjectAltName=DNS:$row"; - if(!$supressSAN) $subject .= "/subjectAltName=otherName:1.3.6.1.5.5.7.8.5;UTF8:$row"; - } - } + $subject = buildSubject(); if($_SESSION['_config']['rootcert'] < 1 || $_SESSION['_config']['rootcert'] > 2) $_SESSION['_config']['rootcert'] = 1; @@ -813,29 +827,7 @@ continue; } - $subject = ""; - $count = 0; - if(is_array($_SESSION['_config']['rows'])) - foreach($_SESSION['_config']['rows'] as $row) - { - $count++; - if($count <= 1) - { - $subject .= "/CN=$row"; - if(!strstr($subject, "=$row/") && - substr($subject, -strlen("=$row")) != "=$row") - $subject .= "/subjectAltName=$row"; - } else { - if(!strstr($subject, "=$row/") && - substr($subject, -strlen("=$row")) != "=$row") - $subject .= "/subjectAltName=$row"; - } - } - if(is_array($_SESSION['_config']['altrows'])) - foreach($_SESSION['_config']['altrows'] as $row) - if(!strstr($subject, "=$row/") && - substr($subject, -strlen("=$row")) != "=$row") - $subject .= "/subjectAltName=$row"; + $subject = buildSubject(); $subject = mysql_real_escape_string($subject); mysql_query("update `domaincerts` set `subject`='$subject',`csr_name`='$newfile' where `id`='$newid'");