X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=setup%2Fclass_setupStep_Migrate.inc;h=6e4d85f7ea6cc4c9f863bfd78c6efa872d269169;hb=a26e30f68ebeebd69d33547806568a2efb38b84b;hp=b7b33514fd7151c8d6ba05f7231eb24f23c74fa5;hpb=8d6913a85f6561e58706451d57d4afe315873808;p=gosa.git diff --git a/setup/class_setupStep_Migrate.inc b/setup/class_setupStep_Migrate.inc index b7b33514f..6e4d85f7e 100644 --- a/setup/class_setupStep_Migrate.inc +++ b/setup/class_setupStep_Migrate.inc @@ -67,7 +67,6 @@ class Step_Migrate extends setup_step /* Create Acl attributes */ var $acl_create_dialog = FALSE; - var $acl_create_type = "group"; var $acl_create_selected= ""; // Currently selected element, that should receive admin rights var $acl_create_changes = ""; // Contains ldif information about changes var $acl_create_confirmed= FALSE; @@ -342,6 +341,21 @@ class Step_Migrate extends setup_step $group_ou = $cv['groupou']; $ldap->cd($cv['base']); + + /*********** + * Get all gosaDepartments to be able to + * validate correct ldap tree position of every single user + ***********/ + $valid_deps = array(); + $valid_deps['/'] = $cv['base']; + $ldap->search("(&(objectClass=gosaDepartment)(ou=*))",array("dn","ou")); + while($attrs = $ldap->fetch()){ + $valid_deps[$attrs['ou'][0]] = $attrs['dn']; + } + + /*********** + * Get all groups + ***********/ $res = $ldap->search("(objectClass=posixGroup)",array("dn")); if(!$res){ $this->checks['outside_groups']['STATUS'] = FALSE; @@ -350,10 +364,16 @@ class Step_Migrate extends setup_step return(false); } - $this->outside_groups = array(); while($attrs = $ldap->fetch()){ - if((!preg_match("/^[^,]+,".normalizePreg($group_ou)."/",$attrs['dn'])) && !preg_match("/,dc=addressbook,/",$attrs['dn'])){ + $group_db_base = preg_replace("/^[^,]+,".normalizePreg($group_ou)."+,/i","",$attrs['dn']); + + /* Check if entry is not an addressbook only user + * and verify that he is in a valid department + */ + if( !preg_match("/".normalizePreg("dc=addressbook,")."/",$group_db_base) && + !in_array($group_db_base,$valid_deps) + ){ $attrs['selected'] = FALSE; $attrs['ldif'] = ""; $this->outside_groups[base64_encode($attrs['dn'])] = $attrs; @@ -363,7 +383,7 @@ class Step_Migrate extends setup_step if(count($this->outside_groups)){ $this->checks['outside_groups']['STATUS'] = FALSE; $this->checks['outside_groups']['STATUS_MSG']= ""._("Warning").""; - $this->checks['outside_groups']['ERROR_MSG'] = + $this->checks['outside_groups']['ERROR_MSG'] = sprintf(_("Found %s groups outside the configured tree '%s'."),count($this->outside_groups),$group_ou); $this->checks['outside_groups']['ERROR_MSG'].= " "; return(false); @@ -375,8 +395,7 @@ class Step_Migrate extends setup_step } } - - /* Search for users outside the people ou + /* Search for users outside the people ou */ function search_outside_users() { @@ -386,8 +405,24 @@ class Step_Migrate extends setup_step $cv['connection'], FALSE, $cv['tls']); - $people_ou = $cv['peopleou']; + $ldap->cd($cv['base']); + + + /*********** + * Get all gosaDepartments to be able to + * validate correct ldap tree position of every single user + ***********/ + $valid_deps = array(); + $valid_deps['/'] = $cv['base']; + $ldap->search("(&(objectClass=gosaDepartment)(ou=*))",array("dn","ou")); + while($attrs = $ldap->fetch()){ + $valid_deps[$attrs['ou'][0]] = $attrs['dn']; + } + + /*********** + * Search for all users + ***********/ $res = $ldap->search("(&(objectClass=gosaAccount)(!(uid=*$)))",array("dn")); if(!$res){ $this->checks['outside_users']['STATUS'] = FALSE; @@ -396,10 +431,24 @@ class Step_Migrate extends setup_step return(false); } - + /*********** + * Check if returned users are within a valid GOsa deparmtment. (peopleou,gosaDepartment,base) + ***********/ $this->outside_users = array(); + $people_ou = trim($cv['peopleou']); + if(!empty($people_ou)){ + $people_ou = $people_ou.","; + } + while($attrs = $ldap->fetch()){ - if((!preg_match("/^[^,]+,".normalizePreg($people_ou)."/",$attrs['dn']) && !preg_match("/,dc=addressbook,/",$attrs['dn']))){ + $people_db_base = preg_replace("/^[^,]+,".normalizePreg($people_ou)."/i","",$attrs['dn']); + + /* Check if entry is not an addressbook only user + * and verify that he is in a valid department + */ + if( !preg_match("/".normalizePreg("dc=addressbook,")."/",$people_db_base) && + !in_array($people_db_base,$valid_deps) + ){ $attrs['selected'] = FALSE; $attrs['ldif'] = ""; $this->outside_users[base64_encode($attrs['dn'])] = $attrs; @@ -409,7 +458,7 @@ class Step_Migrate extends setup_step if(count($this->outside_users)){ $this->checks['outside_users']['STATUS'] = FALSE; $this->checks['outside_users']['STATUS_MSG']= ""._("Warning").""; - $this->checks['outside_users']['ERROR_MSG'] = + $this->checks['outside_users']['ERROR_MSG'] = sprintf(_("Found %s user(s) outside the configured tree '%s'."),count($this->outside_users),$people_ou); $this->checks['outside_users']['ERROR_MSG'].= ""; return(false); @@ -463,7 +512,8 @@ class Step_Migrate extends setup_step $res = $ldap->add($testEntry); $ldap->cat($dn); if(!$ldap->count()){ - gosa_log($ldap->get_error()); + new log("view","setup/".get_class($this),$dn,array(),$ldap->get_error()); + $this->checks['permissions']['STATUS'] = FALSE; $this->checks['permissions']['STATUS_MSG']= _("Failed"); $this->checks['permissions']['ERROR_MSG'] = @@ -476,7 +526,7 @@ class Step_Migrate extends setup_step $res = $ldap->rmDir($dn); $ldap->cat($dn); if($ldap->count()){ - gosa_log($ldap->get_error()); + new log("view","setup/".get_class($this),$dn,array(),$ldap->get_error()); $this->checks['permissions']['STATUS'] = FALSE; $this->checks['permissions']['STATUS_MSG']= _("Failed"); $this->checks['permissions']['ERROR_MSG'] = @@ -623,12 +673,12 @@ class Step_Migrate extends setup_step $cv['tls']); /* Skip GOsa internal departments */ - $skip_dns = array("/^ou=people,/","/^ou=groups,/","/(,|)ou=configs,/","/(,|)ou=systems,/", - "/^ou=apps,/","/^ou=mime,/","/^ou=aclroles,/","/^ou=incoming,/", + $skip_dns = array("/".$cv['peopleou']."/","/".$cv['groupou']."/","/^ou=people,/","/^ou=groups,/", + "/(,|)ou=configs,/","/(,|)ou=systems,/", + "/(,|)ou=apps,/","/(,|)ou=mime,/","/^ou=aclroles,/","/^ou=incoming,/", "/ou=snapshots,/","/(,|)dc=addressbook,/","/^(,|)ou=machineaccounts,/", "/(,|)ou=winstations,/"); - /* Get all invisible departments */ $ldap->cd($cv['base']); $res = $ldap->search("(&(objectClass=organizationalUnit)(!(objectClass=gosaDepartment)))",array("ou","description","dn")); @@ -776,12 +826,12 @@ class Step_Migrate extends setup_step if(isset($ret['objectClass']) && in_array("posixGroup",$ret['objectClass'])){ $found = TRUE; - $username .= _("ACL-Group").": ".$ret['cn'][0]."
"; + $username .= "ACL-Group: ".$ret['cn'][0]."
"; }elseif(isset($ret['objectClass']) && in_array("gosaAccount",$ret['objectClass']) && in_array("organizationalPerson",$ret['objectClass']) && in_array("inetOrgPerson",$ret['objectClass'])){ $found = TRUE; - $username .= _("ACL").": ".$ret['uid'][0]."
"; + $username .= "ACL: ".$ret['uid'][0]."
"; } } }elseif($tmp[1] == "role"){ @@ -809,7 +859,7 @@ class Step_Migrate extends setup_step in_array("organizationalPerson",$ret['objectClass']) && in_array("inetOrgPerson",$ret['objectClass'])){ $found = TRUE; - $username .= _("ACL Role").": ".$ret['uid'][0]."
"; + $username .= "ACL Role: ".$ret['uid'][0]."
"; } } } @@ -824,7 +874,7 @@ class Step_Migrate extends setup_step if($found){ $this->checks['acls']['STATUS'] = TRUE; - $this->checks['acls']['STATUS_MSG']= _("Ok")." "; + $this->checks['acls']['STATUS_MSG']= _("Ok"); $this->checks['acls']['ERROR_MSG'] = ""; }else{ $this->checks['acls']['STATUS'] = FALSE; @@ -904,7 +954,11 @@ class Step_Migrate extends setup_step function create_admin_user() { $pw1 = $pw2 = ""; - + $uid = ""; + + if(isset($_POST['new_user_uid'])){ + $uid = $_POST['new_user_uid']; + } if(isset($_POST['new_user_password'])){ $pw1 = $_POST['new_user_password']; } @@ -917,6 +971,12 @@ class Step_Migrate extends setup_step return false; } + if(!is_uid($uid) || empty($uid)){ + print_red(_("Please specify a valid uid.")); + return false; + } + + /* Establish ldap connection */ $cv = $this->parent->captured_values; $ldap = new LDAP($cv['admin'], @@ -928,13 +988,18 @@ class Step_Migrate extends setup_step /* Get current base attributes */ $ldap->cd($cv['base']); + $people_ou = trim($cv['peopleou']); + if(!empty($people_ou)){ + $people_ou = trim($people_ou).","; + } + if($cv['peopledn'] == "cn"){ - $dn = "cn=System Administrator,".$cv['peopleou'].",".$cv['base']; + $dn = "cn=System Administrator,".$people_ou.$cv['base']; }else{ - $dn = "uid=admin,".$cv['peopleou'].",".$cv['base']; + $dn = "uid=".$uid.",".$people_ou.$cv['base']; } - $methods = @passwordMethod::get_available_methods_if_not_loaded(); + $methods = @passwordMethod::get_available_methods(); $p_m = $methods[$cv['encryption']]; $p_c = new $p_m(array()); $hash = $p_c->generate_hash($pw2); @@ -944,10 +1009,17 @@ class Step_Migrate extends setup_step $new_user['givenName'] = "System"; $new_user['sn'] = "Administrator"; $new_user['cn'] = "System Administrator"; - $new_user['uid'] = "admin"; + $new_user['uid'] = $uid; $new_user['userPassword'] = $hash; - + $ldap->cd($cv['base']); + + $ldap->cat($dn,array("dn")); + if($ldap->count()){ + print_red(sprintf(_("Could not add administrative user, there is already an object with the same dn '%s' in your ldap database."),$dn)); + return(FALSE); + } + $ldap->create_missing_trees(preg_replace("/^[^,]+,/","",$dn)); $ldap->cd($dn); $res = $ldap->add($new_user); @@ -1080,7 +1152,7 @@ class Step_Migrate extends setup_step print_red(_("Couldn't move users to specified department.")); return(false); } - + foreach($this->outside_users as $b_dn => $data){ $this->outside_users[$b_dn]['ldif'] =""; if($data['selected']){ @@ -1264,14 +1336,14 @@ class Step_Migrate extends setup_step $this->show_details = FALSE; } - if(isset($_POST['create_acls_create_confirmed'])){ - if($this->create_admin()){ - $this->acl_create_dialog = FALSE; - $this->dialog = FALSE; - $this->show_details = FALSE; - $this->initialize_checks(); - } - } +# if(isset($_POST['create_acls_create_confirmed'])){ +# if($this->create_admin()){ +# $this->acl_create_dialog = FALSE; +# $this->dialog = FALSE; +# $this->show_details = FALSE; +# $this->initialize_checks(); +# } +# } if(isset($_POST['create_acls_create'])){ $this->create_admin(TRUE); @@ -1286,13 +1358,15 @@ class Step_Migrate extends setup_step if($this->acl_create_dialog){ $smarty = get_smarty(); + + $uid = "admin"; + if(isset($_POST['new_user_uid'])){ + $uid = $_POST['new_user_uid']; + } + + $smarty->assign("new_user_uid",$uid); $smarty->assign("new_user_password",@$_POST['new_user_password']); $smarty->assign("new_user_password2",@$_POST['new_user_password2']); - $smarty->assign("users" ,$this->get_user_list()); - $smarty->assign("users_cnt" ,count($this->get_user_list())); - $smarty->assign("groups",$this->get_group_list()); - $smarty->assign("groups_cnt",count($this->get_group_list())); - $smarty->assign("type" ,$this->acl_create_type); $smarty->assign("method","create_acls"); $smarty->assign("acl_create_selected",$this->acl_create_selected); $smarty->assign("what_will_be_done_now",$this->acl_create_changes); @@ -1440,21 +1514,10 @@ class Step_Migrate extends setup_step /* Get "create acl" dialog posts */ if($this->acl_create_dialog){ - if(isset($_POST['create_acls_create'])){ - if(isset($_POST['create_acls_selected'])){ - $this->acl_create_selected = base64_decode($_POST['create_acls_selected']); - }else{ - $this->acl_create_selected = ""; - } - } if(isset($_POST['create_acls_create_abort'])){ $this->acl_create_selected = ""; } - - if(isset($_POST['acl_create_type'])){ - $this->acl_create_type = $_POST['acl_create_type']; - } } /* Get selected departments */ @@ -1586,10 +1649,11 @@ class Step_Migrate extends setup_step } - function get_all_people_ous() + function get_all_people_ous() { /* Get collected configuration settings */ $cv = $this->parent->captured_values; + $people_ou = trim($cv['peopleou']); /* Establish ldap connection */ $ldap = new LDAP($cv['admin'], @@ -1598,33 +1662,54 @@ class Step_Migrate extends setup_step FALSE, $cv['tls']); - $ldap->cd($cv['base']); - $ldap->search("(".$cv['peopleou'].")",array("dn")); - - if($ldap->count() == 0 ){ - $add_dn = $cv['peopleou'].",".$cv['base']; - $naming_attr = preg_replace("/=.*$/","",$add_dn); - $naming_value = preg_replace("/^[^=]*+=([^,]*).*$/","\\1",$add_dn); - $add = array(); - $add['objectClass'] = array("organizationalUnit"); - $add[$naming_attr] = $naming_value; - $ldap->cd($cv['base']); - $ldap->create_missing_trees(preg_replace("/^[^,]+,/","",$add_dn)); - $ldap->cd($add_dn); - $ldap->add($add); - } + /***************** + * If people ou is NOT empty + * search for for all objects matching the given container + *****************/ + if(!empty($people_ou)){ + $ldap->search("(".$people_ou.")",array("dn")); + + /* Create people ou if there is currently none */ + if($ldap->count() == 0 ){ + $add_dn = $cv['peopleou'].",".$cv['base']; + $naming_attr = preg_replace("/=.*$/","",$add_dn); + $naming_value = preg_replace("/^[^=]*+=([^,]*).*$/","\\1",$add_dn); + $add = array(); + $add['objectClass'] = array("organizationalUnit"); + $add[$naming_attr] = $naming_value; + $ldap->cd($cv['base']); + $ldap->create_missing_trees(preg_replace("/^[^,]+,/","",$add_dn)); + $ldap->cd($add_dn); + $ldap->add($add); + } - $ldap->search("(".$cv['peopleou'].")",array("dn")); - $tmp = array(); - while($attrs= $ldap->fetch()){ - if(!preg_match("/ou=snapshots,/",$attrs['dn'])){ - $tmp[base64_encode($attrs['dn'])] = $ldap->fix($attrs['dn']); + /* Create result */ + $ldap->search("(".$cv['peopleou'].")",array("dn")); + $tmp = array(); + while($attrs= $ldap->fetch()){ + if(!preg_match("/ou=snapshots,/",$attrs['dn'])){ + $tmp[base64_encode($attrs['dn'])] = $ldap->fix($attrs['dn']); + } + } + } else{ + + /************ + * If people ou is empty + * Get all valid gosaDepartments + ************/ + $ldap->cd($cv['base']); + $tmp = array(); + $ldap->search("(&(objectClass=gosaDepartment)(ou=*))",array("dn")); + $tmp[base64_encode($cv['base'])] = $ldap->fix($cv['base']); + while($attrs = $ldap->fetch()){ + $tmp[base64_encode($attrs['dn'])] = $ldap->fix($attrs['dn']);; } } - return($tmp); + return($tmp); } + function get_all_winstation_ous() { /* Get collected configuration settings */ @@ -1672,7 +1757,7 @@ class Step_Migrate extends setup_step } - function get_all_group_ous() + function get_all_group_ous() { /* Get collected configuration settings */ $cv = $this->parent->captured_values; @@ -1684,31 +1769,52 @@ class Step_Migrate extends setup_step FALSE, $cv['tls']); + $group_ou = trim($cv['groupou']); + if(!empty($group_ou)){ + $group_ou = trim($group_ou); + } + + /************ + * If group ou is NOT empty + * Get all valid group ous, create one if necessary + ************/ $ldap->cd($cv['base']); - $ldap->search("(".$cv['groupou'].")",array("dn")); - - if($ldap->count() == 0 ){ - $add_dn = $cv['groupou'].",".$cv['base']; - $naming_attr = preg_replace("/=.*$/","",$add_dn); - $naming_value = preg_replace("/^[^=]*+=([^,]*).*$/","\\1",$add_dn); - $add = array(); - $add['objectClass'] = array("organizationalUnit"); - $add[$naming_attr] = $naming_value; + if(!empty($group_ou)){ + $ldap->search("(".$group_ou.")",array("dn")); + if($ldap->count() == 0 ){ + $add_dn = $group_ou.$cv['base']; + $naming_attr = preg_replace("/=.*$/","",$add_dn); + $naming_value = preg_replace("/^[^=]*+=([^,]*).*$/","\\1",$add_dn); + $add = array(); + $add['objectClass'] = array("organizationalUnit"); + $add[$naming_attr] = $naming_value; + $ldap->cd($cv['base']); + $ldap->create_missing_trees(preg_replace("/^[^,]+,/","",$add_dn)); + $ldap->cd($add_dn); + $ldap->add($add); + } + $ldap->search("(".$group_ou.")",array("dn")); + $tmp = array(); + while($attrs= $ldap->fetch()){ + if(!preg_match("/ou=snapshots,/",$attrs['dn'])){ + $tmp[base64_encode($attrs['dn'])] = $ldap->fix($attrs['dn']); + } + } + }else{ + /************ + * If group ou is empty + * Get all valid gosaDepartments + ************/ $ldap->cd($cv['base']); - $ldap->create_missing_trees(preg_replace("/^[^,]+,/","",$add_dn)); - $ldap->cd($add_dn); - $ldap->add($add); - } - - $ldap->search("(".$cv['groupou'].")",array("dn")); - $tmp = array(); - while($attrs= $ldap->fetch()){ - if(!preg_match("/ou=snapshots,/",$attrs['dn'])){ - $tmp[base64_encode($attrs['dn'])] = $ldap->fix($attrs['dn']); + $tmp = array(); + $ldap->search("(&(objectClass=gosaDepartment)(ou=*))",array("dn")); + $tmp[base64_encode($cv['base'])] = $ldap->fix($cv['base']); + while($attrs = $ldap->fetch()){ + $tmp[base64_encode($attrs['dn'])] = $ldap->fix($attrs['dn']);; } } - return($tmp); + return($tmp); }