Code

Changed attribute name 'gosaLastSystemLogin' to 'gotoLastSystemLogin'.
[gosa.git] / include / functions_dns.inc
index 4754d822889330a454d624c3e329f075ebbe83da..9a62acf4c0a2c5da9720620c3c180febe2cb42e5 100644 (file)
@@ -67,7 +67,7 @@ function FlipIp($ip)
 function getDNSZoneEntries($config,$HostDn,$silent = false)
 {
   global $RecordTypes;
+
   $ldap = $config->get_ldap_link();
   $ldap->cd($config->current['BASE']); 
 
@@ -79,6 +79,10 @@ function getDNSZoneEntries($config,$HostDn,$silent = false)
    */
   $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();
@@ -105,21 +109,20 @@ function getDNSZoneEntries($config,$HostDn,$silent = false)
    */
   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
      */
@@ -173,8 +176,8 @@ function getDNSZoneEntries($config,$HostDn,$silent = false)
       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);
@@ -214,16 +217,16 @@ function getDNSZoneEntriesDiff($config,$newZones,$HostDn)
   /* 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;      
     }
 
@@ -236,9 +239,9 @@ function getDNSZoneEntriesDiff($config,$newZones,$HostDn)
 
     /* 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
      */ 
@@ -247,15 +250,16 @@ function getDNSZoneEntriesDiff($config,$newZones,$HostDn)
       $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;
       }
     }
@@ -273,6 +277,9 @@ function getDNSZoneEntriesDiff($config,$newZones,$HostDn)
     /* 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'];
     }
 
@@ -283,8 +290,8 @@ function getDNSZoneEntriesDiff($config,$newZones,$HostDn)
     /* 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'];
@@ -302,8 +309,8 @@ function getDNSZoneEntriesDiff($config,$newZones,$HostDn)
    *  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 
@@ -312,15 +319,17 @@ function getDNSZoneEntriesDiff($config,$newZones,$HostDn)
   $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);
 }
@@ -563,12 +572,16 @@ function getDNSHostEntriesDiff($config,$oldName,$newEntry,$newName)
      *  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