Code

Added certificate
authorhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Tue, 7 Jun 2005 06:42:45 +0000 (06:42 +0000)
committerhickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8>
Tue, 7 Jun 2005 06:42:45 +0000 (06:42 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@608 594d385d-05f5-0310-b6e9-bd551577e9d8

include/class_certificate.inc [new file with mode: 0755]
include/functions.inc

diff --git a/include/class_certificate.inc b/include/class_certificate.inc
new file mode 100755 (executable)
index 0000000..5c9facf
--- /dev/null
@@ -0,0 +1,185 @@
+<?php
+
+/* definitions */
+
+/* certificates */
+define("PEM","pem");
+define("DER","der");
+
+class certificate 
+{
+  /* vars */
+  var $data;
+  var $type;
+  var $error;
+
+  /* Initialize all vars*/ 
+  function certificate()
+  {
+    $this->data= "";
+    $this->type= false;
+    $this->error="";  
+  } 
+
+  /* Reads specified Certfile/string and convert it to PEM*/
+  function import($data,$type=false)
+  {
+    /* if is file read from file, else use string as it is*/
+    if(is_file($data))
+    {
+      $fp = fopen($data,"r+");
+      $str = "";
+
+      if(!$fp){
+        $this->certificate();
+        $this->error=_("Can't open specified file, check accessibility and or existence");
+        return(false);
+      }else{
+        /* Reading data*/
+        while(!feof($fp)){
+          $str.=fgets($fp,1024);
+        }
+      }
+      /* Filename given, so we use the data from the file */
+      $this->data = $str;
+    } else {
+      /* Cert as String, use this string */
+      $this->data = $data;
+    }
+
+    /* Data can't be empty */
+    if($data = ""){
+      $this->certificate();
+      $this->error = _("Can't read specified certificate / or empty string given"); 
+      return(false);
+    }
+
+    /* Prefer specified certtype*/
+    if($type) {
+      $this->type = $type;  
+    }else{
+      /* Detect certtype, cause there is none specified */      
+
+      /* PEM allways starts with ----BEGIN CERTIFICATE-----*/
+      if(strstr($this->data,"CERTIFICATE"))  {
+        $this->type=PEM;
+      } else {
+        /* We test DER now, on fail abort */
+        $this->type=DER;
+      }
+    }
+
+    /* Convert to PEM to give $this->info the ability to read the cert */  
+    if($this->type == DER )    {
+      $this->derTOpem();
+    }
+
+    /* If cert is loaded correctly and is PEM now, we could read some data out of it */
+    if(count($this->info()) <=1)  {
+      $this->certificate();
+      $this->error = _("Can't load certificate, possibly unsupported format (use PEM/DER) ");
+      /* Reset*/
+      return(false);
+    }
+    /* Loaded a readable cert */
+    return(true);
+  }
+
+  /* Returns Array with all containing data */
+  function info()
+  {
+    if($this->type != PEM){
+      $this->error = _("The Format must be PEM, to output certificate informations");
+      return(false);
+    } else {
+    /* return an array with all given information */
+    return(openssl_x509_parse($this->data));
+    }
+  }
+
+
+  /* Export Certificate to specified file, with specified method*/
+  function export($type,$filename="temp")
+  {
+    /* Check if valid cert is loaded*/
+    if($this->type!=false){
+      /* Check if we must convert the cert */
+      if($this->type!= $type){
+        $strConv = $this->type."TO".$type;
+        $this->$strConv();
+      }    
+
+      /* open file for writing */
+      $fp = fopen($filename,"w+");
+
+      if(!$fp){
+        $this->error= _("Can't create/open File");
+        return(false);
+      }else{
+        fwrite($fp,$this->data,strlen($this->data));        
+      }
+      return(true);
+    }else{
+      $this->error= _("No valid certificate loaded");
+      return(false);    
+    }
+    return(false);
+  } 
+
+
+  /* Convert der to pem Certificate */
+  function derTOpem()
+  {
+    /* if type is DER start convert */
+    if($this->type == DER)
+    {
+      /* converting */
+      $this->type= PEM; 
+      $str = base64_encode($this->data);
+      $len = strlen($str);
+
+      $end = "";
+
+      while($len > 0 )
+      {
+        $len = $len - 64;
+        $str1 = substr($str,0,64)."\n";
+        $str  = substr($str,64,$len);
+        $end.= $str1;
+      }
+
+      $strend = "-----BEGIN CERTIFICATE-----\n".$end;
+      $strend .= "-----END CERTIFICATE-----";
+
+      $this->data     = $strend;
+      return(true); 
+    }
+    return(false);
+  }
+
+  /*Convert pem to der Certificate */
+  function pemTOder()
+  {
+    if($this->type == PEM)
+    {
+      $this->type= DER;
+
+      $str = $this->data;
+
+      $str = str_replace("-----BEGIN CERTIFICATE-----","",$str);
+      $str = str_replace("-----END CERTIFICATE-----","",$str);
+
+      $str = base64_decode($str);
+
+      $this->data = $str;
+      return(true);
+    }
+    return(false);
+  }
+
+}
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>
+
+
+
index f82510fd8c2acaa46427edb667c36bac252ba86a..8d306126df01e939c2f3a695992f225a32cbd2cb 100644 (file)
@@ -1543,7 +1543,7 @@ function gosaRaiseError($errno, $errstr, $errfile, $errline)
     return;
   }
 
-  /* FIXME: Hide ldap size limit messages */
+  /* Hide ldap size limit messages */
   if (preg_match('/ldap_error/', $errstr)){
     if (preg_match('/sizelimit/', $errstr)){
       return;