From 67c31d2e0d266e301b278949bd6c51765253429a Mon Sep 17 00:00:00 2001 From: hickert Date: Thu, 27 May 2010 15:06:08 +0000 Subject: [PATCH] Updated schema check git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@18777 594d385d-05f5-0310-b6e9-bd551577e9d8 --- gosa-core/setup/class_setup.inc | 2 +- gosa-core/setup/class_setupStep_Schema.inc | 175 +++++++++------------ gosa-core/setup/setup_schema.tpl | 66 +++----- 3 files changed, 95 insertions(+), 148 deletions(-) diff --git a/gosa-core/setup/class_setup.inc b/gosa-core/setup/class_setup.inc index 66068b142..6d0061d95 100644 --- a/gosa-core/setup/class_setup.inc +++ b/gosa-core/setup/class_setup.inc @@ -39,7 +39,7 @@ class setup $this->o_steps[$i++] = new Step_Checks(); $this->o_steps[$i++] = new Step_License(); $this->o_steps[$i++] = new Step_Ldap(); -# $this->o_steps[$i++] = new Step_Schema(); + $this->o_steps[$i++] = new Step_Schema(); $this->o_steps[$i++] = new Step_Migrate(); $this->o_steps[$i++] = new Step_Feedback(); $this->o_steps[$i++] = new Step_Finish(); diff --git a/gosa-core/setup/class_setupStep_Schema.inc b/gosa-core/setup/class_setupStep_Schema.inc index c4784593f..fc7fd84a9 100644 --- a/gosa-core/setup/class_setupStep_Schema.inc +++ b/gosa-core/setup/class_setupStep_Schema.inc @@ -22,111 +22,88 @@ class Step_Schema extends setup_step { - var $checked = array(); - var $not_checked = array(); - var $schema_readable = FALSE; - var $attributes = array("enable_schema_check","samba_version"); - var $enable_schema_check = TRUE; - var $samba_version = 3; - - var $found_ocs = 0; - - function Step_Schema() - { - $this->update_strings(); - } - - - function update_strings() - { - $this->s_title = _("LDAP schema check"); - $this->s_title_long = _("LDAP schema check"); - $this->s_info = _("Perform test on your current LDAP schema"); - } - - - function execute() - { - $this->check_schema(); - $failed_checks = 0 ; - foreach($this->checked as $val) { - if(!$val['STATUS']){ - $failed_checks ++; - } + var $checked = array(); + var $not_checked = array(); + var $b_displayCheckbutton = true; + + function Step_Schema() + { + $this->update_strings(); } - if($failed_checks == 0){ - $this->is_completed = TRUE; - }else{ - $this->is_completed = TRUE; + + function update_strings() + { + $this->s_title = _("LDAP schema check"); + $this->s_title_long = _("LDAP schema check"); + $this->s_info = _("Perform test on your current LDAP schema"); } + + + function execute() + { + // Establish ldap connection + $cv = $this->parent->captured_values; + $ldap_l = new LDAP($cv['admin'], + $cv['password'], + $cv['connection'], + FALSE, + $cv['tls']); + + // Detect Schema Info + $ldap = new ldapMultiplexer($ldap_l); + $ldap->cd($cv['base']); + $objectclasses = $ldap->get_objectclasses(); + + // Check if we can find something + $ldap->set_size_limit(1); + $res = $ldap->search("(objectClass=*)"); + $ldap->set_size_limit(0); - /* Check if the database is already initialised. - * If the root object is missing we can't read any schema informations. - * In this case we should display a message. - */ - $cv = $this->parent->captured_values; - - /* Establish ldap connection */ - $ldap_l = new LDAP($cv['admin'], - $cv['password'], - $cv['connection'], - FALSE, - $cv['tls']); - - $ldap = new ldapMultiplexer($ldap_l); - - /* Check if root object exists */ - $ldap->cd($cv['base']); - $ldap->set_size_limit(1); - $res = $ldap->search("(objectClass=*)"); - $ldap->set_size_limit(0); - - $smarty = get_smarty(); - $smarty->assign("bool",array(FALSE => _("No"), TRUE => _("Yes"))); - $smarty->assign("database_initialised", ($res == TRUE)); - $smarty->assign("found_ocs", $this->found_ocs); - $smarty->assign("schema_readable",$this->schema_readable); - $smarty->assign("enable_schema_check",$this->enable_schema_check); - $smarty->assign("checks",$this->checked); - $smarty->assign("not_checked",$this->not_checked); - $smarty->assign("failed_checks",$failed_checks); - return($smarty -> fetch (get_template_path("../setup/setup_schema.tpl"))); - } - - function save_object() - { - if(isset($_POST['step7_posted'])){ - - /* Get attributes */ - foreach($this->attributes as $attr){ - if(isset($_POST[$attr])){ - $this->$attr = validate($_POST[$attr]); + // Validate schema + $cR = new configRegistry(NULL);; + $cR->setObjectClasses($objectclasses); + $cR->_validateSchemata(TRUE,TRUE); + $info = $cR->getSchemaResults(); + $disabled = $cR->getDisabledPlugins(); + + // Check if the 'AT LEAST' required classes are available. + $smarty = get_smarty(); + $smarty->assign('message', ""); + $smarty->assign('database_initialised', ($res==TRUE)); + $smarty->assign('ocCount', count($objectclasses)); + + // We are fine here once we got object classes. + $this->is_completed = count($objectclasses); + + // Now check if the core requirements are fulfilled. + if(in_array('core', $disabled)){ + $message = ""; + $this->is_completed = FALSE; + $coreDefs = core::plInfo(); + $coreRequired = $coreDefs['plRequirements']['ldapSchema']; + $missing = $version = array(); + foreach($coreRequired as $oc => $requirement){ + if(isset($info['missing'][$oc])){ + $missing[$oc] = $info['missing'][$oc]; + } + if(isset($info['versionMismatch'][$oc])){ + $version[$oc] = $info['versionMismatch'][$oc]; + } + } + + $message .= "
"; + if(count($missing)){ + $message.= _("The following object classes are missing:").msgPool::buildList(array_values($missing)); + } + if(count($version)){ + $message.= _("The following object classes are outdated:").msgPool::buildList(array_values($version)); + } + $smarty->assign('message', $message); } - } - } - } - - function check_schema() - { - $cfg = $this->parent->captured_values; - - /* Get objectclasses */ - $ldap = new LDAP($cfg['admin'],$cfg['password'],$cfg['connection'] ,FALSE,$cfg['tls']); - $objectclasses = $ldap->get_objectclasses(TRUE); - $this->found_ocs = count($objectclasses); - $rfc2307bis = $cfg['rfc2307bis']; - $this->checked = check_schema($cfg,$rfc2307bis); - - /* Which samba version do we use? */ - if(isset($objectclasses['sambaSamAccount'])){ - $this->samba_version = 3; - } elseif(isset($objectclasses['sambaAccount'])) { - $this->samba_version = 2; - }else{ - $this->samba_version = 0; + $smarty->assign('checkFailed', !$this->is_completed); + return($smarty->fetch (get_template_path("../setup/setup_schema.tpl"))); } - } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: diff --git a/gosa-core/setup/setup_schema.tpl b/gosa-core/setup/setup_schema.tpl index 8a2f69952..b9fdbb7c6 100644 --- a/gosa-core/setup/setup_schema.tpl +++ b/gosa-core/setup/setup_schema.tpl @@ -1,52 +1,22 @@ -
-

- {t}Schema specific settings{/t} -

-
-
- {t}Enable schema validation when logging in{/t} -
-
- -
-
-

- {t}Check status{/t} -

-
- {if $failed_checks == 0} - {t}Schema check succeeded{/t} - {else} - - {t}Schema check failed{/t} +

{t}Schema specific settings{/t}

+{if !$checkFailed} + {t}Schema check succeeded{/t} +{else} + + {t}Schema check failed{/t} + + {if $ocCount == 0} +

+ {t}Could not read any schema informations, all checks skipped. Adjust your ldap acls.{/t} + {if !$database_initialised} + {t}It seems that your ldap database wasn't initialized yet. This maybe the reason, why GOsa can't read your schema configuration!{/t} + {/if} +

+ {else} + {$message} + {/if} +{/if} - {/if} -
-
- {if $found_ocs == 0} - {t}Could not read any schema informations, all checks skipped. Adjust your ldap acls.{/t} -
- {if !$database_initialised} -
- {t}It seems that your ldap database wasn't initialized yet. This maybe the reason, why GOsa can't read your schema configuration!{/t} - {/if} - {else} - {foreach from=$checks item=val key=key} - {if !$checks[$key].STATUS} -
- {if $checks[$key].IS_MUST_HAVE} - {$checks[$key].MSG} - {else} - {$checks[$key].MSG} - {/if} -
- {/if} - {/foreach} - {/if} -
-
-- 2.30.2