コード例 #1
0
ファイル: lib.common.php プロジェクト: airedale/sumo
/**
 * Validate network data
 * 
 * Note: see also sumo_validate_data() in libs/lib.core.php
 */
function sumo_validate_data_network($data = array(), $message = FALSE)
{
    $elements = count($data);
    $err = FALSE;
    if ($elements > 0) {
        for ($d = 0; $d < $elements; $d++) {
            if ($data[$d][2] == 1 || $data[$d][2] == 0 && $data[$d][1]) {
                switch ($data[$d][0]) {
                    case 'id':
                        // INT = 256^4-1
                        if ($data[$d][1] < 1 || $data[$d][1] > 4294967296) {
                            $err = 'W00029C';
                        }
                        break;
                    case 'node_name':
                        if (!preg_match("/^[a-z0-9" . SUMO_REGEXP_ALLOWED_CHARS . "\\-\\_\\.\\=\\&\\/\\\\'\\ ]{4,50}\$/i", $data[$d][1])) {
                            $err = 'W09015C';
                        }
                        break;
                    case 'dsname':
                        if (!preg_match("/^[a-z0-9" . SUMO_REGEXP_ALLOWED_CHARS . "\\-\\_\\.\\=\\&\\/\\\\'\\ ]{4,128}\$/i", $data[$d][1])) {
                            $err = 'W09001C';
                        }
                        break;
                    case 'type':
                        if (!in_array($data[$d][1], sumo_get_available_datasources())) {
                            $err = 'W09002C';
                        }
                        break;
                    case 'port':
                        if ($data[$d][1] < 1 || $data[$d][1] > 65535) {
                            $err = 'W09004C';
                        }
                        break;
                    case 'protocol':
                        $protocols = array('http', 'https');
                        if (!in_array($data[$d][1], $protocols)) {
                            $err = 'W09017C';
                        }
                        break;
                    case 'username':
                        if (!preg_match('/^[a-z0-9]{3,32}$/i', $data[$d][1])) {
                            $err = 'W09005C';
                        }
                        break;
                    case 'password':
                        if (!preg_match('/[a-z0-9\\.\\,\\:\\;\\_\\-\\$\\!\\"\'\\/\\\\£\\%\\&\\(\\)\\=\\?\\^\\+\\*\\ ' . SUMO_REGEXP_ALLOWED_CHARS . ']{3,255}$/i', $data[$d][1])) {
                            $err = 'W09006C';
                        }
                        break;
                    case 'db_name':
                        if (!preg_match('/^[a-z0-9\\_]{3,32}$/i', $data[$d][1])) {
                            $err = 'W09007C';
                        }
                        break;
                    case 'db_table':
                        if (!preg_match('/[a-z0-9\\_]{3,255}$/i', $data[$d][1])) {
                            $err = 'W09008C';
                        }
                        break;
                    case 'enctype':
                        $enctype = sumo_get_datasource_enctype();
                        if (!in_array($data[$d][1], $enctype)) {
                            $err = 'W09018C';
                        }
                        break;
                    case 'ldap_base':
                        if (!preg_match('/^[a-z0-9\\.\\,\\:\\;\\_\\-\\=\\\\/\\+\\*\\ ' . SUMO_REGEXP_ALLOWED_CHARS . ']{4,255}$/i', $data[$d][1])) {
                            $err = 'W00027C';
                        }
                        break;
                    case 'iptype':
                        $type = array('L', 'P');
                        if (!in_array($data[$d][1], $type)) {
                            $err = 'W09010C';
                        }
                        break;
                    case 'host':
                        if (!sumo_validate_ip($data[$d][1], FALSE) && !preg_match('/[a-z0-9\\.\\_\\-]{3,128}$/i', $data[$d][1])) {
                            $err = 'W09011C';
                        }
                        break;
                    case 'hostname':
                        if (!preg_match('/[a-z0-9\\.\\_\\-]{3,128}$/i', $data[$d][1])) {
                            $err = 'W09003C';
                        }
                        break;
                    case 'iprange':
                        if (!sumo_validate_iprange($data[$d][1], FALSE)) {
                            $err = 'W09009C';
                        }
                        break;
                    case 'status':
                        if ($data[$d][1] != 0 && $data[$d][1] != 1) {
                            $err = 'W09012C';
                        }
                        break;
                    case 'sumo_path':
                        if (!preg_match("/^\\/[a-z0-9\\-\\_\\.\\/]{1,253}\\/\$/i", $data[$d][1])) {
                            $err = 'W09014C';
                        }
                        break;
                    default:
                        $err = 'W00019C';
                        break;
                }
                if ($err) {
                    break;
                }
            }
        }
        if ($message) {
            return !$err ? array(TRUE, '') : array(FALSE, sumo_get_message($err));
        } else {
            return !$err ? true : false;
        }
    } else {
        return false;
    }
}
コード例 #2
0
ファイル: lib.core.php プロジェクト: airedale/sumo
/**
 * Get list of private IP's from table SUMO_INTRANET_IP.
 * If an IP number it's specified the function verify only this IP.
 * Warning: this function verify IP range only from database.
 *
 * @global resource $SUMO
 * @param boolean
 * @return array, boolean
 * @author Alberto Basso <*****@*****.**>
 */
function sumo_get_intranet_ip($ip = '', $cache = FALSE)
{
    global $SUMO;
    $ip_list = array();
    $query = "SELECT ip,type FROM " . SUMO_TABLE_INTRANETIP . "\n\t\t\t\tORDER BY ip,type";
    // Fix unknow IP (maybe througt Proxy)
    if ($ip == "::1") {
        return "PROXY";
    }
    if ($ip) {
        $ipe = explode("/", $ip);
        if (sumo_validate_ip($ipe[0])) {
            $ipp = explode(".", $ipe[0]);
            $query = "SELECT ip,type FROM " . SUMO_TABLE_INTRANETIP . "\n\t\t\t\t\t  WHERE ip LIKE '" . $ipp[0] . "." . $ipp[1] . "." . $ipp[2] . ".%'\n\t\t\t\t\t  ORDER BY ip,type";
        } else {
            sumo_write_log('W00041X', array($ipe[0], __FUNCTION__), '0,1', 2);
            return "INVALID IP";
        }
    }
    if ($cache) {
        $rs = $SUMO['DB']->CacheExecute(30, $query);
    } else {
        $rs = $SUMO['DB']->Execute($query);
    }
    while ($ips = $rs->FetchRow()) {
        // Create IP address list.
        // Not using sumo_get_iprange() function for performance reason
        if (ereg("/", $ips['ip'])) {
            $ipn = explode("/", $ips['ip']);
            $ipd = explode(".", $ipn[0]);
            // ...to control IP error definition
            if (!sumo_validate_iprange($ips['ip'])) {
                $ipd[3] = $ipn[1];
            }
            for ($i = $ipd[3]; $i <= $ipn[1]; $i++) {
                switch ($ips['type']) {
                    case 'L':
                        $type = 'LOCAL';
                        break;
                    case 'P':
                        $type = 'PROXY';
                        break;
                }
                $ip_list[$ipd[0] . "." . $ipd[1] . "." . $ipd[2] . "." . $i] = $type;
            }
        }
    }
    if ($ip) {
        return in_array($ip, array_keys($ip_list)) ? $ip_list["{$ip}"] : "UNKNOW";
    } else {
        return $ip_list;
    }
}