index 162caeca7123317ad71c30cb84cffa5fdef327b0..9a62acf4c0a2c5da9720620c3c180febe2cb42e5 100644 (file)
function getDNSZoneEntries($config,$HostDn,$silent = false)
{
global $RecordTypes;
-
+
$ldap = $config->get_ldap_link();
$ldap->cd($config->current['BASE']);
*/
$sOAREcords = array("0"=>"sOAprimary","1"=>"sOAmail","2"=>"sOAserial","3"=>"sOArefresh","4"=>"sOAretry","5"=>"sOAexpire","6"=>"sOAttl");
+ /* Get host entry */
+ $ldap->cat($HostDn);
+ $host_attr = $ldap->fetch();
+
/* Create tempalte for all fetched zone Data
*/
$ZoneBase = array();
*/
foreach($tmp_res as $attrs){
- $zoneName = $attrs['zoneName'][0];
+ $zoneName = strtoupper($host_attr['cn'][0])."/".$attrs['zoneName'][0];
$Zones[$zoneName] = $ZoneBase;
$Zones[$zoneName]['exists'] = true;
/* Set basic attributes
*/
- foreach(array("zoneName","dNSClass") as $attr){
- if(isset($attrs[$attr][0])){
- $Zones[$zoneName][$attr] = $attrs[$attr][0];
- }
+ if(isset($attrs["dNSClass"][0])){
+ $Zones[$zoneName]["dNSClass"] = $attrs["dNSClass"][0];
}
/* Set initial zone name, to be able to detect if this entry was renamed
*/
$Zones[$zoneName]['InitialzoneName'] = $zoneName;
+ $Zones[$zoneName]['zoneName'] = $zoneName;
/* Generate SOA entry
*/
unset($Zones[$zoneName]);
}else{
$tmp = $ldap->fetch();
- $Zones[$zoneName]['ReverseZone'] = FlipIp(str_replace(".in-addr.arpa","",$tmp['zoneName'][0]));
- $Zones[$zoneName]['InitialReverseZone'] = FlipIp(str_replace(".in-addr.arpa","",$tmp['zoneName'][0]));
+ $Zones[$zoneName]['ReverseZone'] = strtoupper($host_attr['cn'][0])."/".FlipIp(str_replace(".in-addr.arpa","",$tmp['zoneName'][0]));
+ $Zones[$zoneName]['InitialReverseZone'] = strtoupper($host_attr['cn'][0])."/".FlipIp(str_replace(".in-addr.arpa","",$tmp['zoneName'][0]));
}
}
return($Zones);
/* 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'])){
/* Move old zone to new position
*/
- $oldDn = "zoneName=".$zone['InitialzoneName'].",".$HostDn;
- $newDn = "zoneName=".$zone['zoneName'].",".$HostDn;
- $PrePareZoneEntries[$zone['InitialzoneName']] = $zone['zoneName'];
+ $oldDn = "zoneName=".getNameFromMix($zone['InitialzoneName']).",".$HostDn;
+ $newDn = "zoneName=".getNameFromMix($zone['zoneName']).",".$HostDn;
+ $PrePareZoneEntries[getNameFromMix($zone['InitialzoneName'])] = getNameFromMix($zone['zoneName']);
$move [$oldDn] = $newDn;
}
/* Create forward zone entry and put it in our add queue
*/
- $newDn = "zoneName=".$zone['zoneName'].",".$HostDn;
+ $newDn = "zoneName=".getNameFromMix($zone['zoneName']).",".$HostDn;
$obj = $zoneBase;
- $obj['zoneName'] = $zone['zoneName'];
+ $obj['zoneName'] = getNameFromMix($zone['zoneName']);
/* Create sOARecord & add it to the obj
*/
$soa.=" ".$zone[$attr];
}
$obj['sOARecord'] = trim($soa);
+ $obj['nSRecord'] = $zone['sOAprimary'];
/* If reverse zone was renamed, move entry
*/
if(!empty($zone['InitialReverseZone'])){
if($zone['InitialReverseZone'] != $zone['ReverseZone']){
- $base = "zoneName=".$zone['zoneName'].",".$HostDn;
- $oldRDn = "zoneName=". FlipIp($zone['InitialReverseZone']).".in-addr.arpa,".$base;
- $newRDn = "zoneName=". FlipIp($zone['ReverseZone']).".in-addr.arpa,".$base;
- $PrePareZoneEntries[FlipIp($zone['InitialReverseZone']).".in-addr.arpa"] = FlipIp($zone['ReverseZone']).".in-addr.arpa";
+ $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(getNameFromMix($zone['InitialReverseZone'])).".in-addr.arpa"] = FlipIp(getNameFromMix($zone['ReverseZone'])).".in-addr.arpa";
$move [$oldRDn] = $newRDn;
}
}
/* Add new Records
*/
foreach($zone['RECORDS'] as $rec){
+ if(!isset($obj[$rec['type']])||!is_array($obj[$rec['type']])){
+ $obj[$rec['type']] = array();
+ }
$obj[$rec['type']][] = $rec['value'];
}
/* Create Reverse Entry
* And append it to our add queue
*/
- $zone['ReverseZone'] = FlipIp($zone['ReverseZone']).".in-addr.arpa";
- $base = "zoneName=".$zone['zoneName'].",".$HostDn;
+ $zone['ReverseZone'] = FlipIp(getNameFromMix($zone['ReverseZone'])).".in-addr.arpa";
+ $base = "zoneName=".getNameFromMix($zone['zoneName']).",".$HostDn;
$newRDn = "zoneName=".$zone['ReverseZone'].",".$base;
$rObj = $obj;
$rObj['zoneName']= $zone['ReverseZone'];
* because they are no longer available in newZones anymore.
*/
foreach($oldZones as $zone) {
- $oldDn = "zoneName=".$zone['InitialzoneName'].",".$HostDn;
- $del[$oldDn] = "";
+ $oldDn = "zoneName=".getNameFromMix($zone['InitialzoneName']).",".$HostDn;
+ $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=".$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);
}
$zonesArr = array();
foreach($zones as $zoneMix){
$zoneIndex = split("/",$zoneMix);
- if(!array_key_exists($zoneIndex[0],$zonesArr)) $zonesArr[$zoneIndex[0]] = array();
+ if(!array_key_exists($zoneIndex[0],$zonesArr)) {
+ $zonesArr[$zoneIndex[0]] = array();
+ }
array_push($zonesArr[$zoneIndex[0]],$zoneIndex[1]);
}
$zoneDn = getDNSZoneDN($config,$zoneMix);
$ldap->ls("(&(objectClass=dNSZone)(zoneName=*)(relativeDomainName=".$name.")(!(relativeDomainName=@)))", $zoneDn,$attrs = array("*"));
while($attrs = $ldap->fetch()){
- $foundInTmp [] = $attrs['dn'];
- $foundIn [] = $attrs['dn'];
+ $foundInTmp [$zoneMix] = $attrs['dn'];
+ $foundIn [$zoneMix] = $attrs['dn'];
}
}
}
/* Get host informations from zone
*/
- $ldap->cd($foundIn[0]);
+ $id_tmp = key($foundIn);
+ $ldap->cd($foundIn[$id_tmp]);
$ldap->search("(&(objectClass=dNSZone)(zoneName=*)(!(relativeDomainName=@)))",array("*"));
while($attrs = $ldap->fetch()){
*/
if($attrs['relativeDomainName'][0] == $name){
$ret['exists'] = true;
- foreach(array("dNSClass","zoneName","dNSTTL") as $atr){
+ $ret['zoneName'] = $id_tmp;
+ foreach(array("dNSClass","dNSTTL") as $atr){
if(isset($attrs[$atr][0])){
$ret[$atr] = $attrs[$atr][0];
}
/* Check if zoneName has changed
*/
if(count($newEntry['RECORDS'])){
- if($oldEntry['zoneName'] != $zoneName){
+ if($oldEntry['zoneName'] != $newEntry['zoneName']){
$oldzoneDn = getDNSZoneDN($config,$oldEntry['zoneName']);
$dn = "relativeDomainName=".$oldName.",".$oldzoneDn;
$dn2= "relativeDomainName=".$oldName.",".$zoneDn;
* 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'] = $newName.".".$zoneName.".";
- $ptrObj['relativeDomainName'] = $rec['value'];
+ if(!preg_match("/\.$/",$newName)){
+ $ptrObj['pTRRecord'] = preg_replace("/\.\.$/",".",$newName.".".$zoneName.".");
+ }else{
+ $ptrObj['pTRRecord'] = preg_replace("/\.\.$/",".",$newName.".");
+ }
+ $ptrObj['relativeDomainName'] = FlipIP($rec['value']);
$add[$PTRdn] = $ptrObj;
}else
/* returns the dn for a specified zone
*/
-function getDNSZoneDN($config,$zoneNameMix){
+function getDNSZoneDN($config,$zoneNameMix)
+{
$ret = "";
- if(!strstr($zoneNameMix, '/')) return($ret);
+ if(!strstr($zoneNameMix, '/')) {
+ print_red(sprintf(_("Undefined zone name '%s'. Zone name must look like this 'server/zone.com'."),$zoneNameMix));
+ return($ret);
+ }
+
$zoneNameIndex = split("/",$zoneNameMix);
$zoneName = $zoneNameIndex[1];
$nameServer = strtolower($zoneNameIndex[0]);
- $ldap = $config->get_ldap_link();
+ $ldap = $config->get_ldap_link();
/* search for the nameserver */
$ldap-> cd($config->current['BASE']);
$ldap->search("(&(objectClass=goServer)(cn=".$nameServer."))",array("cn"));
if($ldap->count()){
$attr = $ldap->fetch();
- } else return($ret);
+ } else {
+ return($ret);
+ }
$ldap-> cd($attr['dn']);
$ldap->search("(&(objectClass=dNSZone)(sOARecord=*)(zoneName=".$zoneName."))",array("zoneName"));