Code

Updated system stuff
[gosa.git] / gosa-plugins / systems / admin / systems / class_termDNS.inc
index a1aa50bcdcf43ddc85ac28e378f78ec649e1ffeb..c3806820105ab012dc51e1928edf2d20c0de74eb 100644 (file)
@@ -79,7 +79,9 @@ class termDNS extends plugin
     $this->IPisMust       = $IPisMust;
     $this->namingAttr     = $namingAttr;
 
-    plugin::plugin ($config, $parent->dn);
+    plugin::plugin ($config, $parent->dn, $this->parent);
+  
+    $this->attrs = &$this->parent->attrs;
 
     if(isset($this->attrs[$namingAttr][0])){
       $this->OrigCn = preg_replace("/\\\$\$/","",$this->attrs[$namingAttr][0]);
@@ -154,9 +156,10 @@ class termDNS extends plugin
        */
       $this->dnsEntry     = DNS::getDNSHostEntries($config,$this->OrigCn);
 
+      $ptr = DNS::FlipIp($this->get_pTRRecord());
+
       /* Remove A record which equals $this->ipHostNumber
        */
-      $ptr = $this->get_pTRRecord();
       foreach($this->dnsEntry['RECORDS'] as $key => $rec){
         if(($rec['type'] == "aRecord") && ($rec['value'] == $this->ipHostNumber)){
           unset($this->dnsEntry['RECORDS'][$key]);
@@ -233,7 +236,7 @@ class termDNS extends plugin
 
   function netmaskIsCoherent($idZone) 
   {
-    $netmask = DNS::FlipIp(str_replace(".in-addr.arpa","",DNS::getNameFromMix($idZone)));
+    $netmask = DNS::FlipIp(str_replace(".in-addr.arpa.","",DNS::getNameFromMix($idZone)));
     if(!strstr($this->ipHostNumber, $netmask)){
       return false;
     }else{
@@ -256,7 +259,7 @@ class termDNS extends plugin
   {
          /* Call parent execute */
     $smarty= get_smarty();
-    $smarty->assign("autonetACL",$this->acl_is_writeable("macAddress").$this->acl_is_writeable("ipHostNumber"));
+    $smarty->assign("autonetACL",$this->acl_is_writeable("macAddress") && $this->acl_is_writeable("ipHostNumber")?"rw":"");
 
     $tmp = $this->plInfo();
     foreach($tmp['plProvidedAcls'] as $name => $translation){
@@ -324,7 +327,7 @@ class termDNS extends plugin
       $this->dialog->read_only     = !$this->acl_is_writeable("dhcpSetup");
       $this->dialog->dhcpHWAddress = "ethernet ".$this->macAddress; 
       if(!empty($this->ipHostNumber)){
-        $this->dialog->statements['fixed-address'] = $this->ipHostNumber
+        $this->dialog->statements->set('fixed-address', $this->ipHostNumber)
       }
     }
 
@@ -332,7 +335,7 @@ class termDNS extends plugin
       $this->dialog = FALSE; 
     }
 
-    if(isset($_POST['save_dhcp']) && $this->acl_is_writeable("dhcpSetup")){
+    if(isset($_POST['save_dhcp']) && $this->acl_is_writeable("dhcpSetup") && is_object($this->dialog)){
       $this->dialog->save_object();
       $msgs = $this->dialog->check(array());
       if(count($msgs)){
@@ -390,7 +393,7 @@ class termDNS extends plugin
       if(isset($_POST['propose_ip']) && $this->acl_is_writeable("ipHostNumber")){
         foreach($this->Zones as $key => $name){
           if($name == $this->dnsEntry['zoneName']){
-            $net = DNS::FlipIp(str_replace(".in-addr.arpa","",DNS::getNameFromMix($key)));
+            $net = DNS::FlipIp(str_replace(".in-addr.arpa.","",DNS::getNameFromMix($key)));
             $this->ipHostNumber = $this->generateRandomIP($net);
           }
         }
@@ -457,7 +460,7 @@ class termDNS extends plugin
       $smarty->assign("changeStateForRecords",$changeStateForRecords);
       $smarty->assign("staticAddress","<font class=\"must\">*</font>");
 
-      $smarty->assign("autonetACL",$this->acl_is_writeable("macAddress").$this->acl_is_writeable("ipHostNumber"));
+      $smarty->assign("autonetACL",$this->acl_is_writeable("macAddress") && $this->acl_is_writeable("ipHostNumber")?"rw":"");
 
       $display.= $smarty->fetch(get_template_path('network.tpl', TRUE));
     }
@@ -541,11 +544,15 @@ class termDNS extends plugin
         DNS posts
        ******/
 
-      /* Check if DNS should be enabled / disabled */
-      if($this->DNS_is_account && $this->acl_is_writeable("dnsSetup") && !isset($_POST['DNS_is_account'])){
-        $this->DNS_is_account = false;
-      }elseif(!$this->DNS_is_account && $this->acl_is_writeable("dnsSetup") && isset($_POST['DNS_is_account'])){
-        $this->DNS_is_account = true;
+      /* Check if DNS should be enabled / disabled 
+       *  -skip this, if the dns account is enforced.
+       */
+      if(!$this->hide_dns_check_box){
+        if($this->DNS_is_account && $this->acl_is_writeable("dnsSetup") && !isset($_POST['DNS_is_account'])){
+          $this->DNS_is_account = false;
+        }elseif(!$this->DNS_is_account && $this->acl_is_writeable("dnsSetup") && isset($_POST['DNS_is_account'])){
+          $this->DNS_is_account = true;
+        }
       }
 
       /* Get dns attributes */
@@ -715,7 +722,7 @@ class termDNS extends plugin
     }
 
     /* Do not add the objectClass ipHost if no ip address is given */
-    if(!$this->attrs['ipHostNumber']){
+    if(!isset($this->attrs['ipHostNumber'])){
       $this->attrs['objectClass'] = array_remove_entries(array("ipHost"),$this->attrs['objectClass']);
     }
 
@@ -736,7 +743,7 @@ class termDNS extends plugin
         $this->dialog->cn = $this->cn;
         $this->dialog->dhcpHWAddress = "ethernet ".$this->macAddress;
         if(!empty($this->ipHostNumber)){
-          $this->dialog->statements['fixed-address'] = $this->ipHostNumber;
+          $this->dialog->statements->set('fixed-address', $this->ipHostNumber);
         }
         $this->dialog->execute();
         $this->dialog->save_object(); 
@@ -744,6 +751,15 @@ class termDNS extends plugin
         if(count($this->dhcpHostEntry['dhcpOption']) == 0){
           $this->dhcpHostEntry['dhcpOption']= array("host-name ".$this->cn);
         }
+      }else{
+
+        // Updated Host-Name entry 
+        foreach($this->dhcpHostEntry['dhcpOption'] as $key => $entry){
+          if(preg_match("/^host-name/", $entry)){
+            $this->dhcpHostEntry['dhcpOption'][$key] = "host-name ".$this->cn;
+            break;
+          }
+        }
       }
 
       /* Write mac address to dhcp settings */
@@ -877,6 +893,10 @@ class termDNS extends plugin
         $this->dnsEntry['exists'] = $this->DNS_is_account;
         $tmp = DNS::getDNSHostEntriesDiff($this->config,$this->OrigCn,$this->dnsEntry,$this->cn);
       }   
+    
+      /* Update SOA record if needed
+       */
+      $this->updateSOARecord();
 
       /* move follwoing entries 
        */
@@ -1092,7 +1112,7 @@ class termDNS extends plugin
       $attrs = $ldap->fetch();
       $tmp = array_flip($this->Zones);
       $tmp = preg_replace("/^[^\/]*+\//","",$tmp[$this->dnsEntry['zoneName']]);
-      $tmp = trim(preg_replace("/\.in-addr.arpa$/","",$tmp));
+      $tmp = trim(preg_replace("/\.in-addr.arpa\.$/","",$tmp));
       $ptr = preg_replace("/^".preg_quote(DNS::FlipIp($tmp), '/')."\./","",$this->ipHostNumber);
       return($ptr);
     }else{
@@ -1117,9 +1137,11 @@ class termDNS extends plugin
       "(objectClass=gotoPrinter)".
       "(objectClass=ipHost)";
     $list = array();
-    $ldap->search("(&(|{$ocs})(ipHostNumber={$net}*))",array("ipHostNumber"));
+    $ldap->search("(&(|{$ocs})(ipHostNumber=*))",array("ipHostNumber"));
     while($attrs = $ldap->fetch()){
-      $list[] = $attrs['ipHostNumber'][0];
+      if (preg_match("/^$net\./", $attrs['ipHostNumber'][0])) {
+        $list[] = $attrs['ipHostNumber'][0];
+      }
     }
 
     // Set starting ip.
@@ -1177,6 +1199,15 @@ class termDNS extends plugin
       }
     }
   }
+
+  function updateSOARecord()
+  {
+    $oldEntries = DNS::getDNSHostEntries($this->config,$this->OrigCn);
+    $newEntries = $this->dnsEntry;
+    if(array_differs($newEntries['RECORDS'],$oldEntries['RECORDS'])){
+      DNS::touchDNSZone($this->config,$this->dnsEntry['zoneName']);
+    }
+  }
 }
 
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: