index 90427bcdf19795a8a74e932e2412c3a71335cecf..91fd12ccc4ebfbaf52cb145a2f95be34ecb7f999 100644 (file)
function view_schema_check($table)
{
- $message="<table class=\"check\">";
+ $message="<table summary=\"\" class=\"check\">";
foreach ($table as $key => $values){
$msg = $values['msg'];
}
-function schema_check($server, $admin, $password, $aff=0)
+function is_schema_readable($server, $admin, $password)
+{
+ $ds= ldap_connect ($server);
+ if (!$ds) {
+ return (false);
+ }
+ ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
+ $r= ldap_bind ($ds, $admin, $password);
+
+ /* Get base to look for schema */
+ $sr = @ldap_read ($ds, "", "objectClass=*", array("subschemaSubentry"));
+ $attr= @ldap_get_entries($ds,$sr);
+ if (!isset($attr[0]['subschemasubentry'][0])){
+ return (false);
+ }
+
+ $nb= $attr[0]['subschemasubentry'][0];
+ $objectclasses= array();
+ $sr= ldap_read ($ds, $nb, "objectClass=*", array("objectclasses"));
+ $attrs= ldap_get_entries($ds,$sr);
+ if (!isset($attrs[0])){
+ return (false);
+ }
+ return(true);
+}
+
+function schema_check($server, $admin, $password, $aff=0,$CalledByIndexPhP=false)
{
global $config;
"gosaApplicationGroup" => array("version" => "2.4", "class" => "appgroup","file" => "gosa.schema"),
"GOhard" => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
- "gotoTerminal" => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
+ "gotoTerminal" => array("version" => "2.0", "class" => "terminals","file" => "goto.schema"),
"goServer" => array("version" => "2.4","class" => "server","file" => "goserver.schema"),
"goTerminalServer" => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
- "goNfsServer" => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
+ "goShareServer" => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
"goNtpServer" => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
"goSyslogServer" => array("version" => "2.4", "class" => "terminals","file" => "goto.schema"),
"goLdapServer" => array("version" => "2.4"),
} else {
if (!check_schema_version($objectclasses[$key], $value['version'])){
$messages[$key]['msg']= sprintf(_("Optional objectclass '%s' required by plugin '%s' does not have version %s"), $key, $class, $value['version']);
+ $messages[$key]['needonstartup'] = TRUE;
$messages[$key]['status'] =FALSE;
}else {
if(!isset($affich2[$class])){
if (!check_schema_version($objectclasses[$key], $value['version'])){
$messages[$key]['msg']= sprintf(_("Required objectclass '%s' does not have version %s"), $key, $value['version']);
$messages[$key]['status'] = FALSE;
+ $messages[$key]['needonstartup'] = TRUE;
}
+
}
}
}
$affich['phoneaccount']['msg']= _("Support for gofon enabled")."<td class=\"check\">gofon.schema</td>";
$affich['phoneaccount']['status']= true;
}
-
- if(($_SESSION['ldapconf']['mail_methods'][$_SESSION['ldapconf']['mail']] == "kolab")){
- if(!isset($objectclasses['kolabInetOrgPerson']))
- {
- $messages['kolab']['msg']= _("Support for Kolab disabled, no schema seems to be installed, setting mail-method to cyrus");
- $affich['kolab']['msg']=$messages['kolab']['msg']."<td class=\"check\">kolab2.schema</td>";
-
- $tmp= array_flip($_SESSION['ldapconf']['mail_methods']);
- $_SESSION['ldapconf']['mail']=$tmp['cyrus'];
- $messages['kolab']['status']= FALSE;
- $affich['kolab']['status']= FALSE;
- }else{
- $affich['kolab']['msg']=_("Support for Kolab enabled")."<td class=\"check\">gofon.schema</td>";
- $affich['kolab']['status']= TRUE;
- }
+
+ /* Fix for PHP Fehler "Undefined index: ldapconf"
+ * Ablaufverfolgung[1]: Funktion schema_check Datei: /home/hickert/gosa/include/functions_setup.inc (Zeile 230)
+ */
+ if((isset($_SESSION['ldapconf']['mail_methods']))&&(isset($_SESSION['ldapconf']))){
+ if(($_SESSION['ldapconf']['mail_methods'][$_SESSION['ldapconf']['mail']] == "kolab")&&(!$CalledByIndexPhP)){
+ if(!isset($objectclasses['kolabInetOrgPerson'])) {
+ $messages['kolab']['msg']= _("Support for Kolab disabled, no schema seems to be installed, setting mail-method to cyrus");
+ $affich['kolab']['msg']=$messages['kolab']['msg']."<td class=\"check\">kolab2.schema</td>";
+ $tmp= array_flip($_SESSION['ldapconf']['mail_methods']);
+ $_SESSION['ldapconf']['mail']=$tmp['cyrus'];
+ $messages['kolab']['status']= FALSE;
+ $affich['kolab']['status']= FALSE;
+ }else{
+ $affich['kolab']['msg']=_("Support for Kolab enabled")."<td class=\"check\">gofon.schema</td>";
+ $affich['kolab']['status']= TRUE;
+ }
+ }
}
if($aff==0){
return ($messages);
function check(&$faults, $message, $description, $test, $required= TRUE)
{
- $msg= "<table class='check'><tr><td class='check' style='font-size:14px;'>$message</td>
+ $msg= "<table summary=\"\" class='check'><tr><td class='check' style='font-size:14px;'>$message</td>
<td rowspan=2 style='vertical-align:middle; text-align:center;width:45px;'>";
if ($test){
$msg.= _("OK")."<br>";
$msg.= check ( $faults, _("Checking for ldap module"),
_("This is the main module used by GOsa and therefore really required."),
- function_exists('ldap_bind'));
+ is_callable('ldap_bind'));
$msg.= check ( $faults, _("Checking for XML functions"),
_("XML functions are required to parse the configuration file."),
- function_exists('xml_parser_create'));
+ is_callable('xml_parser_create'));
$msg.= check ( $faults, _("Checking for gettext support"),
- _("Gettext support is required for internationalized GOsa."), function_exists('bindtextdomain'));
+ _("Gettext support is required for internationalized GOsa."),
+ is_callable('bindtextdomain'));
$msg.= check ( $faults, _("Checking for iconv support"),
_("This module is used by GOsa to convert samba munged dial informations and is therefore required."),
- function_exists('iconv'));
+ is_callable('iconv'));
$msg.= check ( $faults, _("Checking for mhash module"),
_("To use SSHA encryption, you'll need this module. If you are just using crypt or md5 encryption, ignore this message. GOsa will run without it."),
- function_exists('mhash'), FALSE);
+ is_callable('mhash'), FALSE);
$msg.= check ( $faults, _("Checking for imap module"),
_("The IMAP module is needed to communicate with the IMAP server. It gets status informations, creates and deletes mail users."),
- function_exists('imap_open'));
+ is_callable('imap_open'));
$msg.= check ( $faults, _("Checking for getacl in imap"),
_("The getacl support is needed for shared folder permissions. The standard IMAP module is not capable of reading acl's. You need a recend PHP version for this feature."),
- function_exists('imap_getacl'), FALSE);
+ is_callable('imap_getacl'), FALSE);
$msg.= check ( $faults, _("Checking for mysql module"),
_("MySQL support is needed for reading GOfax reports from databases."),
- function_exists('mysql_query'), FALSE);
+ is_callable('mysql_query'), FALSE);
$msg.= check ( $faults, _("Checking for cups module"),
_("In order to read available printers from IPP protocol instead of printcap files, you've to install the CUPS module."),
- function_exists('cups_get_dest_list'), FALSE);
+ is_callable('cups_get_dest_list'), FALSE);
$msg.= check ( $faults, _("Checking for kadm5 module"),
_("Managing users in kerberos requires the kadm5 module which is downloadable via PEAR network."),
- function_exists('kadm5_init_with_password'), FALSE);
+ is_callable('kadm5_init_with_password'), FALSE);
$msg.= check ( $faults, _("Checking for snmp Module"),
_("Simple Network Management Protocol (SNMP) is required for client monitoring."),
- function_exists('snmpget'), FALSE);
+ is_callable('snmpget'), FALSE);
+
return ($msg);
}
+function get_link($function_name) {
+ $result= "<a href='http://de.php.net/manual/en/function.";
+
+ /* Replace all underscores with hyphens (phpdoc convention) */
+ $function_name= str_replace("_", "-", $function_name);
+
+ /* Append to base URL */
+ $result.= $function_name.".php'>$function_name</a>";
+
+ return $result;
+}
+
+function perform_additional_function_checks(&$faults) {
+ global $check_globals;
+
+ $faults= 0;
+ $msg= "";
+ $functions= array();
+
+ $functions_list= '../include/functions_list.inc';
+
+ /* Make sure that we can read the file */
+ if(is_readable($functions_list)) {
+ /* Open filehandle */
+ $fh= fopen($functions_list,'rb');
+ if($fh!=null) {
+ $functions= eval(fread($fh,filesize($functions_list)));
+ }
+ }
+
+ $msg.= "<h1>"._("PHP detailed function inspection")."</h1>";
+ /* Only print message, if function is not callable */
+ foreach($functions as $key => $fn_name) {
+ if(!is_callable($fn_name)) {
+ $msg.= check ($faults, sprintf(_("Checking for function <b>%s</b>"), get_link($fn_name)),
+ sprintf(_("The function <b>%s</b> is used by GOsa. There is no information if it's optional or required yet."),get_link($fn_name)),
+ is_callable($fn_name), false);
+ }
+ }
+ return $msg;
+}
function perform_additional_checks(&$faults)
{
+ $ret = NULL;
/* Programm check */
$msg= "<h1>"._("Checking for some additional programms")."</h1>";
$replacements['{LDAPHOST}'] = $ldapconf['uri'];
$replacements['{PASSWORD}'] = $ldapconf['password'];
$replacements['{CRYPT}'] = $ldapconf['arr_cryptkeys'][$ldapconf['arr_crypts']];
- $replacements['{SID}\n'] = "";
- $replacements['{RIDBASE}\n'] = "";
+ $replacements['{SID}'] = "";
+ $replacements['{RIDBASE}'] = "";
if($ldapconf['mail'] != "disabled"){
$replacements['{MAILMETHOD}'] = $ldapconf['mail_methods'][$ldapconf['mail']];
}
$replacements['{GOVERNMENTMODE}']= "false";
$replacements['{kolabAccount}'] = "";
$replacements['{servKolab}'] = "";
+ $replacements['{errorlvl}'] = $ldapconf['errorlvl'];
/* This array contains all preg_replace syntax to delete all unused plugins
THE kEY MUST BE THE CLASSNAME so we can check it with $ldapconf['classes'] */
$possible_plugins['webdav'][] = "'\n.*<tab.*webdav.*>.*\n'i";
$possible_plugins['phpgroupware'][]= "'\n.*<tab.*phpgroupware.*>.*\n'i";
- /* Header information
+ /*Header information
Needed to send the generated gosa.conf to the browser */
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
/* Try to find a Samba Domain Objekt */
$ldap->search("(objectClass=sambaDomain)");
-
+
/* Something found ??? so we need to define ridbase an SID by ourselfs */
if($ldap->count()< 1) {
$replacements['{SID}']= "sid=\"123412-11\"";
/* Remove all unused plugins */
- foreach($possible_plugins as $plugin) {
+ foreach($possible_plugins as $key=> $plugin) {
foreach($plugin as $key=>$val) {
if(in_array($plugin,$classes)) {
$str = preg_replace($val,"\n",$str);
/* Show setup_page 1 */
function show_setup_page1($withoutput = true)
{
+ $faults = array();
$smarty = get_smarty();
$smarty->assign ("content", get_template_path('setup_introduction.tpl'));
$smarty->assign ("tests", perform_php_checks($faults));
+ $smarty->assign ("detailed_tests", perform_additional_function_checks($faults));
/* This var is true if anything went wrong */
if ($faults){
/* Show setup_page 2 */
function show_setup_page2($withoutput = true)
{
+ $faults = array();
$smarty = get_smarty();
$smarty->assign ("content", get_template_path('setup_step2.tpl'));
$smarty->assign ("tests", perform_additional_checks($faults));
function show_setup_page3($withoutput = true)
{
+ $ds = NULL;
$smarty = get_smarty();
/* Take the Post oder the Sessioin saved data */
{
$smarty= get_smarty();
+ // ?
if(!isset($_SESSION['ldapconf']['base'])){
$_SESSION['ldapconf']['base']= $base;
}
$arr_crypts= array();
$temp = "";
$checkvars = array("location", "admin", "password", "peopleou", "base",
- "peopledn", "arr_crypts", "mail", "uidbase");
+ "peopledn", "arr_crypts", "mail", "uidbase","errorlvl");
if(!isset($_SESSION['ldapconf']['arr_cryptkeys'])) {
require_once("class_password-methods.inc");
$_SESSION['ldapconf']['password']);
$_SESSION['classes']= $m;
+ if(!is_schema_readable($ldapconf['uri'],$ldapconf['admin'],$ldapconf['password'])){
+ if($withoutput){
+ print_red(_("Can't read schema informations, GOsa needs to know your schema setup. Please verify that it is readable for GOsa"));
+ }
+ $fault=true;
+ }
+
+
+
if ($ldap->error != "Success") {
if($withoutput) {
print_red(sprintf(_("Can't log into LDAP server. Reason was: %s."), $ldap->get_error()));
if($withoutput){
$smarty->display (get_template_path('setup.tpl'));
}
-
return (!$fault);
}
$info= posix_getgrgid(posix_getgid());
$smarty->assign("webgroup", $info['name']);
$smarty->assign("path", CONFIG_DIR);
- $message= "<table class=\"check\">";
+ $message= "<table summary=\"\" class=\"check\">";
$m= schema_check($ldapconf['uri'], $ldapconf['admin'], $ldapconf['password'],1);
if($withoutput) {
return(true);
} else {
- if(!($create_user)) {
+ if((!isset($create_user))||(!($create_user))) {
$smarty->assign ("content", get_template_path('setup_useradmin.tpl'));
$smarty->assign("exists",true);
} else {