Index: trunk/security/ExpressoCertMessages_pt_BR.properties
===================================================================
--- trunk/security/ExpressoCertMessages_pt_BR.properties	(revision 2354)
+++ trunk/security/ExpressoCertMessages_pt_BR.properties	(revision 2354)
@@ -0,0 +1,14 @@
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+DigitalCertificate001 = Nenhum token/smartcard foi detectado.\nOpera\u00E7\u00E3o n\u00E3o p\u00F4de ser realizada!
+DigitalCertificate002 = N\u00E3o \u00E9 poss\u00EDvel ler este e-mail com o Certificado Digital apresentado!\nMotivo: Este e-mail n\u00E3o foi cifrado com a chave p\u00FAblica deste Certificado Digital.
+
+DialogBuilder001 = Entre com o seu PIN:
+DialogBuilder002 = Selecione o certificado:
+
+cancel = Cancelar
+pin = PIN
+ok = Ok
+certificate = Certificado
+select = Selecionar
Index: trunk/security/vercert.php
===================================================================
--- trunk/security/vercert.php	(revision 2354)
+++ trunk/security/vercert.php	(revision 2354)
@@ -0,0 +1,259 @@
+<?php
+function item_para_uid($dados_do_certificado)
+	{
+/*
+// Exemplo do Array $dados_do_certificado padrao ICP-BRASIL
+// O conteudo do array pode variar conforme a AC emissora.
+Array
+(
+    [SERIALNUMBER] => 2009031816232802
+    [EMISSOR_CAMINHO_COMPLETO] => Array
+        (
+            [C] => BR
+            [O] => ICP-Brasil
+            [OU] => CSPB-1
+            [CN] => HOMAutoridade Certificadora do SERPRO Final v2
+        )
+
+    [EMISSOR] => HOMAutoridade Certificadora do SERPRO Final v2
+    [INICIO_VALIDADE] => 20090318205216
+    [FIM_VALIDADE] => 20120317205216
+    [EXPIRADO] => 
+    [SUBJECT] => Array
+        (
+            [C] => BR
+            [O] => ICP-Brasil
+            [OU] => Pessoa Fisica A3
+            [CN] => CESAR VIANNA
+        )
+
+    [NOME] => CESAR VIANNA
+    [AUTHORITYKEYIDENTIFIER] => AE34F397BB05B1AA6CC3FD6C4F0E9129BBB61BE2
+    [KEYUSAGE] => Array
+        (
+            [digitalSignature] => 1
+            [nonRepudiation] => 1
+            [keyEncipherment] => 1
+        )
+
+    [EXTKEYUSAGE] => Array
+        (
+            [clientAuth] => 1.3.6.1.5.5.7.3.2
+            [emailProtection] => 1.3.6.1.5.5.7.3.4
+        )
+
+    [CA] => 
+    [CRLDISTRIBUTIONPOINTS] => Array
+        (
+            [0] => http://ccdhom.serpro.gov.br/lcr/serproacfv2.crl
+            [1] => http://ccdhom.serpro.gov.br/lcr/serproacfv3.crl
+            [2] => http://ccdhom.serpro.gov.br/lcr/serproacfv4.crl
+        )
+
+    [2.16.76.1.3.6] => Array
+        (
+            [CADINSS] => 000000000000
+        )
+
+    [CADINSS] => 000000000000
+    [2.16.76.1.3.5] => Array
+        (
+            [TITULO] => 000000000000
+            [ZONA] => 000
+            [SECAO] => 0000
+            [TITULO_CIDADE_UF] => 
+        )
+
+    [TITULO] => 000000000000
+    [ZONA] => 000
+    [SECAO] => 0000
+    [TITULO_CIDADE_UF] => 
+    [2.16.76.1.3.1] => Array
+        (
+            [NASCIMENTO] => 19081981
+            [CPF] => 12345678902
+            [NIS] => 12345678901
+            [RG] => 000201075150953
+            [ORGAOUF] => SSPRS
+        )
+
+    [NASCIMENTO] => 19081981
+    [CPF] =>  12345678902
+    [NIS] => 12345678901
+    [RG] => 000201075150953
+    [ORGAOUF] => SSPRS
+    [EMAIL] => cesar.vianna@pr.planalto.gov.br
+)
+*/	
+	
+		// Retorna o CPF para usar como uid.
+		return $dados_do_certificado['2.16.76.1.3.1']['CPF'];
+	}
+	
+	
+$GLOBALS['phpgw_info']['flags'] = array(
+		'disable_Template_class' => True,
+		'login'                  => True,
+		'currentapp'             => 'login',
+		'noheader'               => True
+	);
+
+if(!$_REQUEST['certificado'])
+{
+   echo '2'.chr(0x0D).chr(0x0A).'Certificado não foi apresentado.';
+   exit();
+}
+
+if(file_exists('../header.inc.php'))
+	{
+		include('../header.inc.php');
+	}
+else
+	{
+	        echo '1'.chr(0x0D).chr(0x0A).'Arquivo header.inc.php n&atilde;o foi localizado.';
+		exit();    
+	}
+    
+$ldap_context = $GLOBALS['phpgw_info']['server']['ldap_context'];
+$ldap_servidor = $GLOBALS['phpgw_info']['server']['ldap_host'];
+$ldap_dn = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
+$ldap_passwd = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
+
+require_once('classes/CertificadoB.php');
+require_once('classes/Verifica_Certificado.php');
+include('classes/Verifica_Certificado_conf.php');
+
+  # Transforma o certificado do formato PEM para o formato DER ...
+  function troca_espaco_por_mais($pem_data) 
+  {
+    $begin = "CERTIFICATE-----";
+    $end   = "-----END";
+    $aux = substr($pem_data, strpos($pem_data, $begin)+strlen($begin));    
+    $aux = substr($aux, 0, strpos($aux, $end));
+    $aux = strtr($aux,' ','+');
+    $aux = '-----BEGIN CERTIFICATE-----'.$aux.'-----END CERTIFICATE-----';
+    return $aux;
+  }
+ 
+
+$cert =str_replace(chr(0x0A).chr(0x0A),chr(0x0A),$_REQUEST['certificado']);
+$cert = troca_espaco_por_mais($cert);
+
+$c = new certificadoB();
+$c->certificado($cert);
+
+if (!$c->apresentado)
+{
+   echo '2'.chr(0x0D).chr(0x0A).'Certificado não foi apresentado.';
+   exit();
+}
+
+if (!$c->dados['CPF'])
+{
+   echo '2'.chr(0x0D).chr(0x0A).'Não foi possível obter o CPF do certificado apresentado.';
+   exit();
+}
+
+$b = new Verifica_Certificado($c->dados,$cert);
+
+// Testa se Certificado OK.
+if(!$b->status)
+{
+   $msg = '3'.chr(0x0D).chr(0x0A).$b->msgerro;
+
+   foreach($b->erros_ssl  as $linha)
+   {
+	$msg .= "\n" . $linha;
+   }
+
+   echo $msg;
+   exit();   
+}
+
+    $cc=ldap_connect($ldap_servidor); 
+    ldap_set_option($cc, LDAP_OPT_PROTOCOL_VERSION, 3);
+    //  bind ..
+    $sr=ldap_bind($cc,$ldap_dn,$ldap_passwd);  
+
+    $filtro = 'uid='. item_para_uid($c->dados);
+
+    $atributos = array();
+    //$atributos[] = 'phpgwaccountexpires';
+    $atributos[] = 'phpgwlastpasswdchange';
+
+    if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao']))
+		{
+		    $atributos[] = $GLOBALS['phpgw_info']['server']['atributoexpiracao'];
+		}
+
+     $atributos[] = "usercertificate";
+     $atributos[] = "phpgwaccountstatus";
+     $atributos[] = "cryptpassword";
+     $atributos[] = "uid";
+      
+    // Pesquisa uid no RHDS/LDAP
+    $sr=ldap_search($cc, $ldap_context,$filtro,$atributos);    
+
+    // Pega resultado ....
+    $info = ldap_get_entries($cc, $sr);
+    
+    // Tem de achar só uma entrada.....ao menos uma....
+    if($info["count"]!=1)
+    {
+	echo '4'.chr(0x0D).chr(0x0A).'Dados inválidos no diretório de usuários';	
+	ldap_close($cc);
+	exit();
+    }
+
+// A conta expresso tem de estar ativa....
+if($info[0]['phpgwaccountstatus'][0]!='A')
+    {
+	echo '5'.chr(0x0D).chr(0x0A).'Conta do usuario nao esta ativa no Expresso.';
+	ldap_close($cc);
+	exit();
+    }
+
+if($info[0]["cryptpassword"][0] && $info[0]["usercertificate"][0] && $cert == $info[0]["usercertificate"][0] )
+    {
+	echo '0'.chr(0x0D).chr(0x0A).$info[0]["uid"][0].chr(0x0D).chr(0x0A).$info[0]["cryptpassword"][0];
+	//echo '0' . "\n" . $info[0]["uid"][0] . "\n" . $info[0]["cryptpassword"][0];
+    }
+else
+    {
+        if(!$info[0]["usercertificate"][0] || $cert != $info[0]["usercertificate"][0])
+		{
+			$user_info = array();
+			$aux1 = $info[0]["dn"];
+			$user_info['usercertificate'] = $cert;
+			if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao']))
+				{
+					if(substr($info[0][$GLOBALS['phpgw_info']['server']['atributoexpiracao']][0],-1,1)=="Z")
+						{
+							$user_info[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = '19800101000000Z';
+						}
+					else
+						{
+							$user_info[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = '0';
+						}
+				}
+			else
+				{
+                                        $user_info['phpgwlastpasswdchange'] = '0';
+				}
+                                
+			if(!ldap_modify($cc,$aux1,$user_info))
+                            {
+                                echo '6'.chr(0x0D).chr(0x0A).'Ocorreu um erro no acolhimento do certificado.',$aux1;
+                            }
+                        else
+                            {
+                                echo '6'.chr(0x0D).chr(0x0A).'Seu Certificado foi cadastrado. Sua senha foi expirada. Altere sua senha para concluir o processo.';
+                            }
+		}
+	else
+		{
+			echo '6'.chr(0x0D).chr(0x0A).'Sua senha foi expirada. Altere sua senha para acessar o Expresso usando certificado digital.';
+		}
+    }
+ldap_close($cc);
+?>
