fa48534c49945a75f4d6f3b004538c37d51fae9c
1 <?php
3 class servdns extends plugin
4 {
5 /* CLI vars */
6 var $cli_summary= "Manage server basic objects";
7 var $cli_description= "Some longer text\nfor help";
8 var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
10 /* attribute list for save action */
11 var $ignore_account= TRUE;
12 var $attributes= array("zoneName","relativeDomainName","dNSTTL","dNSClass","sOARecord");
13 var $objectclasses= array("whatever");
15 var $RecordTypes = array();
16 var $usedRecords = array();
18 var $Zones = array();
19 var $editMode = false;
21 function servdns ($config, $dn= NULL)
22 {
23 plugin::plugin ($config, $dn);
25 $RecordTypes['ARecord'] ['name'] ="A Record";
26 $RecordTypes['ARecord'] ['type'] ="string";
27 $RecordTypes['MDRecord'] ['name'] ="MD Record";
28 $RecordTypes['MDRecord'] ['type'] ="string";
29 $RecordTypes['MXRecord'] ['name'] ="MX Record";
30 $RecordTypes['MXRecord'] ['type'] ="string";
31 $RecordTypes['NSRecord'] ['name'] ="NS Record";
32 $RecordTypes['NSRecord'] ['type'] ="string";
33 $RecordTypes['CNAMERecord'] ['name'] ="CNAME Record";
34 $RecordTypes['CNAMERecord'] ['type'] ="string";
35 $RecordTypes['PTRRecord'] ['name'] ="PTR Record";
36 $RecordTypes['PTRRecord'] ['type'] ="string";
37 $RecordTypes['HINFORecord'] ['name'] ="HINFO Record";
38 $RecordTypes['HINFORecord'] ['type'] ="string";
39 $RecordTypes['MINFORecord'] ['name'] ="MINFO Record";
40 $RecordTypes['MINFORecord'] ['type'] ="string";
41 $RecordTypes['TXTRecord'] ['name'] ="TXT Record";
42 $RecordTypes['TXTRecord'] ['type'] ="string";
43 $RecordTypes['AFSDBRecord'] ['name'] ="AFSDB Record";
44 $RecordTypes['AFSDBRecord'] ['type'] ="string";
45 $RecordTypes['SIGRecord'] ['name'] ="SIG Record";
46 $RecordTypes['SIGRecord'] ['type'] ="string";
47 $RecordTypes['KEYRecord'] ['name'] ="KEY Record";
48 $RecordTypes['KEYRecord'] ['type'] ="string";
49 $RecordTypes['AAAARecord'] ['name'] ="AAAA Record";
50 $RecordTypes['AAAARecord'] ['type'] ="string";
51 $RecordTypes['LOCRecord'] ['name'] ="LOC Record";
52 $RecordTypes['LOCRecord'] ['type'] ="string";
53 $RecordTypes['NXTRecord'] ['name'] ="NXT Record";
54 $RecordTypes['NXTRecord'] ['type'] ="string";
55 $RecordTypes['SRVRecord'] ['name'] ="SRV Record";
56 $RecordTypes['SRVRecord'] ['type'] ="string";
57 $RecordTypes['NAPTRRecord'] ['name'] ="NAPTR Record";
58 $RecordTypes['NAPTRRecord'] ['type'] ="string";
59 $RecordTypes['KXRecord'] ['name'] ="KX Record";
60 $RecordTypes['KXRecord'] ['type'] ="string";
61 $RecordTypes['CERTRecord'] ['name'] ="CERT Record";
62 $RecordTypes['CERTRecord'] ['type'] ="string";
63 $RecordTypes['A6Record'] ['name'] ="A6 Record";
64 $RecordTypes['A6Record'] ['type'] ="string";
65 $RecordTypes['DNAMERecord'] ['name'] ="DBNAME Record";
66 $RecordTypes['DNAMERecord'] ['type'] ="string";
67 $RecordTypes['DSRecord'] ['name'] ="DS Record";
68 $RecordTypes['DSRecord'] ['type'] ="string";
69 $RecordTypes['SSHFPRecord'] ['name'] ="SSHFP Record";
70 $RecordTypes['SSHFPRecord'] ['type'] ="string";
71 $RecordTypes['RRSIGRecord'] ['name'] ="RRSIG Record";
72 $RecordTypes['RRSIGRecord'] ['type'] ="string";
73 $RecordTypes['NSECRecord'] ['name'] ="NSEC Record";
74 $RecordTypes['NSECRecord'] ['type'] ="string";
75 $RecordTypes['mXRecord'] ['name'] ="MX Record";
76 $RecordTypes['mXRecord'] ['type'] ="string";
77 $RecordTypes['nSRecord'] ['name'] ="nS Record";
78 $RecordTypes['nSRecord'] ['type'] ="string";
80 $this->RecordTypes = $RecordTypes;
82 $attrs = $this->attributes;
83 foreach($RecordTypes as $name => $att){
84 $attrs2[] = $name;
85 }
86 $attrs3 = array_merge($attrs,$attrs2);
88 $ldap = $this->config->get_ldap_link();
89 $ldap->cd($this->dn);
90 $ldap->search("(&(objectClass=dNSZone)(sOARecord=*))",$attrs3);
91 while($zone = $ldap->fetch()){
92 $tmp = array();
93 foreach($attrs as $att){
94 if(isset($zone[$att]['count'])&&(is_array($zone[$att])))
95 unset($zone[$att]['count']);
97 if(isset($zone[$att])){
98 $tmp[$att] = $zone[$att][0];
99 }else{
100 $tmp[$att] = "";
101 }
102 }
104 if(isset($tmp['sOARecord'])){
105 $tmp2 = split("\ ",$tmp['sOARecord']);
106 unset($tmp['sOARecord']);
107 $tmp['sOARecord'] = array();
108 $tmp['sOARecord']['sOAprimary'] = $tmp2[0];
109 $tmp['sOARecord']['sOAmail'] = $tmp2[1];
110 $tmp['sOARecord']['sOAserial'] = $tmp2[2];
111 $tmp['sOARecord']['sOArefresh'] = $tmp2[3];
112 $tmp['sOARecord']['sOAretry'] = $tmp2[4];
113 $tmp['sOARecord']['sOAexpire'] = $tmp2[5];
114 $tmp['sOARecord']['sOAttl'] = $tmp2[6];
115 }
117 $tmp['usedRecords'] = array();
118 foreach($attrs2 as $name){
119 if(isset($zone[$name])){
120 for($i = 0 ; $i < $zone[$name]['count'] ; $i++ ){
121 $tmp['usedRecords'][] = array("type"=> $name,"value"=>$zone[$name][$i]);
122 }
123 }
124 }
125 $this->Zones[$zone['zoneName'][0]] = $tmp;
126 }
127 if(count($this->Zones > 0)){
128 $this->is_account = true;
129 }
130 }
132 function execute()
133 {
134 /* Call parent execute */
135 plugin::execute();
137 /* Fill templating stuff */
138 $smarty= get_smarty();
139 $display= "";
141 /* Do we need to flip is_account state? */
142 if (isset($_POST['modify_state'])){
143 $this->is_account= !$this->is_account;
144 }
146 /* Show tab dialog headers */
147 if ($this->is_account){
148 $display= $this->show_header(_("Remove DNS service"),
149 _("This server has DNS features enabled. You can disable them by clicking below."));
150 } else {
151 $display= $this->show_header(_("Add DNS service"),
152 _("This server has DNS features disabled. You can enable them by clicking below."));
153 return ($display);
154 }
156 $once = false;
157 foreach( $_POST as $name => $value){
158 if(preg_match("/^editZone_/",$name)&&!$once){
159 $once =true;
160 $tmp = preg_replace("/^editZone_/","",$name);
161 $tmp = base64_decode(preg_replace("/_.*$/","...",$tmp));
162 $this->editMode = $this->Zones[$tmp];
163 }
164 }
167 $smarty->assign("editMode",$this->editMode);
168 if($this->editMode){
170 foreach($this->attributes as $attrs){
171 $smarty->assign($attrs,$this->editMode[$attrs]);
172 }
174 foreach($this->editMode['sOARecord'] as $name => $value){
175 $smarty->assign($name,$value);
176 }
177 $smarty->assign("records","");
179 }else{
180 $ZoneList = new divSelectBox("dNSZones");
181 $ZoneList -> SetHeight(254);
183 $editImg = "<input type='image' src='images/edit.png' name='editZone_%s'>";
185 foreach($this->Zones as $zone => $values ){
186 $ZoneList->AddEntry(array(array("string" => $zone.str_replace("%s",base64_encode($zone),$editImg))));
187 }
190 $smarty->assign("ZoneList",$ZoneList->DrawList());
191 }
193 $display.= $smarty->fetch(get_template_path('servdns.tpl', TRUE));
194 return($display);
195 }
197 function remove_from_parent()
198 {
199 /* This cannot be removed... */
200 }
203 /* Save data to object */
204 function save_object()
205 {
206 //plugin::save_object();
208 if(!$this->editMode){return;}
210 foreach($this->attributes as $attr){
211 if(isset($_POST[$attr])){
212 $this->editMode[$attr] = $_POST[$attr];
213 }
214 }
216 foreach($this->editMode['sOARecord'] as $name => $value){
217 if(isset($_POST[$name])){
218 $this->editMode['sOARecord'][$name] = $_POST[$name];
219 }
220 }
222 }
225 /* Check supplied data */
226 function check()
227 {
228 $message= array();
230 return ($message);
231 }
234 /* Save to LDAP */
235 function save()
236 {
237 plugin::save();
239 /* Optionally execute a command after we're done */
240 #$this->handle_post_events($mode);
241 }
243 }
245 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
246 ?>