diff --git a/src/includes/class/class.LSldapObject.php b/src/includes/class/class.LSldapObject.php index 2a1acfbd..ff385a19 100644 --- a/src/includes/class/class.LSldapObject.php +++ b/src/includes/class/class.LSldapObject.php @@ -583,14 +583,14 @@ class LSldapObject extends LSlog_staticLoggerClass { // Validate attribute values if ($justCheck) { self :: log_trace( - "validateAttrData(".$LSform->idForm.", ".$attr->name."): ". + "validateAttrData(".($LSform?$LSform->idForm:null).", {$attr->name}): ". "just check mode: do not validate attribute data using LDAP search" ); } else { foreach($attr -> getConfig('validation', array(), 'array') as $test) { self :: log_trace( - "validateAttrData(".$LSform->idForm.", ".$attr->name."): ". + "validateAttrData(".($LSform?$LSform->idForm:null).", {$attr->name}): ". "run validation with following config:\n".varDump($test) ); @@ -636,12 +636,23 @@ class LSldapObject extends LSlog_staticLoggerClass { // Handle base_dn parameter $sbasedn = LSconfig :: get('basedn', null, 'string', $test); - if ($sbasedn) + if ($sbasedn) { + if ($sbasedn == "%{dn}" && $LSform && $LSform -> idForm == 'create') { + self :: log_info( + "validateAttrData({$LSform->idForm}, {$attr->name}): Ignore attribute ". + "validation with filter '{$sfilter->asString()}' on the current object it self ". + "(base DN=$sbasedn) in create form" + ); + continue; + } $sbasedn = $this -> getFData($sbasedn); + } // If except_current_object (and not create form), list matching objets to exclude current one - if (LSconfig :: get('except_current_object', false, 'bool', $test) && - $LSform -> idForm != 'create') { + if ( + LSconfig :: get('except_current_object', false, 'bool', $test) + && (!$LSform || $LSform -> idForm != 'create') + ) { $sret = LSldap :: search($sfilter, $sbasedn, $sparams); $dn = $this->getDn(); $ret = 0; @@ -667,7 +678,7 @@ class LSldapObject extends LSlog_staticLoggerClass { ) { $retval = false; self :: log_warning( - "validateAttrData(".$LSform->idForm.", ".$attr->name."): ". + "validateAttrData(".($LSform?$LSform->idForm:null).", {$attr->name}): ". "validation with LDAP search on base DN='$sbasedn' and ". "filter='".($sfilter?$sfilter->as_string():null)."' error ($ret object(s) found)" ); @@ -676,7 +687,7 @@ class LSldapObject extends LSlog_staticLoggerClass { } else { self :: log_trace( - "validateAttrData(".$LSform->idForm.", ".$attr->name."): ". + "validateAttrData(".($LSform?$LSform->idForm:null).", {$attr->name}): ". "validation with LDAP search on base DN='$sbasedn' and ". "filter='".($sfilter?$sfilter->as_string():null)."' success ($ret object(s) found)" ); @@ -721,7 +732,7 @@ class LSldapObject extends LSlog_staticLoggerClass { $dependsAttrs = $attr->getDependsAttrs(); if (empty($dependsAttrs)) { self :: log_trace( - "validateAttrData(".$LSform->idForm.", ".$attr->name."): ". + "validateAttrData(".($LSform?$LSform->idForm:null).", {$attr->name}): ". "no dependent attribute" ); } @@ -735,7 +746,7 @@ class LSldapObject extends LSlog_staticLoggerClass { continue; } self :: log_debug( - "validateAttrData(".$LSform->idForm.", ".$attr->name."): ". + "validateAttrData(".($LSform?$LSform->idForm:null).", {$attr->name}): ". 'Attribute '.$attr->name.' updated: generate new value for attribute '.$dependAttr ); if($this -> attrs[$dependAttr] -> canBeGenerated()) {