2007-12-29 11:02:00 +00:00
< ? php
/*
$Id $
2009-10-27 18:47:12 +00:00
This code is part of LDAP Account Manager ( http :// www . ldap - account - manager . org / )
2010-01-01 17:21:46 +00:00
Copyright ( C ) 2007 - 2010 Roland Gruber
2007-12-29 11:02:00 +00:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
/**
* Tests the lamdaemon script .
*
* @ author Roland Gruber
* @ package tools
*/
/** security functions */
include_once ( " ../../lib/security.inc " );
/** access to configuration options */
include_once ( " ../../lib/config.inc " );
/** account modules */
include_once ( " ../../lib/modules.inc " );
/** LDAP schema */
include_once ( " ../../lib/schema.inc " );
// start session
startSecureSession ();
2007-12-30 13:15:39 +00:00
// die if no write access
if ( ! checkIfWriteAccessIsAllowed ()) die ();
2007-12-29 11:02:00 +00:00
setlanguage ();
2010-01-01 17:21:46 +00:00
include '../main_header.php' ;
2007-12-29 11:02:00 +00:00
2010-01-01 17:21:46 +00:00
echo " <h1> " . _ ( " Schema test " ) . " </h1> \n " ;
2007-12-29 11:02:00 +00:00
get_schema_objectclasses ();
$classes = get_cached_schema ( 'objectclasses' );
if ( ! is_array ( $classes )) {
StatusMessage ( 'ERROR' , _ ( 'Unable to retrieve schema!' ), _ ( 'You do not have the required access rights or the LDAP schema is not published by your server.' ));
echo " </body></html> \n " ;
die ();
}
// loop for active account types
for ( $t = 0 ; $t < sizeof ( $types ); $t ++ ) {
$modules = $_SESSION [ 'config' ] -> get_AccountModules ( $types [ $t ]);
echo " <h2> " . getTypeAlias ( $types [ $t ]) . " </h2> \n " ;
echo " <table width= \" 100% \" class= \" " . $types [ $t ] . " list \" > \n " ;
for ( $m = 0 ; $m < sizeof ( $modules ); $m ++ ) {
$error = checkSchemaForModule ( $modules [ $m ], $types [ $t ]);
$message = _ ( " No problems found. " );
$icon = '../../graphics/pass.png' ;
if ( $error != null ) {
$icon = '../../graphics/fail.png' ;
$message = $error ;
}
// module name
echo " <tr class= \" " . $types [ $t ] . " list \" > \n " ;
echo " <td style= \" padding-left:10px; \" nowrap> " . getModuleAlias ( $modules [ $m ], $types [ $t ]) . " </td> \n " ;
// icon
echo " <td style= \" padding-left:10px;padding-right:10px; \" ><img alt= \" \" src= \" " . $icon . " \" ></td> \n " ;
// text
echo " <td width= \" 100% \" > " . $message . " </td> \n " ;
echo " </tr> \n " ;
}
echo " </table> \n <br> " ;
}
echo " </body> \n " ;
echo " </html> \n " ;
/**
* Checks if the object classes and attributes for this module are available .
*
* @ param String $name module name
* @ param String $type type ( user , group , ... )
* @ return String error message or null
*/
function checkSchemaForModule ( $name , $type ) {
$module = new $name ( $type );
$classes = $module -> getManagedObjectClasses ();
$attrs = $module -> getManagedAttributes ();
$aliases = array_flip ( $module -> getLDAPAliases ());
if ( sizeof ( $classes ) == 0 ) {
return null ;
}
$schemaClasses = get_cached_schema ( 'objectclasses' );
$schemaAttrs = array ();
// check if object classes are supported
for ( $o = 0 ; $o < sizeof ( $classes ); $o ++ ) {
if ( ! isset ( $schemaClasses [ strtolower ( $classes [ $o ])])) {
return sprintf ( _ ( " The object class %s is not supported by your LDAP server. " ), $classes [ $o ]);
}
// get attribute names
$schemaAttrs = array_merge ( $schemaAttrs , getRecursiveAttributesFromObjectClass ( $schemaClasses [ strtolower ( $classes [ $o ])]));
}
// check if attributes are supported
for ( $a = 0 ; $a < sizeof ( $attrs ); $a ++ ) {
if ( ! in_array_ignore_case ( $attrs [ $a ], $schemaAttrs )) {
if ( isset ( $aliases [ $attrs [ $a ]]) && in_array_ignore_case ( $aliases [ $attrs [ $a ]], $schemaAttrs )) {
continue ;
}
return sprintf ( _ ( " The attribute %s is not supported for the object class(es) %s by your LDAP server. " ), $attrs [ $a ], implode ( " , " , $classes ));
}
}
return null ;
}
/**
* Returns the names of all attributes which are managed by the given object class and its parents .
*
* @ param ObjectClass $oClass object class
* @ return array list of attribute names
*/
function getRecursiveAttributesFromObjectClass ( $oClass ) {
$attrs = array ();
$attrs = array_merge ( $attrs , $oClass -> getMustAttrNames ());
$attrs = array_merge ( $attrs , $oClass -> getMayAttrNames ());
$subClassNames = $oClass -> getSupClasses ();
for ( $i = 0 ; $i < sizeof ( $subClassNames ); $i ++ ) {
$schemaClasses = get_cached_schema ( 'objectclasses' );
$subClass = $schemaClasses [ strtolower ( $subClassNames [ $i ])];
$attrs = array_merge ( $attrs , getRecursiveAttributesFromObjectClass ( $subClass ));
}
return $attrs ;
}
?>