Marius Burkard
2016-07-01 49441bdd0f3ff75d5092d5b832b97ea722a66363
commit | author | age
4c2c36 1 <?php
B 2
3 /*
4 Copyright (c) 2008, Till Brehm, projektfarm Gmbh
5 All rights reserved.
6
7 Redistribution and use in source and binary forms, with or without modification,
8 are permitted provided that the following conditions are met:
9
10     * Redistributions of source code must retain the above copyright notice,
11       this list of conditions and the following disclaimer.
12     * Redistributions in binary form must reproduce the above copyright notice,
13       this list of conditions and the following disclaimer in the documentation
14       and/or other materials provided with the distribution.
15     * Neither the name of ISPConfig nor the names of its contributors
16       may be used to endorse or promote products derived from this software without
17       specific prior written permission.
18
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
23 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
26 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
b1a6a5 31 require_once '../../lib/config.inc.php';
MC 32 require_once '../../lib/app.inc.php';
4c2c36 33
B 34 //* Check permissions for module
35 $app->auth->check_module_permissions('dns');
36
8ab3cd 37 $msg = '';
T 38 $error = '';
4c2c36 39
B 40 // Loading the template
b33d7d 41 $app->uses('tform,tpl,validate_dns');
4c2c36 42 $app->tpl->newTemplate("form.tpl.htm");
b1a6a5 43 $app->tpl->setInclude('content_tpl', 'templates/dns_import.htm');
4c2c36 44 $app->load_language_file('/web/dns/lib/lang/'.$_SESSION['s']['language'].'_dns_wizard.lng');
B 45
b33d7d 46 // Check if dns record limit has been reached. We will check only users, not admins
TB 47 if($_SESSION["s"]["user"]["typ"] == 'user') {
48     $app->tform->formDef['db_table_idx'] = 'id';
49     $app->tform->formDef['db_table'] = 'dns_soa';
50     if(!$app->tform->checkClientLimit('limit_dns_zone')) {
51         $app->error($app->lng('limit_dns_zone_txt'));
52     }
53     if(!$app->tform->checkResellerLimit('limit_dns_zone')) {
54         $app->error('Reseller: '.$app->lng('limit_dns_zone_txt'));
55     }
56 }
57
4c2c36 58 // import variables
65ea2e 59 $template_id = (isset($_POST['template_id']))?$app->functions->intval($_POST['template_id']):0;
M 60 $sys_groupid = (isset($_POST['client_group_id']))?$app->functions->intval($_POST['client_group_id']):0;
4c2c36 61 $domain = (isset($_POST['domain'])&&!empty($_POST['domain']))?$_POST['domain']:NULL;
B 62
63 // get the correct server_id
bd6659 64 if (isset($_POST['server_id'])) {
SJ 65     $server_id = $app->functions->intval($_POST['server_id']);
66     $post_server_id = true;
1a2cbf 67 } elseif (isset($_POST['server_id_value'])) {
MC 68     $server_id = $app->functions->intval($_POST['server_id_value']);
69     $post_server_id = true;
4c2c36 70 } else {
41d7d1 71     $settings = $app->getconf->get_global_config('dns');
SC 72     $server_id = $app->functions->intval($settings['default_dnsserver']);
bd6659 73     $post_server_id = false;
4c2c36 74 }
B 75
76
77 // Load the templates
78 $records = $app->db->queryAllRecords("SELECT * FROM dns_template WHERE visible = 'Y'");
79 $template_id_option = '';
80 $n = 0;
81 foreach($records as $rec){
82     $checked = ($rec['template_id'] == $template_id)?' SELECTED':'';
83     $template_id_option .= '<option value="'.$rec['template_id'].'"'.$checked.'>'.$rec['name'].'</option>';
84     if($n == 0 && $template_id == 0) $template_id = $rec['template_id'];
85     $n++;
86 }
87 unset($n);
b1a6a5 88 $app->tpl->setVar("template_id_option", $template_id_option);
4c2c36 89
B 90 // If the user is administrator
91 if($_SESSION['s']['user']['typ'] == 'admin') {
b1a6a5 92
4c2c36 93     // Load the list of servers
B 94     $records = $app->db->queryAllRecords("SELECT server_id, server_name FROM server WHERE mirror_server_id = 0 AND dns_server = 1 ORDER BY server_name");
95     $server_id_option = '';
96     foreach($records as $rec){
97         $checked = ($rec['server_id'] == $server_id)?' SELECTED':'';
98         $server_id_option .= '<option value="'.$rec['server_id'].'"'.$checked.'>'.$rec['server_name'].'</option>';
99     }
b1a6a5 100     $app->tpl->setVar("server_id", $server_id_option);
MC 101
4c2c36 102     // load the list of clients
ca4b71 103     $sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.client_id > 0 ORDER BY client.company_name, client.contact_name, sys_group.name";
4c2c36 104     $clients = $app->db->queryAllRecords($sql);
B 105     $client_select = '';
106     if($_SESSION["s"]["user"]["typ"] == 'admin') $client_select .= "<option value='0'></option>";
107     if(is_array($clients)) {
108         foreach( $clients as $client) {
109             $selected = ($client["groupid"] == $sys_groupid)?'SELECTED':'';
615a0a 110             $client_select .= "<option value='$client[groupid]' $selected>$client[contactname]</option>\r\n";
4c2c36 111         }
B 112     }
113
b1a6a5 114     $app->tpl->setVar("client_group_id", $client_select);
4c2c36 115 }
B 116
117 if ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
b1a6a5 118
4c2c36 119     // Get the limits of the client
35509d 120     $client_group_id = intval($_SESSION["s"]["user"]["default_group"]);
cc7a82 121     $client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname, sys_group.name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
4c2c36 122
b1a6a5 123
4c2c36 124     // load the list of clients
cc7a82 125     $sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ? ORDER BY client.company_name, client.contact_name, sys_group.name";
MC 126     $clients = $app->db->queryAllRecords($sql, $client['client_id']);
127     $tmp = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = ?", $client['client_id']);
615a0a 128     $client_select = '<option value="'.$tmp['groupid'].'">'.$client['contactname'].'</option>';
4c2c36 129     if(is_array($clients)) {
B 130         foreach( $clients as $client) {
131             $selected = ($client["groupid"] == $sys_groupid)?'SELECTED':'';
615a0a 132             $client_select .= "<option value='$client[groupid]' $selected>$client[contactname]</option>\r\n";
4c2c36 133         }
B 134     }
135
b1a6a5 136     $app->tpl->setVar("client_group_id", $client_select);
4c2c36 137 }
B 138
bd6659 139 if($_SESSION["s"]["user"]["typ"] != 'admin')
SJ 140 {
141     $client_group_id = $_SESSION["s"]["user"]["default_group"];
cc7a82 142     $client_dns = $app->db->queryOneRecord("SELECT dns_servers FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
bd6659 143
SJ 144     $client_dns['dns_servers_ids'] = explode(',', $client_dns['dns_servers']);
145
146     $only_one_server = count($client_dns['dns_servers_ids']) === 1;
147     $app->tpl->setVar('only_one_server', $only_one_server);
148
149     if ($only_one_server) {
150         $app->tpl->setVar('server_id_value', $client_dns['dns_servers_ids'][0]);
151     }
152
cc7a82 153     $sql = "SELECT server_id, server_name FROM server WHERE server_id IN ?";
MC 154     $dns_servers = $app->db->queryAllRecords($sql, $client_dns['dns_servers_ids']);
bd6659 155
SJ 156     $options_dns_servers = "";
157
158     foreach ($dns_servers as $dns_server) {
159         $options_dns_servers .= "<option value='$dns_server[server_id]'>$dns_server[server_name]</option>";
160     }
161
162     $app->tpl->setVar("server_id", $options_dns_servers);
163     unset($options_dns_servers);
164
165 }
166
021ef6 167 /*
SC 168  * Now we have to check, if we should use the domain-module to select the domain
169  * or not
170  */
171 $app->uses('ini_parser,getconf');
172 $settings = $app->getconf->get_global_config('domains');
173 if ($settings['use_domain_module'] == 'y') {
174     /*
175      * The domain-module is in use.
176     */
9ec304 177     $domains = $app->tools_sites->getDomainModuleDomains("dns_soa");
021ef6 178     /*
SC 179      * We can leave domain empty if domain is filename
180     */
181     $domain_select = "<option value=''></option>\r\n";
182     if(is_array($domains) && sizeof($domains) > 0) {
183         /* We have domains in the list, so create the drop-down-list */
184         foreach( $domains as $domain) {
185             $domain_select .= "<option value=" . $domain['domain_id'] ;
186             if ($domain['domain'] == $_POST['domain']) {
187                 $domain_select .= " selected";
188             }
189             $domain_select .= ">" . $app->functions->idn_decode($domain['domain']) . ".</option>\r\n";
190         }
191     }
192     $app->tpl->setVar("domain_option", $domain_select);
193     /* check if the selected domain can be used! */
194     if ($domain) {
195         $domain_check = $app->tools_sites->checkDomainModuleDomain($domain);
196         if(!$domain_check) {
197             // invalid domain selected
198             $domain = NULL;
199         } else {
200             $domain = $domain_check;
201         }
202     }
203 }
204
02bf99 205 $lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_dns_import.lng';
b1a6a5 206 include $lng_file;
02bf99 207 $app->tpl->setVar($wb);
T 208
4c2c36 209 // Import the zone-file
B 210 //if(1=="1")
8ab3cd 211 if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'])){
T 212     $valid_zone_file = FALSE;
b1a6a5 213
cc7a82 214     $sql = "SELECT server_name FROM `server` WHERE server_id=? OR mirror_server_id=? ORDER BY server_name ASC";
MC 215     $servers = $app->db->queryAllRecords($sql, $server_id, $server_id);
4c2c36 216     for ($i=0;$i<count($servers);$i++)
B 217     {
b1a6a5 218         if (substr($servers[$i]['server_name'], strlen($servers[$i]['server_name'])-1) != ".")
4c2c36 219         {
B 220             $servers[$i]['server_name'] .= ".";
221         }
222     }
223     $lines = file($_FILES['file']['tmp_name']);
b1a6a5 224
8ab3cd 225     // Remove empty lines, comments, whitespace, tabs, etc.
T 226     $new_lines = array();
227     foreach($lines as $line){
228         $line = trim($line);
b1a6a5 229         if ($line != '' && substr($line, 0, 1) != ';'){
81b7f7 230             if(strpos($line, ";") !== FALSE) {
a1e703 231                 if(!preg_match("/\"[^\"]+;[^\"]*\"/", $line)) {
81b7f7 232                     $line = substr($line, 0, strpos($line, ";"));
FS 233                 }
234             }
235             if(strpos($line, "(") !== FALSE ) {
236                 if (!preg_match("/v=DKIM/",$line)) {
237                     $line = substr($line, 0, strpos($line, "("));
238                 }
239             }
240             if(strpos($line, ")") !== FALSE ) {
241                 if (!preg_match("/v=DKIM/",$line)) {
242                     $line = substr($line, 0, strpos($line, ")"));
243                 }
244             }
245             
8ab3cd 246             $line = trim($line);
T 247             if ($line != ''){
248                 $sPattern = '/\s+/m';
249                 $sReplace = ' ';
250                 $new_lines[] = preg_replace($sPattern, $sReplace, $line);
251             }
252         }
253     }
254     unset($lines);
255     $lines = $new_lines;
256     unset($new_lines);
b1a6a5 257
4c2c36 258     //$lines = file("apriqot.se.txt");
b1a6a5 259     $name = str_replace("txt", "", $_FILES['file']['name']);
MC 260     $name = str_replace("zone", "", $name);
8ab3cd 261
T 262     if ($domain !== NULL){
4c2c36 263         $name = $domain;
B 264     }
b1a6a5 265
MC 266     if (substr($name, -1) != "."){
8ab3cd 267         $name .= ".";
T 268     }
b1a6a5 269
8ab3cd 270     $i = 0;
T 271     $origin_exists = FALSE;
272     $soa_array_key = -1;
273     $soa = array();
274     $soa['name'] = $name;
275     $r = 0;
276     $dns_rr = array();
277     foreach($lines as $line){
b1a6a5 278
8ab3cd 279         $parts = explode(' ', $line);
b1a6a5 280
81b7f7 281         // make elements lowercase
8ab3cd 282         $new_parts = array();
T 283         foreach($parts as $part){
a1e703 284         if(
CGS 285             (strpos($part, ';') === false) &&
286             (!preg_match("/^\"/", $part)) &&
287             (!preg_match("/\"$/", $part))
288         ) {
81b7f7 289                 $new_parts[] = strtolower($part);
FS 290             } else {
291                 $new_parts[] = $part;
292             }
8ab3cd 293         }
T 294         unset($parts);
295         $parts = $new_parts;
296         unset($new_parts);
b1a6a5 297
8ab3cd 298         // if ORIGIN exists, overwrite $soa['name']
T 299         if($parts[0] == '$origin'){
300             $soa['name'] = $parts[1];
301             $origin_exists = TRUE;
302         }
303         // TTL
304         if($parts[0] == '$ttl'){
b1a6a5 305             $time_format = strtolower(substr($parts[1], -1));
02bf99 306             switch ($time_format) {
b1a6a5 307             case 's':
MC 308                 $soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1));
309                 break;
310             case 'm':
311                 $soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1)) * 60;
312                 break;
313             case 'h':
314                 $soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1)) * 3600;
315                 break;
316             case 'd':
317                 $soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1)) * 86400;
318                 break;
319             case 'w':
320                 $soa['ttl'] = $app->functions->intval(substr($parts[1], 0, -1)) * 604800;
321                 break;
322             default:
323                 $soa['ttl'] = $app->functions->intval($parts[1]);
02bf99 324             }
T 325             unset($time_format);
8ab3cd 326         }
T 327         // SOA
328         if(in_array("soa", $parts)){
329             $soa['mbox'] = array_pop($parts);
330             //$soa['ns'] = array_pop($parts);
331             $soa['ns'] = $servers[0]['server_name'];
332             // if domain is part of SOA, overwrite $soa['name']
333             if($parts[0] != '@' && $parts[0] != 'in' && $parts[0] != 'soa' && $origin_exists === FALSE){
334                 $soa['name'] = $parts[0];
335             }
336             $soa_array_key = $i;
337             $valid_zone_file = TRUE;
338         }
339         // SERIAL
65ea2e 340         if($i == ($soa_array_key + 1)) $soa['serial'] = $app->functions->intval($parts[0]);
8ab3cd 341         // REFRESH
02bf99 342         if($i == ($soa_array_key + 2)){
b1a6a5 343             $time_format = strtolower(substr($parts[0], -1));
02bf99 344             switch ($time_format) {
b1a6a5 345             case 's':
MC 346                 $soa['refresh'] = $app->functions->intval(substr($parts[0], 0, -1));
347                 break;
348             case 'm':
349                 $soa['refresh'] = $app->functions->intval(substr($parts[0], 0, -1)) * 60;
350                 break;
351             case 'h':
352                 $soa['refresh'] = $app->functions->intval(substr($parts[0], 0, -1)) * 3600;
353                 break;
354             case 'd':
355                 $soa['refresh'] = $app->functions->intval(substr($parts[0], 0, -1)) * 86400;
356                 break;
357             case 'w':
358                 $soa['refresh'] = $app->functions->intval(substr($parts[0], 0, -1)) * 604800;
359                 break;
360             default:
361                 $soa['refresh'] = $app->functions->intval($parts[0]);
02bf99 362             }
T 363             unset($time_format);
364         }
8ab3cd 365         // RETRY
02bf99 366         if($i == ($soa_array_key + 3)){
b1a6a5 367             $time_format = strtolower(substr($parts[0], -1));
02bf99 368             switch ($time_format) {
b1a6a5 369             case 's':
MC 370                 $soa['retry'] = $app->functions->intval(substr($parts[0], 0, -1));
371                 break;
372             case 'm':
373                 $soa['retry'] = $app->functions->intval(substr($parts[0], 0, -1)) * 60;
374                 break;
375             case 'h':
376                 $soa['retry'] = $app->functions->intval(substr($parts[0], 0, -1)) * 3600;
377                 break;
378             case 'd':
379                 $soa['retry'] = $app->functions->intval(substr($parts[0], 0, -1)) * 86400;
380                 break;
381             case 'w':
382                 $soa['retry'] = $app->functions->intval(substr($parts[0], 0, -1)) * 604800;
383                 break;
384             default:
385                 $soa['retry'] = $app->functions->intval($parts[0]);
02bf99 386             }
T 387             unset($time_format);
388         }
8ab3cd 389         // EXPIRE
02bf99 390         if($i == ($soa_array_key + 4)){
b1a6a5 391             $time_format = strtolower(substr($parts[0], -1));
02bf99 392             switch ($time_format) {
b1a6a5 393             case 's':
MC 394                 $soa['expire'] = $app->functions->intval(substr($parts[0], 0, -1));
395                 break;
396             case 'm':
397                 $soa['expire'] = $app->functions->intval(substr($parts[0], 0, -1)) * 60;
398                 break;
399             case 'h':
400                 $soa['expire'] = $app->functions->intval(substr($parts[0], 0, -1)) * 3600;
401                 break;
402             case 'd':
403                 $soa['expire'] = $app->functions->intval(substr($parts[0], 0, -1)) * 86400;
404                 break;
405             case 'w':
406                 $soa['expire'] = $app->functions->intval(substr($parts[0], 0, -1)) * 604800;
407                 break;
408             default:
409                 $soa['expire'] = $app->functions->intval($parts[0]);
02bf99 410             }
T 411             unset($time_format);
412         }
8ab3cd 413         // MINIMUM
02bf99 414         if($i == ($soa_array_key + 5)){
b1a6a5 415             $time_format = strtolower(substr($parts[0], -1));
02bf99 416             switch ($time_format) {
b1a6a5 417             case 's':
MC 418                 $soa['minimum'] = $app->functions->intval(substr($parts[0], 0, -1));
419                 break;
420             case 'm':
421                 $soa['minimum'] = $app->functions->intval(substr($parts[0], 0, -1)) * 60;
422                 break;
423             case 'h':
424                 $soa['minimum'] = $app->functions->intval(substr($parts[0], 0, -1)) * 3600;
425                 break;
426             case 'd':
427                 $soa['minimum'] = $app->functions->intval(substr($parts[0], 0, -1)) * 86400;
428                 break;
429             case 'w':
430                 $soa['minimum'] = $app->functions->intval(substr($parts[0], 0, -1)) * 604800;
431                 break;
432             default:
433                 $soa['minimum'] = $app->functions->intval($parts[0]);
02bf99 434             }
T 435             unset($time_format);
436         }
8ab3cd 437         // RESOURCE RECORDS
T 438         if($i > ($soa_array_key + 5)){
b1a6a5 439             if(substr($parts[0], -1) == '.' || $parts[0] == '@' || ($parts[0] != 'a' && $parts[0] != 'aaaa' && $parts[0] != 'ns' && $parts[0] != 'cname' && $parts[0] != 'hinfo' && $parts[0] != 'mx' && $parts[0] != 'naptr' && $parts[0] != 'ptr' && $parts[0] != 'rp' && $parts[0] != 'srv' && $parts[0] != 'txt')){
8ab3cd 440                 if(is_numeric($parts[1])){
T 441                     if($parts[2] == 'in'){
442                         $resource_type = $parts[3];
443                         $pkey = 3;
444                     } else {
445                         $resource_type = $parts[2];
446                         $pkey = 2;
447                     }
448                 } else {
449                     if($parts[1] == 'in'){
450                         $resource_type = $parts[2];
451                         $pkey = 2;
452                     } else {
453                         $resource_type = $parts[1];
454                         $pkey = 1;
455                     }
456                 }
457                 $dns_rr[$r]['type'] = $resource_type;
458                 if($parts[0] == '@' || $parts[0] == '.'){
459                     $dns_rr[$r]['name'] = $soa['name'];
460                 } else {
461                     $dns_rr[$r]['name'] = $parts[0];
462                 }
463                 if(is_numeric($parts[1])){
65ea2e 464                     $dns_rr[$r]['ttl'] = $app->functions->intval($parts[1]);
8ab3cd 465                 } else {
T 466                     $dns_rr[$r]['ttl'] = $soa['ttl'];
467                 }
468                 switch ($resource_type) {
b1a6a5 469                 case 'mx':
MC 470                 case 'srv':
471                     $dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
472                     $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
473                     break;
474                 case 'txt':
475                     $dns_rr[$r]['aux'] = 0;
476                     $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
477                     if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
478                     if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
479                     break;
480                 default:
481                     $dns_rr[$r]['aux'] = 0;
482                     $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
8ab3cd 483                 }
T 484             } else {
485                 // a 3600 IN A 1.2.3.4
486                 if(is_numeric($parts[1]) && $parts[2] == 'in' && ($parts[3] == 'a' || $parts[3] == 'aaaa' || $parts[3] == 'ns'|| $parts[3] == 'cname' || $parts[3] == 'hinfo' || $parts[3] == 'mx' || $parts[3] == 'naptr' || $parts[3] == 'ptr' || $parts[3] == 'rp' || $parts[3] == 'srv' || $parts[3] == 'txt')){
487                     $resource_type = $parts[3];
488                     $pkey = 3;
489                     $dns_rr[$r]['type'] = $resource_type;
490                     $dns_rr[$r]['name'] = $parts[0];
65ea2e 491                     $dns_rr[$r]['ttl'] = $app->functions->intval($parts[1]);
8ab3cd 492                     switch ($resource_type) {
b1a6a5 493                     case 'mx':
MC 494                     case 'srv':
495                         $dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
496                         $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
497                         break;
498                     case 'txt':
499                         $dns_rr[$r]['aux'] = 0;
500                         $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
501                         if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
502                         if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
503                         break;
504                     default:
505                         $dns_rr[$r]['aux'] = 0;
506                         $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
8ab3cd 507                     }
b1a6a5 508                 }
8ab3cd 509                 // a IN A 1.2.3.4
T 510                 elseif($parts[1] == 'in' && ($parts[2] == 'a' || $parts[2] == 'aaaa' || $parts[2] == 'ns'|| $parts[2] == 'cname' || $parts[2] == 'hinfo' || $parts[2] == 'mx' || $parts[2] == 'naptr' || $parts[2] == 'ptr' || $parts[2] == 'rp' || $parts[2] == 'srv' || $parts[2] == 'txt')){
511                     $resource_type = $parts[2];
512                     $pkey = 2;
513                     $dns_rr[$r]['type'] = $resource_type;
514                     $dns_rr[$r]['name'] = $parts[0];
515                     $dns_rr[$r]['ttl'] = $soa['ttl'];
516                     switch ($resource_type) {
b1a6a5 517                     case 'mx':
MC 518                     case 'srv':
519                         $dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
520                         $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
521                         break;
522                     case 'txt':
523                         $dns_rr[$r]['aux'] = 0;
524                         $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
525                         if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
526                         if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
527                         break;
528                     default:
529                         $dns_rr[$r]['aux'] = 0;
530                         $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
8ab3cd 531                     }
b1a6a5 532                 }
8ab3cd 533                 // a 3600 A 1.2.3.4
T 534                 elseif(is_numeric($parts[1]) && ($parts[2] == 'a' || $parts[2] == 'aaaa' || $parts[2] == 'ns'|| $parts[2] == 'cname' || $parts[2] == 'hinfo' || $parts[2] == 'mx' || $parts[2] == 'naptr' || $parts[2] == 'ptr' || $parts[2] == 'rp' || $parts[2] == 'srv' || $parts[2] == 'txt')){
535                     $resource_type = $parts[2];
536                     $pkey = 2;
537                     $dns_rr[$r]['type'] = $resource_type;
538                     $dns_rr[$r]['name'] = $parts[0];
65ea2e 539                     $dns_rr[$r]['ttl'] = $app->functions->intval($parts[1]);
8ab3cd 540                     switch ($resource_type) {
b1a6a5 541                     case 'mx':
MC 542                     case 'srv':
543                         $dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
544                         $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
545                         break;
546                     case 'txt':
547                         $dns_rr[$r]['aux'] = 0;
548                         $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
549                         if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
550                         if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
551                         break;
552                     default:
553                         $dns_rr[$r]['aux'] = 0;
554                         $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
8ab3cd 555                     }
b1a6a5 556                 }
8ab3cd 557                 // A 1.2.3.4
T 558                 // MX 10 mail
559                 // TXT "v=spf1 a mx ptr -all"
560                 else {
561                     $resource_type = $parts[0];
562                     $pkey = 0;
563                     $dns_rr[$r]['type'] = $resource_type;
564                     $dns_rr[$r]['name'] = $soa['name'];
565                     $dns_rr[$r]['ttl'] = $soa['ttl'];
566                     switch ($resource_type) {
b1a6a5 567                     case 'mx':
MC 568                     case 'srv':
569                         $dns_rr[$r]['aux'] = $app->functions->intval($parts[$pkey+1]);
570                         $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+2));
571                         break;
572                     case 'txt':
573                         $dns_rr[$r]['aux'] = 0;
574                         $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
575                         if(substr($dns_rr[$r]['data'], 0, 1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 1);
576                         if(substr($dns_rr[$r]['data'], -1) == '"') $dns_rr[$r]['data'] = substr($dns_rr[$r]['data'], 0, -1);
577                         break;
578                     default:
579                         $dns_rr[$r]['aux'] = 0;
580                         $dns_rr[$r]['data'] = implode(' ', array_slice($parts, $pkey+1));
8ab3cd 581                     }
T 582                 }
583             }
584             $dns_rr[$r]['type'] = strtoupper($dns_rr[$r]['type']);
585             if($dns_rr[$r]['type'] == 'NS' && $dns_rr[$r]['name'] == $soa['name']){
586                 unset($dns_rr[$r]);
587             }
588             $r++;
589         }
590         $i++;
591     }
4c2c36 592
8ab3cd 593     foreach ($servers as $server){
T 594         $dns_rr[$r]['name'] = $soa['name'];
595         $dns_rr[$r]['type'] = 'NS';
4c2c36 596         $dns_rr[$r]['data'] = $server['server_name'];
B 597         $dns_rr[$r]['aux'] = 0;
598         $r++;
599     }
b1a6a5 600     //print('<pre>');
MC 601     //print_r($dns_rr);
602     //print('</pre>');
603
604
4c2c36 605     // Insert the soa record
B 606     $sys_userid = $_SESSION['s']['user']['userid'];
3a11d2 607     $origin = $soa['name'];
MC 608     $ns = $soa['ns'];
609     $mbox = $soa['mbox'];
610     $refresh = $soa['refresh'];
611     $retry = $soa['retry'];
612     $expire = $soa['expire'];
613     $minimum = $soa['minimum'];
614     $ttl = $soa['ttl'];
615     $xfer = '';
616     $serial = $app->functions->intval($soa['serial']+1);
8ab3cd 617     //print_r($soa);
T 618     //die();
619     if($valid_zone_file){
3a11d2 620         $insert_data = array(
MC 621             "sys_userid" => $sys_userid,
622             "sys_groupid" => $sys_groupid,
623             "sys_perm_user" => 'riud',
624             "sys_perm_group" => 'riud',
625             "sys_perm_other" => '',
626             "server_id" => $server_id,
627             "origin" => $origin,
628             "ns" => $ns,
629             "mbox" => $mbox,
630             "serial" => $serial,
631             "refresh" => $refresh,
632             "retry" => $retry,
633             "expire" => $expire,
634             "minimum" => $minimum,
635             "ttl" => $ttl,
636             "active" => 'Y',
637             "xfer" => $xfer
638         );
8ab3cd 639         $dns_soa_id = $app->db->datalogInsert('dns_soa', $insert_data, 'id');
b1a6a5 640
8ab3cd 641         // Insert the dns_rr records
T 642         if(is_array($dns_rr) && $dns_soa_id > 0)
4c2c36 643         {
8ab3cd 644             foreach($dns_rr as $rr)
T 645             {
3a11d2 646                 $insert_data = array(
MC 647                     "sys_userid" => $sys_userid,
648                     "sys_groupid" => $sys_groupid,
649                     "sys_perm_user" => 'riud',
650                     "sys_perm_group" => 'riud',
651                     "sys_perm_other" => '',
652                     "server_id" => $server_id,
653                     "zone" => $dns_soa_id,
654                     "name" => $rr['name'],
655                     "type" => $rr['type'],
656                     "data" => $rr['data'],
657                     "aux" => $rr['aux'],
658                     "ttl" => $rr['ttl'],
659                     "active" => 'Y'
660                 );
8ab3cd 661                 $dns_rr_id = $app->db->datalogInsert('dns_rr', $insert_data, 'id');
T 662             }
4c2c36 663         }
02bf99 664         $msg .= $wb['zone_file_successfully_imported_txt'];
8ab3cd 665     } else {
02bf99 666         $error .= $wb['error_no_valid_zone_file_txt'];
4c2c36 667     }
8ab3cd 668     //header('Location: /dns/dns_soa_edit.php?id='.$dns_soa_id);
02bf99 669 } else {
T 670     if(isset($_FILES['file']['name'])) {
671         $error = $wb['no_file_uploaded_error'];
672     }
4c2c36 673 }
8ab3cd 674
4c2c36 675
b1a6a5 676 $app->tpl->setVar('msg', $msg);
MC 677 $app->tpl->setVar('error', $error);
4c2c36 678
B 679 $app->tpl_defaults();
680 $app->tpl->pparse();
681
682
b1a6a5 683 ?>