index 694961da0417528752ca5b56b763310db4ece9b4..d300589d76d39bd34866e486fc7f1fe35c9e0c70 100644 (file)
/* Walk through all zones and detect renamed/added/deleted zones ...
*/
foreach($newZones as $name => $zone){
-
+
/* This zone was renamed
*/
if((!empty($zone['InitialzoneName'])) && ($zone['InitialzoneName'] != $zone['zoneName'])){
*/
$oldDn = "zoneName=".getNameFromMix($zone['InitialzoneName']).",".$HostDn;
$newDn = "zoneName=".getNameFromMix($zone['zoneName']).",".$HostDn;
- $PrePareZoneEntries[$zone['InitialzoneName']] = getNameFromMix($zone['zoneName']);
+ $PrePareZoneEntries[getNameFromMix($zone['InitialzoneName'])] = getNameFromMix($zone['zoneName']);
$move [$oldDn] = $newDn;
}
$base = "zoneName=".getNameFromMix($zone['zoneName']).",".$HostDn;
$oldRDn = "zoneName=". FlipIp(getNameFromMix($zone['InitialReverseZone'])).".in-addr.arpa,".$base;
$newRDn = "zoneName=". FlipIp(getNameFromMix($zone['ReverseZone'])).".in-addr.arpa,".$base;
- $PrePareZoneEntries[FlipIp($zone['InitialReverseZone']).".in-addr.arpa"] = FlipIp($zone['ReverseZone']).".in-addr.arpa";
+ $PrePareZoneEntries[FlipIp(getNameFromMix($zone['InitialReverseZone'])).".in-addr.arpa"] = FlipIp(getNameFromMix($zone['ReverseZone'])).".in-addr.arpa";
$move [$oldRDn] = $newRDn;
}
}
*/
foreach($oldZones as $zone) {
$oldDn = "zoneName=".getNameFromMix($zone['InitialzoneName']).",".$HostDn;
- $del[$oldDn] = "";
+ $del[$oldDn] = $zone;
}
/* Check for entries which must be updated
$udpate = array();
if(count($PrePareZoneEntries)){
$ldap = $config->get_ldap_link();
+
foreach($PrePareZoneEntries as $FromZoneName => $ToZoneName){
$ldap->cd($HostDn);
- $ldap->search("(&(objectClass=dNSZone)(zoneName=".getNameFromMix($FromZoneName).")(!(relativeDomainName=@)))",array("zoneName"));
+ $ldap->search("(&(objectClass=dNSZone)(zoneName=".$FromZoneName.")(!(relativeDomainName=@)))",array("zoneName"));
while($attrs = $ldap->fetch()){
- $zoneUpdates[$attrs['dn']] = array("zoneName"=>$ToZoneName);
+ $attr_to_change = array();
+ $attr_to_change['zoneName'] = $ToZoneName;
+ $zoneUpdates[$attrs['dn']] = $attr_to_change;
}
}
}
-
$ret = array("del" => $del , "move" => $move , "add" => $add,"zoneUpdates"=>$zoneUpdates);
return($ret);
}
foreach($zonesArr as $nameServer => $nameServerArr){
$foundInTmp = array();
foreach($nameServerArr as $zoneArr => $zone){
+
+ /* Strip eventually domain part from hostname
+ */
+ $zN = trim($zone,".");
+ $nN = trim($name,".");
+ if(preg_match("/".normalizePreg($zN)."$/",$nN)){
+ $nN = preg_replace("/[\.]*".normalizePreg($zN)."[\.]*$/","",$nN);
+ }else{
+ $nN = $name;
+ }
+
$zoneMix = $nameServer."/".$zone;
$zoneDn = getDNSZoneDN($config,$zoneMix);
- $ldap->ls("(&(objectClass=dNSZone)(zoneName=*)(relativeDomainName=".$name.")(!(relativeDomainName=@)))", $zoneDn,$attrs = array("*"));
+ $ldap->ls("(&(objectClass=dNSZone)(zoneName=*)(relativeDomainName=".$nN.")(!(relativeDomainName=@)))", $zoneDn,$attrs = array("*"));
while($attrs = $ldap->fetch()){
$foundInTmp [$zoneMix] = $attrs['dn'];
$foundIn [$zoneMix] = $attrs['dn'];
$ldap->search("(&(objectClass=dNSZone)(zoneName=*)(!(relativeDomainName=@)))",array("*"));
while($attrs = $ldap->fetch()){
- /* If relative domainname == cn
- * Try to read dnsclass / TTl / zone
+ /* Strip eventually domain part from hostname
+ */
+ $zN = trim($attrs['zoneName'][0],".");
+ $nN = trim($name,".");
+ $testname = $attrs['relativeDomainName'][0].".".$zN;
+
+ /* Check given host name with zone settings
*/
- if($attrs['relativeDomainName'][0] == $name){
+ if(preg_match("/".normalizePreg($testname)."[\.]*$/",$nN) || $attrs['relativeDomainName'][0] == $name){
$ret['exists'] = true;
$ret['zoneName'] = $id_tmp;
foreach(array("dNSClass","dNSTTL") as $atr){
$zoneDn = getDNSZoneDN($config,$zoneNameMix);
$tmp = array_flip($zones);
$zoneName = getNameFromMix($zoneNameMix);
+
+ /* Strip domain part out of dns host entry
+ */
+ $zN = trim($zoneName,".");
+ $nN = trim($newName,".");
+ $oN = trim($oldName,".");
+ $newName = preg_replace("/[\.]*".normalizePreg($zN)."$/i","",$nN);
+ $oldName = preg_replace("/[\.]*".normalizePreg($zN)."$/i","",$oN);
/* If reverseZone can't be resolved ... this
* can't be a valid entry, so remove this account
* like pTRRecord or CNAMERecord
*/
if($rec['type'] == "pTRRecord"){
- $PTRdn= "relativeDomainName=".$rec['value'].",".$baseDn;
+ $PTRdn= "relativeDomainName=".FlipIP($rec['value']).",".$baseDn;
$ptrObj = $baseObj;
$reverseName = getNameFromMix($reverseNameMix);
$ptrObj['zoneName'] = $reverseName;
$ptrObj['pTRRecord'] = preg_replace("/\.\.$/",".",$newName.".".$zoneName.".");
}else{
$ptrObj['pTRRecord'] = preg_replace("/\.\.$/",".",$newName.".");
- .}
- $ptrObj['relativeDomainName'] = $rec['value'];
+ }
+ $ptrObj['relativeDomainName'] = FlipIP($rec['value']);
$add[$PTRdn] = $ptrObj;
}else