if (!check_ip($domainadd['master'])) { $error['master'] = trans('IP address of master NS is required!'); } } else { $domainadd['master'] = ''; if (!check_ip($domainadd['ipwebserver'])) { $error['ipwebserwer'] = trans('IP address of webserver is required!'); } if (!check_ip($domainadd['ipmailserver'])) { $error['ipmailserwer'] = trans('IP address of mailserver is required!'); } } if ($domainadd['name'] == '') { $error['name'] = trans('Domain name is required!'); } else { if ($errorname = check_hostname_fqdn($domainadd['name'], false, true)) { $error['name'] = $errorname; } else { if (GetDomainIdByName($domainadd['name'])) { $error['name'] = trans('Domain with specified name exists!'); } } } if ($domainadd['ownerid']) { $limits = $LMS->GetHostingLimits($domainadd['ownerid']); if ($limits['domain_limit'] !== NULL) { if ($limits['domain_limit'] > 0) { $cnt = $DB->GetOne('SELECT COUNT(*) FROM domains WHERE ownerid = ?', array($domainadd['ownerid'])); } if ($limits['domain_limit'] == 0 || $limits['domain_limit'] <= $cnt) { $error['ownerid'] = trans('Exceeded domains limit of selected customer ($a)!', $limits['domain_limit']);
function validate_dns_record(&$record, &$error) { $arpa_records = array('PTR', 'SOA', 'NS', 'TXT', 'CNAME', 'MX', 'SPF', 'NAPTR', 'URL', 'MBOXFW', 'CURL', 'SSHFP'); // domena in-addr.arpa if (preg_match('/in-addr\\.arpa$/', $record['domainname'])) { if (!in_array($record['type'], $arpa_records)) { $error['type'] = trans('Wrong record type!'); } } if ($error) { return; } if (!in_array($record['type'], array('SOA', 'CNAME')) && !empty($record['name'])) { if ($errorname = check_hostname_fqdn($record['name'], true, false)) { $error['name'] = $errorname; } } switch ($record['type']) { case 'A': if (empty($record['ipdst'])) { $error['ipdst'] = trans('Field cannot be empty!'); } else { if (!check_ip($record['ipdst'])) { $error['ipdst'] = trans('Invalid IP address!'); } } break; case 'AAAA': if (empty($record['ipdst'])) { $error['ipdst'] = trans('Field cannot be empty!'); } else { if (!check_ipv6($record['ipdst'])) { $error['ipdst'] = trans('Invalid IP address!'); } } break; case 'NS': if ($errorcontent = check_hostname_fqdn($record['ns'], false, true)) { $error['ns'] = $errorcontent; } if (preg_match('/in-addr\\.arpa$/', $record['domainname'])) { if ($errorcontent = check_hostname_fqdn($record['ns'], false, true)) { $error['ns'] = $errorcontent; } } break; case 'MX': if (empty($record['mailserver'])) { $error['mailserver'] = trans('Field cannot be empty!'); } else { if ($errorcontent = check_hostname_fqdn($record['mailserver'], false, true)) { $error['mailserver'] = $errorcontent; } } if (empty($record['prio'])) { $error['prio'] = trans('Field cannot be empty!'); } else { if (!preg_match('/^[0-9]+$/', $record['prio'])) { $error['prio'] = trans('Invalid format!'); } } break; case 'CNAME': if ($errorname = check_hostname_fqdn($record['alias'], true, false)) { $error['alias'] = $errorname; } break; case 'TXT': case 'SPF': if (empty($record['desc'])) { $error['desc'] = trans('Field cannot be empty!'); } break; case 'PTR': if ($errorcontent = check_hostname_fqdn($record['domain'], false, true)) { $error['domain'] = $errorcontent; } break; case 'SOA': foreach (array('serial', 'refresh', 'retry', 'expire', 'minttl') as $idx) { if (empty($record[$idx])) { $error[$idx] = trans('Field cannot be empty!'); } else { if (!preg_match('/^[0-9]+$/', $record[$idx])) { $error[$idx] = trans('Invalid format!'); } } } break; case 'SSHFP': foreach (array('algo', 'ftype', 'fingerprint') as $idx) { if (empty($record[$idx])) { $error[$idx] = trans('Field cannot be empty!'); } else { if ($idx != 'fingerprint' && !preg_match('/^[0-9]+$/', $record[$idx])) { $error[$idx] = trans('Invalid format!'); } } } break; case 'HINFO': foreach (array('cpu', 'os') as $idx) { if (empty($record[$idx])) { $error[$idx] = trans('Field cannot be empty!'); } // @TODO: RFC1010 data format checking } break; case 'SRV': foreach (array('port', 'weight') as $idx) { if (empty($record[$idx])) { $error[$idx] = trans('Field cannot be empty!'); } else { if (!preg_match('/^[0-9]+$/', $record[$idx])) { $error[$idx] = trans('Invalid format!'); } } } break; default: // NAPTR if (empty($record['content'])) { $error['content'] = trans('Field cannot be empty!'); } } if ($error) { return; } // set 'name' and 'content', 'prio' fields to write into DB switch ($record['type']) { case 'A': case 'AAAA': $record['content'] = $record['ipdst']; break; case 'NS': $record['content'] = $record['ns']; break; case 'MX': $record['content'] = $record['mailserver']; break; case 'CNAME': $record['name'] = $record['alias']; $record['content'] = $record['domain']; break; case 'TXT': case 'SPF': $record['content'] = $record['desc']; break; case 'PTR': $record['content'] = $record['domain']; break; case 'SOA': $record['name'] = ''; $record['content'] = $record['ns'] . ' ' . str_replace('@', '.', $record['email']) . ' ' . $record['serial'] . ' ' . $record['refresh'] . ' ' . $record['retry'] . ' ' . $record['expire'] . ' ' . $record['minttl']; break; case 'SSHFP': $record['content'] = $record['algo'] . ' ' . $record['ftype'] . ' ' . $record['fingerprint']; break; case 'HINFO': $record['content'] = $record['cpu'] . ' ' . $record['os']; break; case 'SRV': $record['content'] = $record['weight'] . ' ' . $record['port'] . ' ' . $record['domain']; break; } if ($record['type'] != 'MX') { $record['prio'] = 0; } }