X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=setup%2Fclass_setupStep_Migrate.inc;h=15df31eddf43e832923c065455b1919790a598a7;hb=3d7277d3486cf118686905b914e21a35b9e5e737;hp=0852d27b1af75cf0e65bcf25fd6a14f6277a1c52;hpb=678fa991f776515a77c8254c400cd3a763c9987f;p=gosa.git diff --git a/setup/class_setupStep_Migrate.inc b/setup/class_setupStep_Migrate.inc index 0852d27b1..15df31edd 100644 --- a/setup/class_setupStep_Migrate.inc +++ b/setup/class_setupStep_Migrate.inc @@ -341,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; @@ -349,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; @@ -421,7 +442,7 @@ class Step_Migrate extends setup_step } while($attrs = $ldap->fetch()){ - $people_db_base = preg_replace("/^[^,]+,".normalizePreg($people_ou)."/","",$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 @@ -652,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")); @@ -895,7 +916,7 @@ class Step_Migrate extends setup_step } if($only_ldif){ - $this->acl_create_changes = _("Appending user to to group administrational group: \n"); + $this->acl_create_changes = _("Appending user to group administrational group:")." \n"; $this->acl_create_changes.= "\n"._("Before").":\n"; $this->acl_create_changes.= $fetched_attrs['dn']."\n"; $this->acl_create_changes.= $this->array_to_ldif($attrs_admin_group)."\n"; @@ -926,12 +947,12 @@ class Step_Migrate extends setup_step $new_group_attrs['memberUid'] = array($object_attrs['uid'][0]); if($only_ldif){ - $this->acl_create_changes = _("Creating new administrational group: \n\n"); + $this->acl_create_changes = _("Creating new administrational group:")." \n\n"; $this->acl_create_changes.= $new_group_dn."\n"; $this->acl_create_changes.= $this->array_to_ldif($new_group_attrs); }else{ $ldap->cd($cv['base']); - $ldap->create_missing_trees($cv['groupou'].",".$cv['base']); + $ldap->create_missing_trees($group_ou.$cv['base']); $ldap->cd($new_group_dn); $res = $ldap->add($new_group_attrs); if(!$res){ @@ -1146,7 +1167,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']){ @@ -1647,6 +1668,7 @@ class Step_Migrate extends setup_step { /* Get collected configuration settings */ $cv = $this->parent->captured_values; + $people_ou = trim($cv['peopleou']); /* Establish ldap connection */ $ldap = new LDAP($cv['admin'], @@ -1655,33 +1677,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; + + /***************** + * 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->cd($cv['base']); - $ldap->create_missing_trees(preg_replace("/^[^,]+,/","",$add_dn)); - $ldap->cd($add_dn); - $ldap->add($add); - } + /* 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{ - $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']); + /************ + * 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); } + function get_all_winstation_ous() { /* Get collected configuration settings */ @@ -1740,29 +1783,50 @@ class Step_Migrate extends setup_step $cv['connection'], 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);