diff --git a/contrib/bin/fusiondirectory-setup b/contrib/bin/fusiondirectory-setup index 291df4dfca7e6b35c93466553d6284c858b8a486..85b0bed458dc3d176ab6cfe37329789934f2b5e6 100644 --- a/contrib/bin/fusiondirectory-setup +++ b/contrib/bin/fusiondirectory-setup @@ -1485,8 +1485,19 @@ sub migrate_winstations $entry->replace('cn' => $cn); my $newrdn = "cn=".$cn; my $dn_old = $entry->dn(); - my $dn_new = $entry->dn(); - $dn_new =~ s/^[^,]+,[^,]+,[^,]+,/$newrdn,$workstationrdn,/; + $dn_old =~ m/^[^,]+,.*$systemrdn,(.+)$/ or die "Could not parse dn ".$dn_old."\n"; + my $entrybase = $1; + if (!branch_exists($ldap, "$workstationrdn,$entrybase")) { + if ($workstationrdn =~ m/^([^,]),([^,])$/) { + if (!branch_exists($ldap, "$2,$entrybase")) { + create_branch($ldap, $entrybase, $2); + } + create_branch($ldap, "$2,$entrybase", $1); + } else { + create_branch($ldap, $entrybase, $workstationrdn); + } + } + my $dn_new = "$newrdn,$workstationrdn,$entrybase"; $entry->dn($dn_new); my @replace = ('fdWorkstation'); my @classes = $entry->get_value('objectClass');