diff --git a/include/class_ldap.inc b/include/class_ldap.inc
index 71fcbb756796bd1ab80b1b5a701ded6e565f4f6b..b3ae4983b38e7ac0bfd609cd4e391325114fc3b2 100644 (file)
--- a/include/class_ldap.inc
+++ b/include/class_ldap.inc
<?php
/*****************************************************************************
newldap.inc - version 1.0
<?php
/*****************************************************************************
newldap.inc - version 1.0
- Copyright (C) 2003 Alejandro Escanero Blanco <alex@ofmin.com>
+ Copyright (C) 2003 Alejandro Escanero Blanco <aescanero@chaosdimension.org>
Copyright (C) 2004-2006 Cajus Pollmeier <pollmeier@gonicus.de>
Based in code of ldap.inc of
Copyright (C) 2004-2006 Cajus Pollmeier <pollmeier@gonicus.de>
Based in code of ldap.inc of
}
}
}
}
+ $this->log("LDAP operation: time=".get_MicroTimeDiff($start,microtime())." operation=search('".$this->fix($this->basedn)."', '$filter')");
return($this->sr);
}else{
$this->error = "Could not connect to LDAP server";
return($this->sr);
}else{
$this->error = "Could not connect to LDAP server";
}
}
}
}
+ $this->log("LDAP operation: time=".get_MicroTimeDiff($start,microtime())." operation=ls('".$this->fix($basedn)."', '$filter')");
+
return($this->sr);
}else{
$this->error = "Could not connect to LDAP server";
return($this->sr);
}else{
$this->error = "Could not connect to LDAP server";
if ($this->re)
{
$att= @ldap_get_attributes($this->cid, $this->re);
if ($this->re)
{
$att= @ldap_get_attributes($this->cid, $this->re);
- $att['dn']= $this->convert(@ldap_get_dn($this->cid, $this->re));
+ $att['dn']= trim($this->convert(@ldap_get_dn($this->cid, $this->re)));
}
$this->error = @ldap_error($this->cid);
if (!isset($att)){
}
$this->error = @ldap_error($this->cid);
if (!isset($att)){
$rv = @ldap_get_dn($this->cid, $this->re);
$this->error = @ldap_error($this->cid);
$rv = @ldap_get_dn($this->cid, $this->re);
$this->error = @ldap_error($this->cid);
- return($this->convert($rv));
+ return(trim($this->convert($rv)));
}
}else{
$this->error = "Perform a Fetch with no Search";
}
}else{
$this->error = "Perform a Fetch with no Search";
/* If this is no department */
foreach($attr as $key => $value){
/* If this is no department */
foreach($attr as $key => $value){
- if(in_array($key ,array("FAItemplateFile","FAIscript", "gotoLogonScript", "gosaApplicationIcon"))){
+ if(in_array($key ,array("FAItemplateFile","FAIscript", "gotoLogonScript", "gosaApplicationIcon","gotoMimeIcon"))){
$sr= ldap_read($this->cid, $this->fix($sourcedn), "$key=*", array($key));
$ei= ldap_first_entry($this->cid, $sr);
if ($tmp= @ldap_get_values_len($this->cid, $ei,$key)){
$sr= ldap_read($this->cid, $this->fix($sourcedn), "$key=*", array($key));
$ei= ldap_first_entry($this->cid, $sr);
if ($tmp= @ldap_get_values_len($this->cid, $ei,$key)){
unset($attr['count']);
unset($attr['dn']);
unset($attr['count']);
unset($attr['dn']);
- if(!in_array("gosaApplication" , $attr['objectClass'])){
+ if((!in_array("gosaApplication" , $attr['objectClass'])) && (!in_array("gotoMimeType", $attr['objectClass']))){
+ $attr['FAIdebianRelease'] = $destinationName;
if($type=="branch"){
$attr['FAIstate'] ="branch";
}elseif($type=="freeze"){
if($type=="branch"){
$attr['FAIstate'] ="branch";
}elseif($type=="freeze"){
}
}
}
}
+ echo "<script language=\"javascript\" type=\"text/javascript\">scrollDown2();</script>" ;
+
$this->ls ("(objectClass=*)",$sourcedn);
while ($this->fetch()){
$deldn= $this->getDN();
$this->ls ("(objectClass=*)",$sourcedn);
while ($this->fetch()){
$deldn= $this->getDN();
}
$real_path= substr($target, 0, strlen($target) - strlen($this->basedn) -1 );
}
$real_path= substr($target, 0, strlen($target) - strlen($this->basedn) -1 );
- $l= array_reverse(ldap_explode_dn($real_path,0));
+ $l= array_reverse(gosa_ldap_explode_dn($real_path));
unset($l['count']);
$cdn= $this->basedn;
$tag= "";
unset($l['count']);
$cdn= $this->basedn;
$tag= "";
function gen_xls ($dn, $filter= "(objectClass=*)", $attributes= array('*'), $recursive= TRUE,$r_array=0)
{
function gen_xls ($dn, $filter= "(objectClass=*)", $attributes= array('*'), $recursive= TRUE,$r_array=0)
{
- $display= "";
+ $display= array();
$this->cd($dn);
$this->search("$filter");
$this->cd($dn);
$this->search("$filter");
- function import_complete_ldif($str_attr,&$error,$overwrite,$cleanup)
+ /* This funktion imports ldifs
+
+ If DeleteOldEntries is true, the destination entry will be deleted first.
+ If JustModify is true the destination entry will only be touched by the attributes specified in the ldif.
+ if JustMofify id false the destination dn will be overwritten by the new ldif.
+ */
+
+ function import_complete_ldif($str_attr,&$error,$JustModify,$DeleteOldEntries)
{
if($this->reconnect) $this->connect();
{
if($this->reconnect) $this->connect();
$cnt = 0;
$current_line = 0;
$cnt = 0;
$current_line = 0;
+ /* FIX ldif */
+ $last = "";
+ $tmp = "";
+ $i = 0;
+ foreach($entries as $entry){
+ if(preg_match("/^ /",$entry)){
+ $tmp[$i] .= trim($entry);
+ }else{
+ $i ++;
+ $tmp[$i] = trim($entry);
+ }
+ }
+
/* Every single line ... */
/* Every single line ... */
- foreach($entries as $entry) {
+ foreach($tmp as $entry) {
$current_line ++;
/* Removing Spaces to ..
$current_line ++;
/* Removing Spaces to ..
if(ereg("::",$tmp2))
{
$encoded = split("::",$entry);
if(ereg("::",$tmp2))
{
$encoded = split("::",$entry);
- $attr = $encoded[0];
- $value = base64_decode($encoded[1]);
+ $attr = trim($encoded[0]);
+ $value = base64_decode(trim($encoded[1]));
/* Add linenumber */
$data .= $current_line."#".base64_encode($attr.":".$value)."\n";
}
/* Add linenumber */
$data .= $current_line."#".base64_encode($attr.":".$value)."\n";
}
$ndn = split("#", $lineone[0]);
$line = base64_decode($ndn[1]);
$ndn = split("#", $lineone[0]);
$line = base64_decode($ndn[1]);
- $dnn = split (":",$line);
+ $dnn = split (":",$line,2);
$current_line = $ndn[0];
$dn = $dnn[0];
$value = $dnn[1];
$current_line = $ndn[0];
$dn = $dnn[0];
$value = $dnn[1];
/* Delete before insert */
$usermdir= false;
/* Delete before insert */
$usermdir= false;
- /* The dn address already exists! */
- if (($this->dn_exists($value))&&((!$overwrite)&&(!$cleanup))) {
+ /* The dn address already exists, Don't delete destination entry, overwrite it */
+ if (($this->dn_exists($value))&&((!$JustModify)&&(!$DeleteOldEntries))) {
- $error= sprintf(_("The dn: '%s' (from line %s) already exists in the LDAP database."), $line, $current_line);
- return ALREADY_EXISTING_ENTRY;
+ $usermdir = $usemodify = false;
- } elseif(($this->dn_exists($value))&&($cleanup)){
+ /* Delete old entry first, then add new */
+ } elseif(($this->dn_exists($value))&&($DeleteOldEntries)){
/* Delete first, then add */
$usermdir = true;
/* Delete first, then add */
$usermdir = true;
- } elseif(($this->dn_exists($value))&&($overwrite)) {
+ } elseif(($this->dn_exists($value))&&($JustModify)) {
/* Modify instead of Add */
$usemodify = true;
/* Modify instead of Add */
$usemodify = true;
}
}
- /* Imports a single entry */
+ /* Imports a single entry
+ If $delete is true; The old entry will be deleted if it exists.
+ if $modify is true; All variables that are not touched by the new ldif will be kept.
+ if $modify is false; The new ldif overwrites the old entry, and all untouched attributes get lost.
+ */
function import_single_entry($str_attr,$modify,$delete)
{
if($this->reconnect) $this->connect();
function import_single_entry($str_attr,$modify,$delete)
{
if($this->reconnect) $this->connect();
}
/* Split the line into attribute and value */
}
/* Split the line into attribute and value */
- $attr = split(":", $row);
+ $attr = split(":", $row,2);
$attr[0]= trim($attr[0]); /* attribute */
$attr[0]= trim($attr[0]); /* attribute */
- $attr[1]= trim($attr[1]); /* value */
+ $attr[1]= $attr[1]; /* value */
+
+ /* Check :: was used to indicate base64_encoded strings */
+ if($attr[1][0] == ":"){
+ $attr[1]=trim(preg_replace("/^:/","",$attr[1]));
+ $attr[1]=base64_decode($attr[1]);
+ }
+
+ $attr[1] = trim($attr[1]);
/* Check for attributes that are used more than once */
if(!isset($data[$attr[0]])) {
/* Check for attributes that are used more than once */
if(!isset($data[$attr[0]])) {
/* If dn is an index of data, we should try to insert the data */
if(isset($data['dn'])) {
/* If dn is an index of data, we should try to insert the data */
if(isset($data['dn'])) {
+
+ /* Fix dn */
+ $tmp = gosa_ldap_explode_dn($data['dn']);
+ unset($tmp['count']);
+ $newdn ="";
+ foreach($tmp as $tm){
+ $newdn.= trim($tm).",";
+ }
+ $newdn = preg_replace("/,$/","",$newdn);
+ $data['dn'] = $newdn;
+
/* Creating Entry */
$this->cd($data['dn']);
/* Creating Entry */
$this->cd($data['dn']);
if($delete){
$this->rmdir_recursive($data['dn']);
}
if($delete){
$this->rmdir_recursive($data['dn']);
}
-
+
/* Create missing trees */
/* Create missing trees */
+ $this->cd ($this->basedn);
$this->create_missing_trees($data['dn']);
$this->create_missing_trees($data['dn']);
+ $this->cd($data['dn']);
+
+ $dn = $data['dn'];
unset($data['dn']);
unset($data['dn']);
- /* If entry exists use modify */
if(!$modify){
if(!$modify){
- $ret = $this->add($data);
+
+ $this->cat($dn);
+ if($this->count()){
+
+ /* The destination entry exists, overwrite it with the new entry */
+ $attrs = $this->fetch();
+ foreach($attrs as $name => $value ){
+ if(!is_numeric($name)){
+ if(in_array($name,array("dn","count"))) continue;
+ if(!isset($data[$name])){
+ $data[$name] = array();
+ }
+ }
+ }
+ $ret = $this->modify($data);
+
+ }else{
+
+ /* The destination entry doesn't exists, create it */
+ $ret = $this->add($data);
+ }
+
} else {
} else {
+
+ /* Keep all vars that aren't touched by this ldif */
$ret = $this->modify($data);
}
}
$ret = $this->modify($data);
}
}
- show_ldap_error($this->get_error(),_("Ldap import failed"));
+ show_ldap_error($this->get_error(), sprintf(_("Ldap import with dn '%s' failed."),$dn));
return($ret);
}
return($ret);
}
return $objectclasses;
}
return $objectclasses;
}
+ function log($string)
+ {
+ if (isset($_SESSION['config'])){
+ $cfg= $_SESSION['config'];
+ if (isset($cfg->current['LDAPSTATS']) && preg_match('/true/i', $cfg->current['LDAPSTATS'])){
+ syslog (LOG_INFO, $string);
+ }
+ }
+ }
+
+ /* added by Guido Serra aka Zeph <zeph@purotesto.it> */
+ function getCn($dn){
+ $simple= split(",", $dn);
+
+ foreach($simple as $piece) {
+ $partial= split("=", $piece);
+
+ if($partial[0] == "cn"){
+ return $partial[1];
+ }
+ }
+ }
+
+ function get_naming_contexts($server, $admin= "", $password= "")
+ {
+ /* Build LDAP connection */
+ $ds= ldap_connect ($server);
+ if (!$ds) {
+ die ("Can't bind to LDAP. No check possible!");
+ }
+ ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
+ $r= ldap_bind ($ds, $admin, $password);
+
+ /* Get base to look for naming contexts */
+ $sr = @ldap_read ($ds, "", "objectClass=*", array("namingContexts"));
+ $attr= @ldap_get_entries($ds,$sr);
+
+ return ($attr[0]['namingcontexts']);
+ }
+
+
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: