Example #1
0
     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']);
Example #2
0
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;
    }
}