From 0f6eb4d6ac18f6906f7590058c1b1edfefb17353 Mon Sep 17 00:00:00 2001 From: hickert Date: Thu, 5 Feb 2009 16:14:47 +0000 Subject: [PATCH] Updated setup migrate step -Added migration point, which allows to add gosaDepartment to the ldap base object. git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@13386 594d385d-05f5-0310-b6e9-bd551577e9d8 --- gosa-core/setup/class_setupStep_Migrate.inc | 177 ++++++++++++++++++++ gosa-core/setup/setup_license.tpl | 2 +- gosa-core/setup/setup_migrate.tpl | 28 ++++ 3 files changed, 206 insertions(+), 1 deletion(-) diff --git a/gosa-core/setup/class_setupStep_Migrate.inc b/gosa-core/setup/class_setupStep_Migrate.inc index 2a37dfbf8..4db131241 100644 --- a/gosa-core/setup/class_setupStep_Migrate.inc +++ b/gosa-core/setup/class_setupStep_Migrate.inc @@ -113,6 +113,10 @@ class Step_Migrate extends setup_step var $acl_migrate_dialog = FALSE; var $migrate_acl_base_entry = ""; + /* Root object classes */ + var $rootOC_migrate_dialog = FALSE; + var $rootOC_details = array(); + function Step_Migrate() { $this->update_strings(); @@ -134,6 +138,12 @@ class Step_Migrate extends setup_step $this->checks['root']['ERROR_MSG'] = ""; $this->checkBase(); + $this->checks['rootOC']['TITLE'] = _("Checking object classes for root object"); + $this->checks['rootOC']['STATUS'] = FALSE; + $this->checks['rootOC']['STATUS_MSG']= ""; + $this->checks['rootOC']['ERROR_MSG'] = ""; + $this->checkBaseOC(); + $this->checks['permissions']['TITLE'] = _("Checking permissions on LDAP database"); $this->checks['permissions']['STATUS'] = FALSE; $this->checks['permissions']['STATUS_MSG']= ""; @@ -1508,6 +1518,34 @@ class Step_Migrate extends setup_step $this->initialize_checks(); } } + + /************* + * Root object class check + *************/ + + if(isset($_POST['root_add_objectclasses'])){ + $this->rootOC_migrate_dialog = TRUE; + $this->dialog = TRUE; + } + if(isset($_POST['rootOC_dialog_cancel'])){ + $this->rootOC_migrate_dialog = FALSE; + $this->dialog = FALSE; + } + if(isset($_POST['rootOC_migrate_start'])){ + if($this->checkBaseOC(FALSE)){ + $this->dialog = FALSE; + $this->rootOC_migrate_dialog = FALSE; + $this->checkBaseOC(); + } + } + + + if($this->rootOC_migrate_dialog){ + $smarty = get_smarty(); + $smarty->assign("details",$this->rootOC_details); + $smarty->assign("method","rootOC_migrate_dialog"); + return($smarty->fetch(get_template_path("setup_migrate.tpl",TRUE,dirname(__FILE__)))); + } /************* * Administrative Account -- Migrate/Create @@ -1969,6 +2007,145 @@ class Step_Migrate extends setup_step } + /* Check if the root object includes the required object classes, e.g. gosaDepartment is required for ACLs. + * If the parameter just_check is true, then just check for the OCs. + * If the Parameter is false, try to add the required object classes. + */ + function checkBaseOC($just_check = TRUE) + { + /* Establish ldap connection */ + $cv = $this->parent->captured_values; + $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->cat($cv['base']); + if(!$ldap->count()){ + $this->checks['rootOC']['STATUS'] = FALSE; + $this->checks['rootOC']['STATUS_MSG']= _("LDAP query failed"); + $this->checks['rootOC']['ERROR_MSG'] = _("Possibly the 'root object' is missing."); + return; + } + + $attrs = $ldap->fetch(); + + /* Root object doesn't exists + */ + if(!in_array("gosaDepartment",$attrs['objectClass'])){ + if($just_check){ + + $this->rootOC_details = array(); + $mods = array(); + + /* Get list of possible container objects, to be able to detect naming + * attributes and missing attribute types. + */ + if(!class_available("departmentManagement")){ + $this->checks['rootOC']['STATUS'] = FALSE; + $this->checks['rootOC']['STATUS_MSG']= _("Failed"); + $this->checks['rootOC']['ERROR_MSG'] = sprintf(_("Missing GOsa class %s."),"departmentManagement")." "._("Please check your installation."); + return; + } + + /* Try to detect base class type, e.g. is it a dcObject. + */ + $dep_types = departmentManagement::get_support_departments(); + $dep_type =""; + foreach($dep_types as $dep_name => $dep_class){ + if(in_array($dep_class['CLASS'], $attrs['objectClass'])){ + $dep_type = $dep_name; + break; + } + } + + /* If no known base class was detect, abort with message + */ + if(empty($dep_type)){ + $this->checks['rootOC']['STATUS'] = FALSE; + $this->checks['rootOC']['STATUS_MSG']= _("Failed"); + $this->checks['rootOC']['ERROR_MSG'] = + sprintf(_("Could not detect the object type of your root object, please try to add the objectClass '%s' manually."),"gosaDepartment"); + return; + } + + /* Create 'current' and 'target' object properties, to be able to display + * a set of modifications required to create a valid GOsa department. + */ + $str = "dn: ".$cv['base']."\n"; + for($i = 0 ; $i<$attrs['objectClass']['count'];$i++){ + $str .= "objectClass: ".$attrs['objectClass'][$i]."\n"; + } + $this->rootOC_details['current'] = $str; + + /* Create target infos + */ + $str = "dn: ".$cv['base']."\n"; + for($i = 0 ; $i<$attrs['objectClass']['count'];$i++){ + $str .= "objectClass: ".$attrs['objectClass'][$i]."\n"; + $mods['objectClass'][] = $attrs['objectClass'][$i]; + } + $mods['objectClass'][] = "gosaDepartment"; + $str .= "objectClass: gosaDepartment\n"; + + /* Append attribute 'ou', it is required by gosaDepartment + */ + if(!isset($attrs['ou'])){ + $val = "GOsa"; + if(isset($attrs[$dep_types[$dep_type]['ATTR']][0])){ + $val = $attrs[$dep_types[$dep_type]['ATTR']][0]; + } + $str .= "ou: ".$val."\n"; + $mods['ou'] =$val; + } + + /*Append description, it is required by gosaDepartment too. + */ + if(!isset($attrs['description'])){ + $val = "GOsa"; + if(isset($attrs[$dep_types[$dep_type]['ATTR']][0])){ + $val = $attrs[$dep_types[$dep_type]['ATTR']][0]; + } + $str .= "description: ".$val."\n"; + $mods['description'] = $val; + } + $this->rootOC_details['target'] = $str; + $this->rootOC_details['mods'] = $mods; + + $this->checks['rootOC']['STATUS'] = FALSE; + $this->checks['rootOC']['STATUS_MSG']= _("Failed"); + $this->checks['rootOC']['ERROR_MSG'] = " "; + + return(FALSE); + }else{ + + /* Add root object */ + $ldap->cd($cv['base']); + if(isset($this->rootOC_details['mods'])){ + $res = $ldap->modify($this->rootOC_details['mods']); + if(!$res){ + msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $source, LDAP_MOD, get_class())); + } + return($res); + }else{ + trigger_error("No modifications to make... "); + } + } + return(TRUE); + } + + /* Create & remove of dummy object was successful */ + $this->checks['rootOC']['STATUS'] = TRUE; + $this->checks['rootOC']['STATUS_MSG']= _("Ok"); + $this->checks['rootOC']['ERROR_MSG'] = ""; + } + + /* Return ldif information for a * given attribute array */ diff --git a/gosa-core/setup/setup_license.tpl b/gosa-core/setup/setup_license.tpl index 94ed66481..532257986 100644 --- a/gosa-core/setup/setup_license.tpl +++ b/gosa-core/setup/setup_license.tpl @@ -5,7 +5,7 @@
- {t}I have read the license and accept it{/t} +
diff --git a/gosa-core/setup/setup_migrate.tpl b/gosa-core/setup/setup_migrate.tpl index 24c4aa10f..82d642cd9 100644 --- a/gosa-core/setup/setup_migrate.tpl +++ b/gosa-core/setup/setup_migrate.tpl @@ -32,6 +32,34 @@
+ {elseif $method == "rootOC_migrate_dialog"} + +

{t}Add required object classes to the ldap base{/t}

+ + {t}Current{/t} +
+
+
{$details.current}
+
+
+
+ {t}After migration{/t} +
+
+
{$details.target}
+
+
+ +
+ +

+ + +

 

+
+ +
+ {elseif $method == "outside_winstations"}

{t}Move windows workstations into a valid windows workstation department{/t}

-- 2.30.2