public function testValidateHost() { $this->assertTrue(validateHost("example.com")); $this->assertTrue(validateHost("domain")); $this->assertTrue(validateHost("EXAMPLE.COM")); $this->assertTrue(validateHost("Example.Com")); $this->assertTrue(validateHost("10.0.0.1")); $this->assertTrue(validateHost("127.0.0.1")); $this->assertFalse(validateHost("site . com")); $this->assertFalse(validateHost("site. com")); $this->assertFalse(validateHost("site .com")); }
function checkIP($ip, $list) { if (!validateHost($ip)) { return false; } if (!is_array($list)) { $list = explode(',', $list); } foreach ($list as $mask) { $mask = str_replace('.', '\\.', $mask); $mask = str_replace('*', '[0-9]+(\\.[0-9]+)*', $mask); if (preg_match("~^{$mask}\$~", $ip)) { return true; } } return false; }
/** * Generate the Apache configuration. * * @param string $baseDir The VuFind base directory * @param string $overrideDir The VuFind override directory * @param string $basePath The VuFind URL base path * @param string $module The VuFind custom module name (or empty for none) * @param int $multi Multisite mode preference * @param string $host Virtual host name (or empty for none) * * @return void */ function buildApacheConfig($baseDir, $overrideDir, $basePath, $module, $multi, $host) { $baseConfig = $baseDir . '/config/vufind/httpd-vufind.conf'; $config = @file_get_contents($baseConfig); if (empty($config)) { die("Problem reading {$baseConfig}.\n\n"); } $config = str_replace("/usr/local/vufind/local", "%override-dir%", $config); $config = str_replace("/usr/local/vufind", "%base-dir%", $config); $config = preg_replace("|([^/])\\/vufind|", "\$1%base-path%", $config); $config = str_replace("%override-dir%", $overrideDir, $config); $config = str_replace("%base-dir%", $baseDir, $config); $config = str_replace("%base-path%", $basePath, $config); if (!empty($module)) { $config = str_replace("#SetEnv VUFIND_LOCAL_MODULES VuFindLocalTemplate", "SetEnv VUFIND_LOCAL_MODULES {$module}", $config); } // In multisite mode, we need to make environment variables conditional: switch ($multi) { case MULTISITE_DIR_BASED: $config = preg_replace('/SetEnv\\s+(\\w+)\\s+(.*)/', 'SetEnvIf Request_URI "^' . $basePath . '" $1=$2', $config); break; case MULTISITE_HOST_BASED: if (($result = validateHost($host)) !== true) { die($result . "\n"); } $config = preg_replace('/SetEnv\\s+(\\w+)\\s+(.*)/', 'SetEnvIfNoCase Host ' . str_replace('.', '\\.', $host) . ' $1=$2', $config); break; } $target = $overrideDir . '/httpd-vufind.conf'; if (file_exists($target)) { $bak = $target . '.bak.' . time(); copy($target, $bak); echo "Backed up existing Apache configuration to {$bak}.\n"; } if (!@file_put_contents($target, $config)) { die("Problem writing {$overrideDir}/httpd-vufind.conf.\n\n"); } }