Code

Added support for master-key encrypted passwords in gosa.conf
[gosa.git] / include / class_config.inc
index a9897f349c052205608353d18e4828a6936049db..270f1e2565c7f5484e10308ce47d45a1a1805a40 100644 (file)
@@ -179,39 +179,49 @@ class config  {
     $this->level--;
   }
 
-  function get_ldap_link($sizelimit= FALSE)
-  {
-    /* Build new connection */
-    $this->ldap= ldap_init ($this->current['SERVER'], $this->current['BASE'],
-        $this->current['ADMIN'], $this->current['PASSWORD']);
 
-    /* Check for connection */
-    if (is_null($this->ldap) || (is_int($this->ldap) && $this->ldap == 0)){
-      $smarty= get_smarty();
-      print_red (_("Can't bind to LDAP. Please contact the system administrator."));
-      $smarty->display (get_template_path('headers.tpl'));
-      echo '<body style="background-image:none">'.$_SESSION['errors'].'</body></html>';
-      exit();
+  function get_credentials($creds)
+  {
+    if (isset($_SERVER['HTTP_GOSA_KEY'])){
+      return (cred_decrypt($creds, $_SERVER['HTTP_GOSA_KEY']));
     }
+    return ($creds);
+  }
 
-    if (!isset($_SESSION['size_limit'])){
-      $_SESSION['size_limit']= $this->current['SIZELIMIT'];
-      $_SESSION['size_ignore']= $this->current['SIZEIGNORE'];
-    }
 
-    if ($sizelimit){
-      $this->ldap->set_size_limit($_SESSION['size_limit']);
-    } else {
-      $this->ldap->set_size_limit(0);
-    }
+  function get_ldap_link($sizelimit= FALSE)
+  {
+      /* Build new connection */
+      $this->ldap= ldap_init ($this->current['SERVER'], $this->current['BASE'],
+          $this->current['ADMIN'], $this->get_credentials($this->current['PASSWORD']));
+
+      /* Check for connection */
+      if (is_null($this->ldap) || (is_int($this->ldap) && $this->ldap == 0)){
+        $smarty= get_smarty();
+        print_red (_("Can't bind to LDAP. Please contact the system administrator."));
+        $smarty->display (get_template_path('headers.tpl'));
+        echo '<body style="background-image:none">'.$_SESSION['errors'].'</body></html>';
+        exit();
+      }
 
-    /* Move referrals */
-    if (!isset($this->current['REFERRAL'])){
-      $this->ldap->referrals= array();
-    } else {
-      $this->ldap->referrals= $this->current['REFERRAL'];
-    }
+      if (!isset($_SESSION['size_limit'])){
+        $_SESSION['size_limit']= $this->current['SIZELIMIT'];
+        $_SESSION['size_ignore']= $this->current['SIZEIGNORE'];
+      }
+
+      if ($sizelimit){
+        $this->ldap->set_size_limit($_SESSION['size_limit']);
+      } else {
+        $this->ldap->set_size_limit(0);
+      }
 
+      /* Move referrals */
+      if (!isset($this->current['REFERRAL'])){
+        $this->ldap->referrals= array();
+      } else {
+        $this->ldap->referrals= $this->current['REFERRAL'];
+      }
+#    } 
     return ($this->ldap);
   }
 
@@ -497,9 +507,13 @@ class config  {
       $ldap->cd ($this->current['BASE']);
       $ldap->search ("(objectClass=sambaDomain)");
       while ($attrs= $ldap->fetch()){
-        $this->data['SERVERS']['SAMBA'][$attrs['sambaDomainName'][0]]= array(
-            "SID" => $attrs["sambaSID"][0],
-            "RIDBASE" => $attrs["sambaAlgorithmicRidBase"][0]);
+        $this->data['SERVERS']['SAMBA'][$attrs['sambaDomainName'][0]]= array( "SID" =>"","RIDBASE" =>"");
+        if(isset($attrs["sambaSID"][0])){
+          $this->data['SERVERS']['SAMBA'][$attrs['sambaDomainName'][0]]["SID"]  = $attrs["sambaSID"][0];
+        }
+        if(isset($attrs["sambaAlgorithmicRidBase"][0])){
+          $this->data['SERVERS']['SAMBA'][$attrs['sambaDomainName'][0]]["RIDBASE"] = $attrs["sambaAlgorithmicRidBase"][0];
+        }
       }
 
       /* If no samba servers are found, look for configured sid/ridbase */