From f8730b372dcbce47bcf83f78550f4cf0522e876d Mon Sep 17 00:00:00 2001 From: hickert Date: Mon, 26 Jul 2010 15:46:42 +0000 Subject: [PATCH] Updated several service dialogs, fixed typos, string, html, post handling and more. git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@19123 594d385d-05f5-0310-b6e9-bd551577e9d8 --- .../systems/services/dns/class_servDNS.inc | 998 +++++++++--------- 1 file changed, 499 insertions(+), 499 deletions(-) diff --git a/gosa-plugins/dns/admin/systems/services/dns/class_servDNS.inc b/gosa-plugins/dns/admin/systems/services/dns/class_servDNS.inc index 43f871527..1988cd72e 100644 --- a/gosa-plugins/dns/admin/systems/services/dns/class_servDNS.inc +++ b/gosa-plugins/dns/admin/systems/services/dns/class_servDNS.inc @@ -2,571 +2,571 @@ class servdns extends goService { - /* attribute list for save action */ - var $ignore_account = FALSE; - var $attributes = array(); - var $objectclasses = array("whatever"); + /* attribute list for save action */ + var $ignore_account = FALSE; + var $attributes = array(); + var $objectclasses = array("whatever"); - var $RecordTypes = array(); - var $Zones = array(); + var $RecordTypes = array(); + var $Zones = array(); - var $orig_dn = ""; + var $orig_dn = ""; - var $initially_was_account; - - /* ServerService tab vars */ - var $conflicts = array("servdns"); - var $DisplayName = ""; - var $StatusFlag = ""; - var $view_logged = FALSE; + var $initially_was_account; - var $dns_server_list = array("ENTRIES"=> array(),"FOR_LIST"=> array()); - var $take_over_id = -1; + /* ServerService tab vars */ + var $conflicts = array("servdns"); + var $DisplayName = ""; + var $StatusFlag = ""; + var $view_logged = FALSE; + var $dns_server_list = array("ENTRIES"=> array(),"FOR_LIST"=> array()); + var $take_over_id = -1; - function servdns (&$config, $dn= NULL, $parent= NULL) - { - plugin::plugin ($config, $dn, $parent); - $this->DisplayName = _("DNS service"); + function servdns (&$config, $dn= NULL, $parent= NULL) + { + plugin::plugin ($config, $dn, $parent); - $this->orig_dn = $dn; + $this->DisplayName = _("DNS service"); - /* Get record types for zones - */ - $this->RecordTypes = DNS::getDnsRecordTypes(true); + $this->orig_dn = $dn; - /* Get all zone Informations - */ - $this->Zones = DNS::getDNSZoneEntries($config,$dn); - - /* If there is at least one entry in this -> types, we have DNS enabled - */ - if(count($this->Zones) == 0){ - $this->is_account = false; - $this->dns_server_list = $this->get_list_of_dns_servers(); - }else{ - $this->is_account = true; - } - $this->initially_was_account = $this->is_account; - - // Prepare lists - $this->zoneList = new sortableListing(); - $this->zoneList->setDeleteable(true); - $this->zoneList->setEditable(true); - $this->zoneList->setWidth("100%"); - $this->zoneList->setHeight("300px"); - $this->zoneList->setHeader(array(_("Zone"),_("Reverse zone"),_("TTL"),_("Class"))); - $this->zoneList->setColspecs(array('*','*','*','*','40px')); - $this->zoneList->setDefaultSortColumn(0); - } - - - function get_list_of_dns_servers() - { - $ret = array("ENTRIES"=> array(),"FOR_LIST"=> array()); - $ldap = $this->config->get_ldap_link(); - $ldap->cd($this->config->current['BASE']); - $ldap->search("(&(objectClass=dNSZone)(zoneName=*))",array("dn","zoneName")); - $dns = array(); - while($attrs = $ldap->fetch()){ - /* Skip own config */ - if($this->dn != "new" && preg_match("/".preg_quote($this->dn, '/')."$/",$attrs['dn'])){ - continue; - } - $dn = preg_replace("/^zoneName=[^,]+,/","",$attrs['dn']); - if(preg_match("/^cn=/",$dn) && !in_array($dn,$dns)){ - $dns[] = $dn; - } - } - $i = 0; - foreach($dns as $dn){ - $ldap->cat($dn,array('*')); - if($ldap->count()){ - $i ++; - $attrs = $ldap->fetch(); - $ret['ENTRIES'][$i] = $attrs; - $ret['FOR_LIST'][$i] = $attrs['cn'][0]; - } + /* Get record types for zones + */ + $this->RecordTypes = DNS::getDnsRecordTypes(true); + + /* Get all zone Informations + */ + $this->Zones = DNS::getDNSZoneEntries($config,$dn); + + /* If there is at least one entry in this -> types, we have DNS enabled + */ + if(count($this->Zones) == 0){ + $this->is_account = false; + $this->dns_server_list = $this->get_list_of_dns_servers(); + }else{ + $this->is_account = true; + } + $this->initially_was_account = $this->is_account; + + // Prepare lists + $this->zoneList = new sortableListing(); + $this->zoneList->setDeleteable(true); + $this->zoneList->setEditable(true); + $this->zoneList->setWidth("100%"); + $this->zoneList->setHeight("300px"); + $this->zoneList->setHeader(array(_("Zone"),_("Reverse zone"),_("TTL"),_("Class"))); + $this->zoneList->setColspecs(array('*','*','*','*','40px')); + $this->zoneList->setDefaultSortColumn(0); } - return($ret); - } - - - function get_dns_info_string($id) - { - $ret=""; - $ldap = $this->config->get_ldap_link(); - $ldap->cd($this->dns_server_list['ENTRIES'][$id]['dn']); - $ldap->search("(|(zoneName=*)(relativeDomainName=*))",array("dn")); - while($attrs = $ldap->fetch()){ - $ret .= $attrs['dn']."\n"; + + + function get_list_of_dns_servers() + { + $ret = array("ENTRIES"=> array(),"FOR_LIST"=> array()); + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=dNSZone)(zoneName=*))",array("dn","zoneName")); + $dns = array(); + while($attrs = $ldap->fetch()){ + /* Skip own config */ + if($this->dn != "new" && preg_match("/".preg_quote($this->dn, '/')."$/",$attrs['dn'])){ + continue; + } + $dn = preg_replace("/^zoneName=[^,]+,/","",$attrs['dn']); + if(preg_match("/^cn=/",$dn) && !in_array($dn,$dns)){ + $dns[] = $dn; + } + } + $i = 0; + foreach($dns as $dn){ + $ldap->cat($dn,array('*')); + if($ldap->count()){ + $i ++; + $attrs = $ldap->fetch(); + $ret['ENTRIES'][$i] = $attrs; + $ret['FOR_LIST'][$i] = $attrs['cn'][0]; + } + } + return($ret); + } + + + function get_dns_info_string($id) + { + $ret=""; + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->dns_server_list['ENTRIES'][$id]['dn']); + $ldap->search("(|(zoneName=*)(relativeDomainName=*))",array("dn")); + while($attrs = $ldap->fetch()){ + $ret .= $attrs['dn']."\n"; + } + return($ret); } - return($ret); - } - function execute() - { - /* Call parent execute - */ - plugin::execute(); + function execute() + { + /* Call parent execute + */ + plugin::execute(); - if($this->is_account && !$this->view_logged){ - $this->view_logged = TRUE; - new log("view","server/".get_class($this),$this->dn); - } + if($this->is_account && !$this->view_logged){ + $this->view_logged = TRUE; + new log("view","server/".get_class($this),$this->dn); + } - /* Fill templating stuff - */ - $smarty= get_smarty(); - $smarty->assign("dns_take_over",FALSE); - $smarty->assign("is_createable",$this->acl_is_createable()); - $display= ""; - - - $this->initially_was_account= $this->is_account; - /*****************/ - /* Handle Take Over Actions - /*****************/ - - /* Give smarty the required informations */ - $smarty->assign("dns_server_list", $this->dns_server_list['FOR_LIST']); - $smarty->assign("dns_server_list_cnt", count($this->dns_server_list['FOR_LIST'])); - - /* Take over requested, save id */ - if(isset($_POST['take_over_src']) && isset($_POST['take_over'])){ - $id = $_POST['take_over_src']; - if(isset($this->dns_server_list['ENTRIES'][$id])){ - $this->take_over_id = $id; - } - } + /* Fill templating stuff + */ + $smarty= get_smarty(); + $smarty->assign("dns_take_over",FALSE); + $smarty->assign("is_createable",$this->acl_is_createable()); + $display= ""; + + + $this->initially_was_account= $this->is_account; + /*****************/ + /* Handle Take Over Actions + /*****************/ + + /* Give smarty the required informations */ + $smarty->assign("dns_server_list", $this->dns_server_list['FOR_LIST']); + $smarty->assign("dns_server_list_cnt", count($this->dns_server_list['FOR_LIST'])); + + /* Take over requested, save id */ + if(isset($_POST['take_over_src']) && isset($_POST['take_over'])){ + $id = get_post('take_over_src'); + if(isset($this->dns_server_list['ENTRIES'][$id])){ + $this->take_over_id = $id; + } + } - /* Abort take over action */ - if(isset($_POST['cancel_take_over'])){ - $this->dialog =false; - $this->take_over_id = -1; - $this->dns_server_list = $this->get_list_of_dns_servers(); - } + /* Abort take over action */ + if(isset($_POST['cancel_take_over'])){ + $this->dialog =false; + $this->take_over_id = -1; + $this->dns_server_list = $this->get_list_of_dns_servers(); + } - /* Display informartion about take over that will be started when saving this server - * and hide default dns output - */ - if($this->take_over_id != -1){ - $this->dialog = FALSE; - $id = $this->take_over_id; - $info = $this->get_dns_info_string($id); - $smarty->assign("dns_take_over",TRUE); - $smarty->assign("info",$info); - $warning = sprintf(_("You are going to migrate the DNS setup from server '%s'."),$this->dns_server_list['ENTRIES'][$id]['cn'][0]); - $warning2 = _("The migration will be started when you save this system. To cancel this action, use the cancel button below."); - $smarty->assign("warning",$warning); - $smarty->assign("warning2",$warning2); - return($smarty->fetch(get_template_path('servdns.tpl', TRUE, dirname(__FILE__)))); - } + /* Display informartion about take over that will be started when saving this server + * and hide default dns output + */ + if($this->take_over_id != -1){ + $this->dialog = FALSE; + $id = $this->take_over_id; + $info = $this->get_dns_info_string($id); + $smarty->assign("dns_take_over",TRUE); + $smarty->assign("info",$info); + $warning = sprintf(_("You are going to migrate the DNS setup from server '%s'."),$this->dns_server_list['ENTRIES'][$id]['cn'][0]); + $warning2 = _("The migration will be started when you save this system. To cancel this action, use the cancel button below."); + $smarty->assign("warning",$warning); + $smarty->assign("warning2",$warning2); + return($smarty->fetch(get_template_path('servdns.tpl', TRUE, dirname(__FILE__)))); + } - /* Do we need to flip is_account state? - */ - if (isset($_POST['modify_state'])){ - $this->is_account= !$this->is_account; - } + /* Do we need to flip is_account state? + */ + if (isset($_POST['modify_state'])){ + $this->is_account= !$this->is_account; + } - /* Edited or Added zone - */ - if(isset($_POST['SaveZoneChanges'])){ - $this->dialog->save_object(); + /* Edited or Added zone + */ + if(isset($_POST['SaveZoneChanges'])){ + $this->dialog->save_object(); + + /* Check for errors + */ + if(count($this->dialog->check())){ + foreach($this->dialog->check() as $msgs){ + msg_dialog::display(_("Error"), $msgs, ERROR_DIALOG); + } + }else{ + /* add new/edited zone + */ + $ret = $this->dialog->save(); + if(!$this->dialog->isNew){ + unset($this->Zones[$this->dialog->OldZoneName]); + } + $this->Zones[$ret['zoneName']] = $ret; + $this->dialog = FALSE; + } + } - /* Check for errors - */ - if(count($this->dialog->check())){ - foreach($this->dialog->check() as $msgs){ - msg_dialog::display(_("Error"), $msgs, ERROR_DIALOG); + /* Cancel zone edit / new + */ + if(isset($_POST['CancelZoneChanges'])){ + $this->dialog = FALSE; } - }else{ - /* add new/edited zone + + /* Add empty new zone */ - $ret = $this->dialog->save(); - if(!$this->dialog->isNew){ - unset($this->Zones[$this->dialog->OldZoneName]); + if(isset($_POST['AddZone'])){ + $this->dialog = new servdnseditZone($this->config,$this->dn); + if($this->is_new){ + $this->dialog->acl_base = $this->acl_base; + $this->dialog->acl_category = $this->acl_category; + } } - $this->Zones[$ret['zoneName']] = $ret; - $this->dialog = FALSE; - } - } - /* Cancel zone edit / new - */ - if(isset($_POST['CancelZoneChanges'])){ - $this->dialog = FALSE; - } + /* Check for edit zone request + */ + $this->zoneList->save_object(); + $action = $this->zoneList->getAction(); + if($action['action'] == 'delete'){ + $id = $this->zoneList->getKey($action['targets'][0]); + $this->RemoveZone($id); + } + if($action['action'] == 'edit'){ + $id = $this->zoneList->getKey($action['targets'][0]); + $this->dialog= new servdnseditZone($this->config,$this->dn,$this->Zones[$id]); + $this->dialog->acl_base = $this->acl_base; + $this->dialog->acl_category = $this->acl_category; + } - /* Add empty new zone - */ - if(isset($_POST['AddZone'])){ - $this->dialog = new servdnseditZone($this->config,$this->dn); - if($this->is_new){ - $this->dialog->acl_base = $this->acl_base; - $this->dialog->acl_category = $this->acl_category; - } - } - - /* Check for edit zone request - */ - $this->zoneList->save_object(); - $action = $this->zoneList->getAction(); - if($action['action'] == 'delete'){ - $id = $this->zoneList->getKey($action['targets'][0]); - $this->RemoveZone($id); - } - if($action['action'] == 'edit'){ - $id = $this->zoneList->getKey($action['targets'][0]); - $this->dialog= new servdnseditZone($this->config,$this->dn,$this->Zones[$id]); - $this->dialog->acl_base = $this->acl_base; - $this->dialog->acl_category = $this->acl_category; - } + /* Show dialog + */ + if(is_object($this->dialog)){ + $this->dialog->save_object(); + $this->dialog->parent = $this; + return($this->dialog->execute()); + } - /* Show dialog - */ - if(is_object($this->dialog)){ - $this->dialog->save_object(); - $this->dialog->parent = $this; - return($this->dialog->execute()); + /* Create Listbox with existing Zones + */ + $this->zoneList->setAcl($this->getacl("")); + + $lData = array(); + foreach($this->Zones as $zone => $values ){ + $lData[$zone] = array('data' => array($zone,$values['ReverseZone'],$values['sOAttl'],$values['dNSClass'])); + } + $this->zoneList->setListData($this->Zones,$lData); + $this->zoneList->update(); + + /* Display tempalte + */ + $smarty->assign("ZoneList",$this->zoneList->render()); + $display.= $smarty->fetch(get_template_path('servdns.tpl', TRUE, dirname(__FILE__))); + return($display); } - /* Create Listbox with existing Zones + + /* Delete specified zone */ - $this->zoneList->setAcl($this->getacl("")); + function RemoveZone($id,$force = FALSE) + { + $zones = $this->getUsedZoneNames(); + + if(isset($this->Zones[$id]['InitialReverseZone'])){ + $rev = DNS::FlipIp($this->Zones[$id]['InitialReverseZone']); + }else{ + $rev = DNS::FlipIp($this->Zones[$id]['ReverseZone']); + } - $lData = array(); - foreach($this->Zones as $zone => $values ){ - $lData[$zone] = array('data' => array($zone,$values['ReverseZone'],$values['sOAttl'],$values['dNSClass'])); - } - $this->zoneList->setListData($this->Zones,$lData); - $this->zoneList->update(); + $zonename = ""; + if(isset($this->Zones[$id]['InitialzoneName'])){ + $zonename= $this->Zones[$id]['InitialzoneName']; + } - /* Display tempalte - */ - $smarty->assign("ZoneList",$this->zoneList->render()); - $display.= $smarty->fetch(get_template_path('servdns.tpl', TRUE, dirname(__FILE__))); - return($display); - } - - - /* Delete specified zone - */ - function RemoveZone($id,$force = FALSE) - { - $zones = $this->getUsedZoneNames(); - - if(isset($this->Zones[$id]['InitialReverseZone'])){ - $rev = DNS::FlipIp($this->Zones[$id]['InitialReverseZone']); - }else{ - $rev = DNS::FlipIp($this->Zones[$id]['ReverseZone']); - } + $used = array(); - $zonename = ""; - if(isset($this->Zones[$id]['InitialzoneName'])){ - $zonename= $this->Zones[$id]['InitialzoneName']; - } + /* Add Records which use this zoneName + */ + if(isset($zones[$zonename])){ + $used = array_merge($used,$zones[$zonename]); + } - $used = array(); + /* Add Records which uses this reverse zone + */ + if(isset($zones[$rev.".in-addr.arpa."])){ + $used = array_merge($used,$zones[$rev.".in-addr.arpa."]); + } - /* Add Records which use this zoneName + /* There are still entries using this configuration + * Abort deletion + */ + if(count($used) && !$force){ + $i = 2; + $str =""; + foreach($used as $dn){ + if($i > 0 && !preg_match("/,relativeDomainName=/",$dn)){ + $i --; + $name = preg_replace("/^[^=]+=([^,]*),.*$/","\\1",$dn); + $zone = preg_replace("/^.*zoneName=([^,]*),.*$/","\\1",$dn); + $str.= $name.".".$zone." "; + } + } + + /* Only show 2 dns in the error message + */ + if(count($used)> 2) { + $str .=" ... "; + } + msg_dialog::display(_("Error"), sprintf(_("Cannot delete the selected zone. It is still in use by '%s'"), trim($str)), ERROR_DIALOG); + return(false); + }else{ + unset($this->Zones[$id]); + return(true); + } + } + + + /* This funtion returns all used Zonenames */ - if(isset($zones[$zonename])){ - $used = array_merge($used,$zones[$zonename]); + function getUsedZoneNames() + { + $ret = array(); + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=dNSZone)(!(relativeDomainName=@))(zoneName=*))",array("zoneName","relativeDomainName")); + while($attr = $ldap->fetch()){ + $ret[$attr['zoneName'][0]][] = $attr['dn']; + } + return($ret); } - /* Add Records which uses this reverse zone - */ - if(isset($zones[$rev.".in-addr.arpa."])){ - $used = array_merge($used,$zones[$rev.".in-addr.arpa."]); - } - /* There are still entries using this configuration - * Abort deletion + /* Remove dns service */ - if(count($used) && !$force){ - $i = 2; - $str =""; - foreach($used as $dn){ - if($i > 0 && !preg_match("/,relativeDomainName=/",$dn)){ - $i --; - $name = preg_replace("/^[^=]+=([^,]*),.*$/","\\1",$dn); - $zone = preg_replace("/^.*zoneName=([^,]*),.*$/","\\1",$dn); - $str.= $name.".".$zone." "; - } - } - - /* Only show 2 dns in the error message - */ - if(count($used)> 2) { - $str .=" ... "; - } - msg_dialog::display(_("Error"), sprintf(_("Cannot delete the selected zone. It is still in use by '%s'"), trim($str)), ERROR_DIALOG); - return(false); - }else{ - unset($this->Zones[$id]); - return(true); - } - } - - - /* This funtion returns all used Zonenames - */ - function getUsedZoneNames() - { - $ret = array(); - $ldap = $this->config->get_ldap_link(); - $ldap->cd($this->config->current['BASE']); - $ldap->search("(&(objectClass=dNSZone)(!(relativeDomainName=@))(zoneName=*))",array("zoneName","relativeDomainName")); - while($attr = $ldap->fetch()){ - $ret[$attr['zoneName'][0]][] = $attr['dn']; - } - return($ret); - } - - - /* Remove dns service - */ - function remove_from_parent() - { - if($this->initially_was_account){ - $bool = true; - $this->is_account = FALSE; - foreach($this->Zones as $key => $zone){ - $bool= $bool & $this->RemoveZone($key,TRUE); - } - if($bool){ - $this->save(); - } - return($bool); + function remove_from_parent() + { + if($this->initially_was_account){ + $bool = true; + $this->is_account = FALSE; + foreach($this->Zones as $key => $zone){ + $bool= $bool & $this->RemoveZone($key,TRUE); + } + if($bool){ + $this->save(); + } + return($bool); + } } - } - /* Save to LDAP */ - function save() - { + /* Save to LDAP */ + function save() + { - /* Take over handling - * - Create list of zones managed by source server - * - Copy ldap entries to destination server - * - Remove old zone entries from source - */ - if($this->take_over_id != -1){ - $del = array(); - $id = $this->take_over_id; - $src = $this->dns_server_list['ENTRIES'][$id]['dn']; - $ldap = $this->config->get_ldap_link(); - $ldap->ls("(objectClass=dnsZone)",$src,array('cn')); - while($attrs = $ldap->fetch()){ - $src_zone = $attrs['dn']; - $dst_zone = preg_replace("/".preg_quote($src, '/')."$/",$this->dn,$src_zone); - $res = plugin::recursive_move($src_zone, $dst_zone); - - if($res){ - $del [] = $src_zone; - } - } - foreach($del as $src_zone){ - $ldap->rmdir_recursive($src_zone); - } - return; - } + /* Take over handling + * - Create list of zones managed by source server + * - Copy ldap entries to destination server + * - Remove old zone entries from source + */ + if($this->take_over_id != -1){ + $del = array(); + $id = $this->take_over_id; + $src = $this->dns_server_list['ENTRIES'][$id]['dn']; + $ldap = $this->config->get_ldap_link(); + $ldap->ls("(objectClass=dnsZone)",$src,array('cn')); + while($attrs = $ldap->fetch()){ + $src_zone = $attrs['dn']; + $dst_zone = preg_replace("/".preg_quote($src, '/')."$/",$this->dn,$src_zone); + $res = plugin::recursive_move($src_zone, $dst_zone); + + if($res){ + $del [] = $src_zone; + } + } + foreach($del as $src_zone){ + $ldap->rmdir_recursive($src_zone); + } + return; + } - /* Save zone editor changes now */ - foreach($this->Zones as $name => $zone){ - if(isset($zone['zoneEditor'] ) && $zone['zoneEditor'] != NULL && is_object($zone['zoneEditor'])){ - $zone['zoneEditor']->save(); - unset($this->Zones[$name]['zoneEditor']);; - } - } + /* Save zone editor changes now */ + foreach($this->Zones as $name => $zone){ + if(isset($zone['zoneEditor'] ) && $zone['zoneEditor'] != NULL && is_object($zone['zoneEditor'])){ + $zone['zoneEditor']->save(); + unset($this->Zones[$name]['zoneEditor']);; + } + } - $ldap = $this->config->get_ldap_link(); - $ldap->cd($this->config->current['BASE']); - - /* Get differences - */ - $old_dn = $this->orig_dn; - if($old_dn == "new"){ - $old_dn = $this->dn; - } + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); - /* Update dns to current object dn */ - $tmp = DNS::getDNSZoneEntriesDiff($this->config,$this->Zones,$old_dn); - $tmp2 = array(); - foreach($tmp as $key1 => $data1){ - $tmp2[$key1] = array(); - foreach($data1 as $key2 => $data2){ - $tmp2[$key1][preg_replace("/".preg_quote($old_dn, '/')."$/",$this->dn,$key2)] = $data2; - } - } - $tmp = $tmp2; + /* Get differences + */ + $old_dn = $this->orig_dn; + if($old_dn == "new"){ + $old_dn = $this->dn; + } - /* Updated zone entries if reverser or forward name has changed - * Must be done before moving entries, else the given dn is invalid - */ - if(isset($tmp['zoneUpdates'])){ - foreach($tmp['zoneUpdates'] as $dn => $attrs){ - $ldap->cd($dn); - $ldap->modify($attrs); - new log("modify","unknown/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error()); - if (!$ldap->success()){ - msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, get_class())); - } - } - } + /* Update dns to current object dn */ + $tmp = DNS::getDNSZoneEntriesDiff($this->config,$this->Zones,$old_dn); + $tmp2 = array(); + foreach($tmp as $key1 => $data1){ + $tmp2[$key1] = array(); + foreach($data1 as $key2 => $data2){ + $tmp2[$key1][preg_replace("/".preg_quote($old_dn, '/')."$/",$this->dn,$key2)] = $data2; + } + } + $tmp = $tmp2; - /* Delete dns - */ - foreach($tmp['del'] as $dn => $del){ + /* Updated zone entries if reverser or forward name has changed + * Must be done before moving entries, else the given dn is invalid + */ + if(isset($tmp['zoneUpdates'])){ + foreach($tmp['zoneUpdates'] as $dn => $attrs){ + $ldap->cd($dn); + $ldap->modify($attrs); + new log("modify","unknown/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error()); + if (!$ldap->success()){ + msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, get_class())); + } + } + } + + /* Delete dns + */ + foreach($tmp['del'] as $dn => $del){ - $for = $del['InitialzoneName']; - $rev = DNS::FlipIp($del['InitialReverseZone']).".in-addr.arpa."; + $for = $del['InitialzoneName']; + $rev = DNS::FlipIp($del['InitialReverseZone']).".in-addr.arpa."; - $ldap->cd($dn); - $ldap->rmdir_recursive($dn); - new log("remove","unknown/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error()); - if (!$ldap->success()){ - msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_DEL, get_class())); - } + $ldap->cd($dn); + $ldap->rmdir_recursive($dn); + new log("remove","unknown/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error()); + if (!$ldap->success()){ + msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_DEL, get_class())); + } - /* Handle Post events */ - if(preg_match("/^zoneName=/",$dn)){ + /* Handle Post events */ + if(preg_match("/^zoneName=/",$dn)){ # $this->handle_post_events("remove",array("dn" => $dn,"zoneName" => $for)); # $this->handle_post_events("remove",array("dn" => $dn,"zoneName" => $rev)); - } - } + } + } - /* move follwoing entries - */ - foreach($tmp['move'] as $src => $dst){ - $this->recursive_move($src,$dst); - } + /* move follwoing entries + */ + foreach($tmp['move'] as $src => $dst){ + $this->recursive_move($src,$dst); + } - /* Add || Update new DNS entries - */ - foreach($tmp['add'] as $dn => $attrs){ - $ldap->cd($dn); - $ldap->cat($dn, array('dn')); - if($ldap->fetch()){ - $ldap->cd($dn); - $ldap->modify ($attrs); - if (!$ldap->success()){ - msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, get_class())); - } - - /* Handle Post events */ - if(preg_match("/^zoneName=/",$dn)){ + /* Add || Update new DNS entries + */ + foreach($tmp['add'] as $dn => $attrs){ + $ldap->cd($dn); + $ldap->cat($dn, array('dn')); + if($ldap->fetch()){ + $ldap->cd($dn); + $ldap->modify ($attrs); + if (!$ldap->success()){ + msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, get_class())); + } + + /* Handle Post events */ + if(preg_match("/^zoneName=/",$dn)){ # $this->handle_post_events("modify",array("dn" => $dn,"zoneName" => $attrs['zoneName'])); + } + }else{ + $ldap->cd($dn); + $ldap->add($attrs); + if (!$ldap->success()){ + msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_ADD, get_class())); + } + + /* Handle Post events */ + if(preg_match("/^zoneName=/",$dn)){ +# $this->handle_post_events("add",array("dn" => $dn,"zoneName" => $attrs['zoneName'])); + } + } } - }else{ - $ldap->cd($dn); - $ldap->add($attrs); - if (!$ldap->success()){ - msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_ADD, get_class())); - } + $this->handle_post_events("modify"); + } - /* Handle Post events */ - if(preg_match("/^zoneName=/",$dn)){ -# $this->handle_post_events("add",array("dn" => $dn,"zoneName" => $attrs['zoneName'])); + + /* Directly save new status flag */ + function setStatus($value) + { + if($value == "none") return; + if(!$this->initially_was_account) return; + if(empty($this->StatusFlag)) return; + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + + $tmp = $ldap->fetch(); + for($i = 0; $i < $tmp['objectClass']['count']; $i ++){ + $attrs['objectClass'][] = $tmp['objectClass'][$i]; + } + $flag = $this->StatusFlag; + $attrs[$flag] = $value; + $this->$flag = $value; + $ldap->modify($attrs); + if (!$ldap->success()){ + msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, get_class())); + } + $this->action_hook(); } - } } - $this->handle_post_events("modify"); - } - - - /* Directly save new status flag */ - function setStatus($value) - { - if($value == "none") return; - if(!$this->initially_was_account) return; - if(empty($this->StatusFlag)) return; - $ldap = $this->config->get_ldap_link(); - $ldap->cd($this->dn); - $ldap->cat($this->dn,array("objectClass")); - if($ldap->count()){ - - $tmp = $ldap->fetch(); - for($i = 0; $i < $tmp['objectClass']['count']; $i ++){ - $attrs['objectClass'][] = $tmp['objectClass'][$i]; - } - $flag = $this->StatusFlag; - $attrs[$flag] = $value; - $this->$flag = $value; - $ldap->modify($attrs); - if (!$ldap->success()){ - msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $this->dn, LDAP_MOD, get_class())); - } - $this->action_hook(); + + + function getListEntry() + { + $fields = goService::getListEntry(); + $fields['Message'] = _("DNS service"); +#$fields['AllowEdit'] = true; + return($fields); } - } - - - function getListEntry() - { - $fields = goService::getListEntry(); - $fields['Message'] = _("DNS service"); - #$fields['AllowEdit'] = true; - return($fields); - } - - - /* Get updates for status flag */ - function updateStatusState() - { - if(empty($this->StatusFlag)) return; - - $attrs = array(); - $flag = $this->StatusFlag; - $ldap = $this->config->get_ldap_link(); - $ldap->cd($this->cn); - $ldap->cat($this->dn,array($flag)); - if($ldap->count()){ - $attrs = $ldap->fetch(); + + + /* Get updates for status flag */ + function updateStatusState() + { + if(empty($this->StatusFlag)) return; + + $attrs = array(); + $flag = $this->StatusFlag; + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->cn); + $ldap->cat($this->dn,array($flag)); + if($ldap->count()){ + $attrs = $ldap->fetch(); + } + if(isset($attrs[$flag][0])){ + $this->$flag = $attrs[$flag][0]; + } } - if(isset($attrs[$flag][0])){ - $this->$flag = $attrs[$flag][0]; + + + /* Return plugin informations for acl handling */ + static function plInfo() + { + return (array( + "plShortName" => _("DNS service"), + "plDescription" => _("DNS service")." ("._("Services").")", + "plSelfModify" => FALSE, + "plDepends" => array(), + "plPriority" => 83, + "plSection" => array("administration"), + "plCategory" => array("server"), + + "plProvidedAcls"=> array( + "start" => _("Start service"), // Remove this to hide the start button at all. + "stop" => _("Stop service"), // Remove this to hide the stop button at all. + "restart" => _("Restart service"),// Remove this to hide the restart button at all. + + "zoneName" =>_("Zone name"), + "ReverseZone" =>_("Reverse zone"), + "NetworkClass" =>_("Network class"), + "zoneEditor" =>_("Zone entry editor"), + "sOAprimary" =>_("Primary dns server"), + "sOAmail" =>_("Mail address"), + "sOAserial" =>_("Serial"), + "sOArefresh" =>_("Refresh"), + "sOAretry" =>_("Retry"), + "sOAexpire" =>_("Expire"), + "sOAttl" =>_("TTL"), + "mXRecord" =>_("MX records"), + "zoneRecords" =>_("Zone records")) + )); } - } - - - /* Return plugin informations for acl handling */ - static function plInfo() - { - return (array( - "plShortName" => _("DNS service"), - "plDescription" => _("DNS service")." ("._("Services").")", - "plSelfModify" => FALSE, - "plDepends" => array(), - "plPriority" => 83, - "plSection" => array("administration"), - "plCategory" => array("server"), - - "plProvidedAcls"=> array( - "start" => _("Start service"), // Remove this to hide the start button at all. - "stop" => _("Stop service"), // Remove this to hide the stop button at all. - "restart" => _("Restart service"),// Remove this to hide the restart button at all. - - "zoneName" =>_("Zone name"), - "ReverseZone" =>_("Reverse zone"), - "NetworkClass" =>_("Network class"), - "zoneEditor" =>_("Zone entry editor"), - "sOAprimary" =>_("Primary dns server"), - "sOAmail" =>_("Mail address"), - "sOAserial" =>_("Serial"), - "sOArefresh" =>_("Refresh"), - "sOAretry" =>_("Retry"), - "sOAexpire" =>_("Expire"), - "sOAttl" =>_("TTL"), - "mXRecord" =>_("MX records"), - "zoneRecords" =>_("Zone records")) - )); - } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: -- 2.30.2