Merge branch 'master' of git@github.com:bsdperimeter/pfsense

This commit is contained in:
Chris Buechler 2011-07-16 22:15:23 -04:00
commit cb2518bf5a
109 changed files with 7808 additions and 2124 deletions

View File

@ -187,6 +187,7 @@
<!-- <harddiskstandby></harddiskstandby> -->
<disablesegmentationoffloading/>
<disablelargereceiveoffloading/>
<ipv6allow/>
</system>
<interfaces>
<wan>
@ -202,6 +203,8 @@
<dhcphostname></dhcphostname>
<media></media>
<mediaopt></mediaopt>
<dhcp6-duid></dhcp6-duid>
<dhcp6-ia-pd-len>0</dhcp6-ia-pd-len>
<!--
<wireless>
*see below (opt[n])*
@ -213,8 +216,11 @@
<if>vr0</if>
<ipaddr>192.168.1.1</ipaddr>
<subnet>24</subnet>
<ipaddrv6>fe80::192:168:1:1</ipaddrv6>
<subnetv6>64</subnetv6>
<media></media>
<mediaopt></mediaopt>
<dhcp6-pd-sla-id>0</dhcp6-pd-sla-id>
<!--
<wireless>
*see below (opt[n])*
@ -422,6 +428,7 @@
<!-- <tcpidletimeout></tcpidletimeout> -->
<rule>
<type>pass</type>
<ipprotocol>inet</ipprotocol>
<descr><![CDATA[Default allow LAN to any rule]]></descr>
<interface>lan</interface>
<source>
@ -431,11 +438,24 @@
<any/>
</destination>
</rule>
<rule>
<type>pass</type>
<ipprotocol>inet6</ipprotocol>
<descr><![CDATA[Default allow LAN IPv6 to any rule]]></descr>
<interface>lan</interface>
<source>
<network>lan</network>
</source>
<destination>
<any/>
</destination>
</rule>
<!-- rule syntax:
<rule>
<disabled/>
<id>[0-9]*</id>
<type>pass|block|reject</type>
<ipprotocol>inet|inet6</ipprotocol>
<descr>...</descr>
<interface>lan|opt[n]|wan|pptp</interface>
<protocol>tcp|udp|tcp/udp|...</protocol>

0
etc/bogonsv6 Normal file
View File

View File

@ -158,7 +158,7 @@ class PEAR
{
$classname = strtolower(get_class($this));
if ($this->_debug) {
print "PEAR constructor called, class=$classname\n";
printf(gettext("PEAR constructor called, class=%s\n"), $classname);
}
if ($error_class !== null) {
$this->_error_class = $error_class;
@ -195,7 +195,7 @@ class PEAR
*/
function _PEAR() {
if ($this->_debug) {
printf("PEAR destructor called, class=%s\n", strtolower(get_class($this)));
printf(gettext("PEAR destructor called, class=%s\n"), strtolower(get_class($this)));
}
}
@ -334,12 +334,12 @@ class PEAR
if (is_callable($options)) {
$setoptions = $options;
} else {
trigger_error("invalid error callback", E_USER_WARNING);
trigger_error(gettext("invalid error callback"), E_USER_WARNING);
}
break;
default:
trigger_error("invalid error mode", E_USER_WARNING);
trigger_error(gettext("invalid error mode"), E_USER_WARNING);
break;
}
}
@ -442,17 +442,17 @@ class PEAR
$deleted = false;
}
}
return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
return $deleted ? true : PEAR::raiseError(gettext("The expected error you submitted does not exist")); // IMPROVE ME
} elseif (!empty($error_code)) {
// $error_code comes alone, trying to unset it
if ($this->_checkDelExpect($error_code)) {
return true;
} else {
return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
return PEAR::raiseError(gettext("The expected error you submitted does not exist")); // IMPROVE ME
}
} else {
// $error_code is empty
return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
return PEAR::raiseError(gettext("The expected error you submitted is empty")); // IMPROVE ME
}
}
@ -592,12 +592,12 @@ class PEAR
if (is_callable($options)) {
$def_options = $options;
} else {
trigger_error("invalid error callback", E_USER_WARNING);
trigger_error(gettext("invalid error callback"), E_USER_WARNING);
}
break;
default:
trigger_error("invalid error mode", E_USER_WARNING);
trigger_error(gettext("invalid error mode"), E_USER_WARNING);
break;
}
$stack[] = array($mode, $options);
@ -629,12 +629,12 @@ class PEAR
if (is_callable($options)) {
$setoptions = $options;
} else {
trigger_error("invalid error callback", E_USER_WARNING);
trigger_error(gettext("invalid error callback"), E_USER_WARNING);
}
break;
default:
trigger_error("invalid error mode", E_USER_WARNING);
trigger_error(gettext("invalid error mode"), E_USER_WARNING);
break;
}
return true;
@ -863,7 +863,7 @@ class PEAR_Error
}
}
if ($this->mode & PEAR_ERROR_EXCEPTION) {
trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions", E_USER_WARNING);
trigger_error(gettext("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions"), E_USER_WARNING);
eval('$e = new Exception($this->message, $this->code);$e->PEAR_Error = $this;throw($e);');
}
}
@ -1020,8 +1020,8 @@ class PEAR_Error
} else {
$callback = $this->callback;
}
return sprintf('[%s: message="%s" code=%d mode=callback '.
'callback=%s prefix="%s" info="%s"]',
return sprintf(gettext('[%s: message="%s" code=%d mode=callback '.
'callback=%s prefix="%s" info="%s"]'),
strtolower(get_class($this)), $this->message, $this->code,
$callback, $this->error_message_prefix,
$this->userinfo);
@ -1038,8 +1038,8 @@ class PEAR_Error
if ($this->mode & PEAR_ERROR_RETURN) {
$modes[] = 'return';
}
return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
'prefix="%s" info="%s"]',
return sprintf(gettext('[%s: message="%s" code=%d mode=%s level=%s '.
'prefix="%s" info="%s"]'),
strtolower(get_class($this)), $this->message, $this->code,
implode("|", $modes), $levels[$this->level],
$this->error_message_prefix,
@ -1057,4 +1057,4 @@ class PEAR_Error
* End:
*/
?>
?>

View File

@ -34,7 +34,7 @@ if (!function_exists('array_intersect_key')) {
{
$args = func_get_args();
if (count($args) < 2) {
user_error('Wrong parameter count for array_intersect_key()', E_USER_WARNING);
user_error(gettext('Wrong parameter count for array_intersect_key()'), E_USER_WARNING);
return;
}
@ -42,8 +42,8 @@ if (!function_exists('array_intersect_key')) {
$array_count = count($args);
for ($i = 0; $i !== $array_count; $i++) {
if (!is_array($args[$i])) {
user_error('array_intersect_key() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
user_error(gettext('array_intersect_key() Argument #') .
($i + 1) . gettext(' is not an array'), E_USER_WARNING);
return;
}
}
@ -64,4 +64,4 @@ if (!function_exists('array_intersect_key')) {
}
}
?>
?>

View File

@ -57,14 +57,21 @@ $security_passed = true;
if (function_exists("display_error_form") && !isset($config['system']['webgui']['nodnsrebindcheck'])) {
/* DNS ReBinding attack prevention. http://redmine.pfsense.org/issues/708 */
$found_host = false;
if(strstr($_SERVER['HTTP_HOST'], ":")) {
$http_host_port = explode(":", $_SERVER['HTTP_HOST']);
$http_host = $http_host_port[0];
/* v6 address has more parts, drop the last part */
if(count($http_host_port) > 1) {
array_pop($http_host_port);
$http_host = str_replace(array("[", "]"), "", implode(":", $http_host_port));
} else {
$http_host = $http_host_port[0];
}
} else {
$http_host = $_SERVER['HTTP_HOST'];
}
if(is_ipaddr($http_host) or $_SERVER['SERVER_ADDR'] == "127.0.0.1" or
strcasecmp($http_host, "localhost") == 0)
strcasecmp($http_host, "localhost") == 0 or $_SERVER['SERVER_ADDR'] == "::1")
$found_host = true;
if(strcasecmp($http_host, $config['system']['hostname'] . "." . $config['system']['domain']) == 0 or
strcasecmp($http_host, $config['system']['hostname']) == 0)
@ -88,7 +95,7 @@ if (function_exists("display_error_form") && !isset($config['system']['webgui'][
if($found_host == false) {
if(!security_checks_disabled()) {
display_error_form("501", "Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/DNS_rebinding<br/>Try accessing the router by IP address instead of by hostname.");
display_error_form("501", gettext("Potential DNS Rebind attack detected, see http://en.wikipedia.org/wiki/DNS_rebinding<br/>Try accessing the router by IP address instead of by hostname."));
exit;
}
$security_passed = false;
@ -295,7 +302,7 @@ function local_sync_accounts() {
continue;
$cmd = "/usr/sbin/pw userdel {$line[2]}";
if($debug)
log_error("Running: {$cmd}");
log_error(sprintf(gettext("Running: %s"), $cmd));
mwexec($cmd);
}
pclose($fd);
@ -315,7 +322,7 @@ function local_sync_accounts() {
continue;
$cmd = "/usr/sbin/pw groupdel {$line[2]}";
if($debug)
log_error("Running: {$cmd}");
log_error(sprintf(gettext("Running: %s"), $cmd));
mwexec($cmd);
}
pclose($fd);
@ -381,7 +388,7 @@ function local_user_set(& $user) {
if ($user_uid == 0) {
$cmd = "/usr/sbin/pw usermod -q -n root -s /bin/sh -H 0";
if($debug)
log_error("Running: {$cmd}");
log_error(sprintf(gettext("Running: %s"), $cmd));
$fd = popen($cmd, "w");
fwrite($fd, $user['password']);
pclose($fd);
@ -408,7 +415,7 @@ function local_user_set(& $user) {
" -c ".escapeshellarg($user['descr'])." -H 0 2>&1";
if($debug)
log_error("Running: {$cmd}");
log_error(sprintf(gettext("Running: %s"), $cmd));
$fd = popen($cmd, "w");
fwrite($fd, $user['password']);
pclose($fd);
@ -453,7 +460,7 @@ function local_user_del($user) {
$cmd = "/usr/sbin/pw userdel {$user['name']} {$rmhome}";
if($debug)
log_error("Running: {$cmd}");
log_error(sprintf(gettext("Running: %s"), $cmd));
mwexec($cmd);
/* Delete user from groups needs a call to write_config() */
@ -584,7 +591,7 @@ function local_group_set($group, $reset = false) {
$cmd = "/usr/sbin/pw {$group_op} {$group_name} -g {$group_gid} -M {$group_members} 2>&1";
if($debug)
log_error("Running: {$cmd}");
log_error(sprintf(gettext("Running: %s"), $cmd));
mwexec($cmd);
}
@ -596,7 +603,7 @@ function local_group_del($group) {
$cmd = "/usr/sbin/pw groupdel {$group['name']}";
if($debug)
log_error("Running: {$cmd}");
log_error(sprintf(gettext("Running: %s"), $cmd));
mwexec($cmd);
}
@ -620,8 +627,10 @@ function ldap_test_connection($authcfg) {
if(!$ldapserver)
return false;
/* Setup CA environment if needed. */
ldap_setup_caenv($authcfg);
/* connect and see if server is up */
putenv('LDAPTLS_REQCERT=never');
$error = false;
if (empty($ldapport)) {
if (!($ldap = ldap_connect($ldapserver)))
@ -630,13 +639,41 @@ function ldap_test_connection($authcfg) {
$error = true;
if ($error == true) {
log_error("ERROR! Could not connect to server {$ldapname}.");
log_error(sprintf(gettext("ERROR! Could not connect to server %s."), $ldapname));
return false;
}
return true;
}
function ldap_setup_caenv($authcfg) {
global $g;
unset($caref);
if (empty($authcfg['ldap_cacert']) || !strstr($authcfg['ldap_urltype'], "SSL")) {
putenv('LDAPTLS_REQCERT=never');
return;
} else {
$caref = lookup_ca($authcfg['ldap_cacert']);
if (!$caref) {
log_error(sprintf(gettext("LDAP: Could not lookup CA by reference for host %s."), $authcfg['ldap_cacert']));
/* XXX: Prevent for credential leaking since we cannot setup the CA env. Better way? */
putenv('LDAPTLS_REQCERT=hard');
return;
}
if (!is_dir("{$g['varrun_path']}/certs"))
@mkdir("{$g['varrun_path']}/certs");
if (file_exists("{$g['varrun_path']}/certs/{$authcfg['name']}.ca"))
@unlink("{$g['varrun_path']}/certs/{$authcfg['name']}.ca");
file_put_contents("{$g['varrun_path']}/certs/{$authcfg['name']}.ca", base64_decode($caref['crt']));
@chmod("{$g['varrun_path']}/certs/{$authcfg['name']}.ca", 0600);
putenv('LDAPTLS_REQCERT=hard');
/* XXX: Probably even the hashed link should be created for this? */
putenv("TLS_CACERTDIR={$g['varrun_path']}/certs");
putenv("TLS_CACERT={$g['varrun_path']}/certs/{$authcfg['name']}.ca");
}
}
function ldap_test_bind($authcfg) {
global $debug, $config, $g;
@ -662,8 +699,10 @@ function ldap_test_bind($authcfg) {
if(!$ldapserver)
return false;
/* Setup CA environment if needed. */
ldap_setup_caenv($authcfg);
/* connect and see if server is up */
putenv('LDAPTLS_REQCERT=never');
$error = false;
if (empty($ldapport)) {
if (!($ldap = ldap_connect($ldapserver)))
@ -672,7 +711,7 @@ function ldap_test_bind($authcfg) {
$error = true;
if ($error == true) {
log_error("ERROR! Could not connect to server {$ldapname}.");
log_error(sprintf(gettext("ERROR! Could not connect to server %s."), $ldapname));
return false;
}
@ -725,12 +764,14 @@ function ldap_get_user_ous($show_complete_ou=true, $authcfg) {
/* first check if there is even an LDAP server populated */
if(!$ldapserver) {
log_error("ERROR! ldap_get_user_ous() backed selected with no LDAP authentication server defined.");
log_error(gettext("ERROR! ldap_get_user_ous() backed selected with no LDAP authentication server defined."));
return $ous;
}
/* Setup CA environment if needed. */
ldap_setup_caenv($authcfg);
/* connect and see if server is up */
putenv('LDAPTLS_REQCERT=never');
$error = false;
if (empty($ldapport)) {
if (!($ldap = ldap_connect($ldapserver)))
@ -739,7 +780,7 @@ function ldap_get_user_ous($show_complete_ou=true, $authcfg) {
$error = true;
if ($error == true) {
log_error("ERROR! Could not connect to server {$ldapname}.");
log_error(sprintf(gettext("ERROR! Could not connect to server %s."), $ldapname));
return $ous;
}
@ -750,12 +791,12 @@ function ldap_get_user_ous($show_complete_ou=true, $authcfg) {
if ($ldapanon == true) {
if (!($res = @ldap_bind($ldap))) {
log_error("ERROR! ldap_get_user_ous() could not bind anonymously to server {$ldapname}.");
log_error(sprintf(gettext("ERROR! ldap_get_user_ous() could not bind anonymously to server %s."), $ldapname));
@ldap_close($ldap);
return $ous;
}
} else if (!($res = @ldap_bind($ldap, $ldapbindun, $ldapbindpw))) {
log_error("ERROR! ldap_get_user_ous() could not bind to server {$ldapname}.");
log_error(sprintf(gettext("ERROR! ldap_get_user_ous() could not bind to server %s."), $ldapname));
@ldap_close($ldap);
return $ous;
}
@ -840,8 +881,10 @@ function ldap_get_groups($username, $authcfg) {
$ldapgroupattribute = strtolower($ldapgroupattribute);
$memberof = array();
/* Setup CA environment if needed. */
ldap_setup_caenv($authcfg);
/* connect and see if server is up */
putenv('LDAPTLS_REQCERT=never');
$error = false;
if (empty($ldapport)) {
if (!($ldap = ldap_connect($ldapserver)))
@ -850,7 +893,7 @@ function ldap_get_groups($username, $authcfg) {
$error = true;
if ($error == true) {
log_error("ERROR! ldap_get_groups() Could not connect to server {$ldapname}.");
log_error(sprintf(gettext("ERROR! ldap_get_groups() Could not connect to server %s."), $ldapname));
return memberof;
}
@ -860,12 +903,12 @@ function ldap_get_groups($username, $authcfg) {
/* bind as user that has rights to read group attributes */
if ($ldapanon == true) {
if (!($res = @ldap_bind($ldap))) {
log_error("ERROR! ldap_get_groups() could not bind anonymously to server {$ldapname}.");
log_error(sprintf(gettext("ERROR! ldap_get_groups() could not bind anonymously to server %s."), $ldapname));
@ldap_close($ldap);
return false;
}
} else if (!($res = @ldap_bind($ldap, $ldapbindun, $ldapbindpw))) {
log_error("ERROR! ldap_get_groups() could not bind to server {$ldapname}.");
log_error(sprintf(gettext("ERROR! ldap_get_groups() could not bind to server %s."), $ldapname));
@ldap_close($ldap);
return memberof;
}
@ -949,10 +992,10 @@ function ldap_backed($username, $passwd, $authcfg) {
/* first check if there is even an LDAP server populated */
if(!$ldapserver) {
if ($ldapfallback) {
log_error("ERROR! ldap_backed() called with no LDAP authentication server defined. Defaulting to local user database. Visit System -> User Manager.");
log_error(gettext("ERROR! ldap_backed() called with no LDAP authentication server defined. Defaulting to local user database. Visit System -> User Manager."));
return local_backed($username, $passwd);
} else
log_error("ERROR! ldap_backed() called with no LDAP authentication server defined.");
log_error(gettext("ERROR! ldap_backed() called with no LDAP authentication server defined."));
return false;
}
@ -960,8 +1003,10 @@ function ldap_backed($username, $passwd, $authcfg) {
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, (int)$ldapver);
/* Setup CA environment if needed. */
ldap_setup_caenv($authcfg);
/* Make sure we can connect to LDAP */
putenv('LDAPTLS_REQCERT=never');
$error = false;
if (empty($ldapport)) {
if (!($ldap = ldap_connect($ldapserver)))
@ -970,7 +1015,7 @@ function ldap_backed($username, $passwd, $authcfg) {
$error = true;
if ($error == true) {
log_error("ERROR! Could not connect to server {$ldapname}.");
log_error(sprintf(gettext("ERROR! Could not connect to server %s."), $ldapname));
return false;
}
@ -984,7 +1029,7 @@ function ldap_backed($username, $passwd, $authcfg) {
if ($error == true) {
@ldap_close($ldap);
log_error("ERROR! Could not bind to server {$ldapname}.");
log_error(sprintf(gettext("ERROR! Could not bind to server %s."), $ldapname));
return false;
}
@ -1001,11 +1046,11 @@ function ldap_backed($username, $passwd, $authcfg) {
/* Person. To later be used by ldap_get_groups. */
/* that way we don't have to search twice. */
/*****************************************************************/
log_error("Now Searching for {$username} in directory.");
log_error(sprintf(gettext("Now Searching for %s in directory."), $username));
/* Iterate through the user containers for search */
foreach ($ldac_splits as $i => $ldac_split) {
/* Make sure we just use the first user we find */
log_error("Now Searching in server {$ldapname}, container {$ldac_split} with filter {$ldapfilter}.");
log_error(sprintf(gettext('Now Searching in server %1$s, container %2$s with filter %3$s.'), $ldapname, $ldac_split, $ldapfilter));
if ($ldapscope == "one")
$ldapfunc = "ldap_list";
else
@ -1016,7 +1061,7 @@ function ldap_backed($username, $passwd, $authcfg) {
else
$search = @$ldapfunc($ldap,"{$ldac_split},{$ldapbasedn}",$ldapfilter);
if (!$search) {
log_error("Search resulted in error: " . ldap_error($ldap));
log_error(sprintf(gettext("Search resulted in error: %s"), ldap_error($ldap)));
continue;
}
$info = ldap_get_entries($ldap,$search);
@ -1032,18 +1077,18 @@ function ldap_backed($username, $passwd, $authcfg) {
if ($usercount != 1){
@ldap_unbind($ldap);
log_error("ERROR! Either LDAP search failed, or multiple users were found.");
log_error(gettext("ERROR! Either LDAP search failed, or multiple users were found."));
return false;
}
/* Now lets bind as the user we found */
if (!($res = @ldap_bind($ldap, $userdn, $passwd))) {
log_error("ERROR! Could not login to server {$ldapname} as user {$username}.");
log_error(sprintf(gettext('ERROR! Could not login to server %1$s as user %2$s.'), $ldapname, $username));
@ldap_unbind($ldap);
return false;
}
log_error("Logged in successfully as {$username} via LDAP server {$ldapname} with DN = {$userdn}.");
log_error(sprintf(gettext('Logged in successfully as %1$s via LDAP server %2$s with DN = %3$s.'), $username, $ldapname, $userdn));
/* At this point we are bound to LDAP so the user was auth'd okay. Close connection. */
@ldap_unbind($ldap);
@ -1074,7 +1119,7 @@ function radius_backed($username, $passwd, $authcfg){
$retvalue['auth_val'] = 1;
$retvalue['error'] = $rauth->getError();
if ($debug)
printf("Radius start: %s<br>\n", $retvalue['error']);
printf(gettext("Radius start: %s<br>\n"), $retvalue['error']);
}
// XXX - billm - somewhere in here we need to handle securid challenge/response
@ -1085,7 +1130,7 @@ function radius_backed($username, $passwd, $authcfg){
$retvalue['auth_val'] = 1;
$retvalue['error'] = $result->getMessage();
if ($debug)
printf("Radius send failed: %s<br>\n", $retvalue['error']);
printf(gettext("Radius send failed: %s<br>\n"), $retvalue['error']);
} else if ($result === true) {
$retvalue['auth_val'] = 2;
if ($debug)
@ -1137,7 +1182,7 @@ function auth_get_authserver($name) {
}
}
if ($name == "Local Database")
return array("name" => "Local Database", "type" => "Local Auth", "host" => $config['system']['hostname']);
return array("name" => gettext("Local Database"), "type" => gettext("Local Auth"), "host" => $config['system']['hostname']);
}
function auth_get_authserver_list() {
@ -1152,7 +1197,7 @@ function auth_get_authserver_list() {
}
}
$list["Local Database"] = array( "name" => "Local Database", "type" => "Local Auth", "host" => $config['system']['hostname']);
$list["Local Database"] = array( "name" => gettext("Local Database"), "type" => gettext("Local Auth"), "host" => $config['system']['hostname']);
return $list;
}
@ -1223,7 +1268,7 @@ function session_auth() {
$_SESSION['Username'] = $_POST['usernamefld'];
$_SESSION['last_access'] = time();
if(! isset($config['system']['webgui']['quietlogin'])) {
log_auth("Successful webConfigurator login for user '{$_POST['usernamefld']}' from {$_SERVER['REMOTE_ADDR']}");
log_auth(sprintf(gettext("Successful login for user '%1\$s' from: %2\$s"), $_POST['usernamefld'], $_SERVER['REMOTE_ADDR']));
}
$HTTP_SERVER_VARS['AUTH_USER'] = $_SESSION['Username'];
if (isset($_POST['postafterlogin']))
@ -1277,9 +1322,9 @@ function session_auth() {
if (isset($_GET['logout'])) {
if ($_SESSION['Logout'])
log_error("Session timed out for user '{$_SESSION['Username']}' from: {$_SERVER['REMOTE_ADDR']}");
log_error(sprintf(gettext("Session timed out for user '%1\$s' from: %2\$s"), $_SESSION['Username'], $_SERVER['REMOTE_ADDR']));
else
log_error("User logged out for user '{$_SESSION['Username']}' from: {$_SERVER['REMOTE_ADDR']}");
log_error(sprintf(gettext("User logged out for user '%1\$s' from: %2\$s"), $_SESSION['Username'], $_SERVER['REMOTE_ADDR']));
/* wipe out $_SESSION */
$_SESSION = array();

View File

@ -64,7 +64,7 @@ if (!isAllowedPage($_SERVER['SCRIPT_NAME'])) {
pfSenseHeader("/{$page}");
exit;
} else {
display_error_form("201", "No page assigned to this user! Click here to logout.");
display_error_form("201", gettext("No page assigned to this user! Click here to logout."));
exit;
}
} else
@ -88,7 +88,7 @@ function display_error_form($http_code, $desc) {
global $config, $g;
$g['theme'] = $config['theme'];
if(isAjax()) {
echo "Error: {$http_code} Description: {$desc}";
printf(gettext('Error: %1$s Description: %2$s'), $http_code, $desc);
return;
}
@ -151,13 +151,13 @@ function display_login_form() {
if(isAjax()) {
if (isset($_POST['login'])) {
if($_SESSION['Logged_In'] <> "True") {
isset($_SESSION['Login_Error']) ? $login_error = $_SESSION['Login_Error'] : $login_error = "unknown reason";
echo "showajaxmessage('Invalid login ({$login_error}).');";
isset($_SESSION['Login_Error']) ? $login_error = $_SESSION['Login_Error'] : $login_error = gettext("unknown reason");
printf("showajaxmessage('" . gettext("Invalid login (%s).") . "')", $login_error);
}
if (file_exists("{$g['tmp_path']}/webconfigurator.lock")) {
// TODO: add the IP from the user who did lock the device
$whom = file_get_contents("{$g['tmp_path']}/webconfigurator.lock");
echo "showajaxmessage('This device is currently being maintained by: {$whom}.');";
printf("showajaxmessage('" . gettext("This device is currently being maintained by: %s.") . "');", $whom);
}
}
exit;
@ -178,14 +178,20 @@ if (empty($FilterIflist)) {
require_once('shaper.inc');
filter_generate_optcfg_array();
}
foreach ($FilterIflist as $iflist)
foreach ($FilterIflist as $iflist) {
if($iflist['ip'] == $http_host)
$local_ip = true;
if($config['virtualip'])
if($config['virtualip']['vip'])
foreach($config['virtualip']['vip'] as $vip)
if($iflist['ipv6'] == $http_host)
$local_ip = true;
}
if($config['virtualip']) {
if($config['virtualip']['vip']) {
foreach($config['virtualip']['vip'] as $vip) {
if($vip['subnet'] == $http_host)
$local_ip = true;
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
@ -233,14 +239,14 @@ if($config['virtualip'])
<div id="inputerrors"><?=$_SESSION['Login_Error'];?></div>
<p>
<span style="text-align:left">
<?=gettext("Username"); ?>:<br>
<?=gettext("Username:"); ?><br>
<input onclick="clearError();" onchange="clearError();" id="usernamefld" type="text" name="usernamefld" class="formfld user" tabindex="1" />
</span>
</p>
<br>
<p>
<span style="text-align:left">
<?=gettext("Password"); ?>: <br>
<?=gettext("Password:"); ?> <br>
<input onclick="clearError();" onchange="clearError();" id="passwordfld" type="password" name="passwordfld" class="formfld pwd" tabindex="2" />
</span>
</p>
@ -262,4 +268,4 @@ if($config['virtualip'])
<?php
} // end function
?>
?>

View File

@ -357,7 +357,7 @@ EOD;
captiveportal_init_radius_servers();
if ($g['booting'])
echo "done\n";
printf(gettext("done%s"), "\n");
} else {
killbypid("{$g['varrun_path']}/lighty-CaptivePortal.pid");
@ -1281,7 +1281,7 @@ function captiveportal_write_elements() {
foreach ($config['captiveportal']['element'] as $data) {
$fd = @fopen($g['captiveportal_element_path'] . '/' . $data['name'], "wb");
if (!$fd) {
printf("Error: cannot open '{$data['name']}' in captiveportal_write_elements().\n");
printf(gettext("Error: cannot open '%s' in captiveportal_write_elements()%s"), $data['name'], "\n");
return 1;
}
$decoded = base64_decode($data['content']);

View File

@ -98,7 +98,7 @@ Class CmdCHAIN {
$ignore_return_text = $cmd['ignore_return_text'];
// Should we perform verbose debugging?
if($this->is_debugging == true) {
log_error("CmdCHAIN is executing -> {$cmd_title} - {$command}");
log_error(sprintf(gettext('CmdCHAIN is executing -> %1$s - %2$s'), $cmd_title, $command));
usleep(100); // give network stack time to deliver network syslog message
}
// Execute command
@ -106,9 +106,9 @@ Class CmdCHAIN {
if($this->ignore_return_text == true)
continue;
if(intval($status) <> 0) {
log_error("{$cmd_title} failed with return code -> {$status}. The command was {$command}");
log_error(sprintf(gettext('%1$s failed with return code -> %2$s. The command was %3$s'), $cmd_title, $status, $command));
if($this->halt_on_errors == true)
return("{$cmd_title} failed with return code -> {$status}. The command was {$command}");
return(sprintf(gettext('%1$s failed with return code -> %2$s. The command was %3$s'), $cmd_title, $status, $command));
}
}
return;
@ -129,4 +129,4 @@ $cmdchain->clear(); // clears the previous added entries
*/
?>
?>

View File

@ -55,10 +55,10 @@ function set_networking_interfaces_ports() {
if($avail < $g['minimum_ram_warning']) {
echo "\n\n\n";
echo "DANGER! WARNING! ACHTUNG!\n\n";
echo "{$g['product_name']} requires *AT LEAST* {$g['minimum_ram_warning_text']} RAM to function correctly.\n";
echo "Only ({$avail}) MB RAM has been detected.\n";
echo "\nPress ENTER to continue. ";
echo gettext("DANGER! WARNING! ACHTUNG!") . "\n\n";
printf(gettext("%s requires *AT LEAST* %s RAM to function correctly.%s"), $g['product_name'], $g['minimum_ram_warning_text'], "\n");
printf(gettext("Only (%s) MB RAM has been detected.%s"), $avail, "\n");
echo "\n" . gettext("Press ENTER to continue.") . " ";
fgets($fp);
echo "\n";
}
@ -80,7 +80,7 @@ Valid interfaces are:
EOD;
if(!is_array($iflist)) {
echo "No interfaces found!\n";
echo gettext("No interfaces found!") . "\n";
$iflist = array();
} else {
foreach ($iflist as $iface => $ifa) {
@ -178,7 +178,7 @@ EOD;
if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
echo "\n\nVLAN interfaces:\n\n";
echo "\n\n" . gettext("VLAN interfaces:") . "\n\n";
foreach ($config['vlans']['vlan'] as $vlan) {
echo sprintf("% -16s%s\n", "{$vlan['if']}_vlan{$vlan['tag']}",
@ -204,7 +204,7 @@ hitting 'a' to initiate auto detection.
EOD;
do {
echo "\nEnter the WAN interface name or 'a' for auto-detection: ";
echo "\n" . gettext("Enter the WAN interface name or 'a' for auto-detection:") . " ";
$wanif = chop(fgets($fp));
if ($wanif === "") {
return;
@ -212,16 +212,16 @@ EOD;
if ($wanif === "a")
$wanif = autodetect_interface("WAN", $fp);
else if (!array_key_exists($wanif, $iflist)) {
echo "\nInvalid interface name '{$wanif}'\n";
printf(gettext("%sInvalid interface name '%s'%s"), "\n", $wanif, "\n");
unset($wanif);
continue;
}
} while (!$wanif);
do {
echo "\nEnter the LAN interface name or 'a' for auto-detection \n" .
"NOTE: this enables full Firewalling/NAT mode.\n" .
"(or nothing if finished): ";
printf(gettext("%sEnter the LAN interface name or 'a' for auto-detection %s" .
"NOTE: this enables full Firewalling/NAT mode.%s" .
"(or nothing if finished):%s"), "\n", "\n", "\n", " ");
$lanif = chop(fgets($fp));
@ -241,7 +241,7 @@ EOD;
if ($lanif === "a")
$lanif = autodetect_interface("LAN", $fp);
else if (!array_key_exists($lanif, $iflist)) {
echo "\nInvalid interface name '{$lanif}'\n";
printf(gettext("%sInvalid interface name '%s'%s)", "\n", $lanif), "\n");
unset($lanif);
continue;
}
@ -258,22 +258,22 @@ EOD;
$i1 = $i + 1;
if($config['interfaces']['opt' . $i1]['descr'])
echo "\nOptional interface {$i1} description found: {$config['interfaces']['opt' . $i1]['descr']}";
printf(gettext("%sOptional interface %s description found: %s"), "\n", $i1, $config['interfaces']['opt' . $i1]['descr']);
echo "\nEnter the Optional {$i1} interface name or 'a' for auto-detection\n" .
"(or nothing if finished): ";
printf(gettext("%sEnter the Optional %s{$i1} interface name or 'a' for auto-detection%s" .
"(or nothing if finished):%s"), "\n", $i1, "\n", " ");
$optif[$i] = chop(fgets($fp));
if ($optif[$i]) {
if ($optif[$i] === "a") {
$ad = autodetect_interface("Optional " . $i1, $fp);
$ad = autodetect_interface(gettext("Optional") . " " . $i1, $fp);
if ($ad)
$optif[$i] = $ad;
else
unset($optif[$i]);
} else if (!array_key_exists($optif[$i], $iflist)) {
echo "\nInvalid interface name '{$optif[$i]}'\n";
printf(gettext("%sInvalid interface name '%s'%s"), "\n", $optif[$i], "\n");
unset($optif[$i]);
continue;
}
@ -301,7 +301,7 @@ EOD;
}
}
echo "\nThe interfaces will be assigned as follows: \n\n";
echo "\n" . gettext("The interfaces will be assigned as follows:") . "\n\n";
echo "WAN -> " . $wanif . "\n";
if ($lanif != "")
@ -413,20 +413,20 @@ EODD;
for (; isset($config['interfaces']['opt' . ($i+1)]); $i++)
unset($config['interfaces']['opt' . ($i+1)]);
echo "\nWriting configuration...";
printf(gettext("%sWriting configuration..."), "\n");
write_config();
echo "done.\n";
printf(gettext("done.%s"), "\n");
fclose($fp);
if($g['booting'])
return;
echo "One moment while we reload the settings...";
echo gettext("One moment while we reload the settings...");
$g['booting'] = false;
echo " done!\n";
echo gettext(" done!") . "\n";
touch("{$g['tmp_path']}/assign_complete");
@ -446,12 +446,12 @@ EOD;
foreach ($iflist_prev as $ifn => $ifa) {
if (!$ifa['up'] && $iflist[$ifn]['up']) {
echo "Detected link-up on interface {$ifn}.\n";
printf(gettext("Detected link-up on interface %s.%s"), $ifn, "\n");
return $ifn;
}
}
echo "No link-up detected.\n";
printf(gettext("No link-up detected.%s"), "\n");
return null;
}
@ -490,9 +490,9 @@ EOD;
while (1) {
$vlan = array();
echo "\n\nVLAN Capable interfaces:\n\n";
echo "\n\n" . gettext("VLAN Capable interfaces:") . "\n\n";
if(!is_array($iflist)) {
echo "No interfaces found!\n";
echo gettext("No interfaces found!") . "\n";
} else {
$vlan_capable=0;
foreach ($iflist as $iface => $ifa) {
@ -505,28 +505,28 @@ EOD;
}
if($vlan_capable == 0) {
echo "No VLAN capable interfaces detected.\n";
echo gettext("No VLAN capable interfaces detected.") . "\n";
return;
}
echo "\nEnter the parent interface name for the new VLAN (or nothing if finished): ";
echo "\n" . gettext("Enter the parent interface name for the new VLAN (or nothing if finished):") . " ";
$vlan['if'] = chop(fgets($fp));
if ($vlan['if']) {
if (!array_key_exists($vlan['if'], $iflist) or
!is_jumbo_capable($vlan['if'])) {
echo "\nInvalid interface name '{$vlan['if']}'\n";
printf(gettext("%sInvalid interface name '%s'%s"), "\n", $vlan['if'], "\n");
continue;
}
} else {
break;
}
echo "Enter the VLAN tag (1-4094): ";
echo gettext("Enter the VLAN tag (1-4094):") . " ";
$vlan['tag'] = chop(fgets($fp));
$vlan['vlanif'] = "{$vlan['if']}_vlan{$vlan['tag']}";
if (!is_numericint($vlan['tag']) || ($vlan['tag'] < 1) || ($vlan['tag'] > 4094)) {
echo "\nInvalid VLAN tag '{$vlan['tag']}'\n";
printf(gettext("%sInvalid VLAN tag '%s'%s"), "\n", $vlan['tag'], "\n");
continue;
}

View File

@ -54,6 +54,7 @@ else
require_once('config.lib.inc');
require_once("notices.inc");
require_once("util.inc");
require_once("IPv6.inc");
if(file_exists("/cf/conf/use_xmlreader"))
require_once("xmlreader.inc");
else

View File

@ -67,6 +67,8 @@ require_once('config.lib.inc');
if($g['booting']) echo ".";
require_once("util.inc");
if($g['booting']) echo ".";
require_once("IPv6.inc");
if($g['booting']) echo ".";
if(file_exists("/cf/conf/use_xmlreader"))
require_once("xmlreader.inc");
else
@ -95,10 +97,10 @@ if($g['booting'] && file_exists("/cf/conf/config.xml")) {
if(stristr($config_contents, "<m0n0wall>") == true) {
if($g['booting']) echo ".";
/* user has just upgraded to m0n0wall, replace root xml tags */
log_error("Upgrading m0n0wall configuration to pfSense... ");
log_error(gettext("Upgrading m0n0wall configuration to pfSense... "));
$config_contents = str_replace("m0n0wall","pfsense", $config_contents);
if (!config_validate("{$g['conf_path']}/config.xml"))
log_error("ERROR! Could not convert m0n0wall -> pfsense in config.xml");
log_error(gettext("ERROR! Could not convert m0n0wall -> pfsense in config.xml"));
conf_mount_rw();
$fd = fopen("/cf/conf/config.xml", "w");
fwrite($fd, $config_contents);
@ -128,9 +130,10 @@ else if ($g['booting'] and !file_exists($g['cf_conf_path'] . "/config.xml") ) {
}
}
$cfgfstype = "msdosfs";
echo "CDROM build\n";
echo " CFG: {$cfgpartition}\n";
echo " TYPE: {$cfgfstype}\n";
echo gettext("CDROM build") . "\n";
echo " " . gettext("CFG:") . " {$cfgpartition}\n";
echo " " . gettext("CFG:") . " {$cfgpartition}\n";
echo " " . gettext("TYPE:") . " {$cfgfstype}\n";
} else {
if($g['booting']) echo ".";
/* probe kernel known disks until we find one with config.xml */
@ -145,7 +148,7 @@ else if ($g['booting'] and !file_exists($g['cf_conf_path'] . "/config.xml") ) {
$cfgdevice = $mountdisk;
$cfgpartition = $cfgdevice . "a";
$cfgfstype = "ufs";
echo "Found configuration on $cfgdevice.\n";
printf(gettext("Found configuration on %s.%s"), $cfgdevice, "\n");
}
mwexec("/sbin/umount -f {$g['cf_path']}");
@ -160,7 +163,7 @@ else if ($g['booting'] and !file_exists($g['cf_conf_path'] . "/config.xml") ) {
$cfgdevice = $mountdisk;
$cfgpartition = $cfgdevice . "d";
$cfgfstype = "ufs";
echo "Found configuration on $cfgdevice.\n";
printf(gettext("Found configuration on %s.%s"), $cfgdevice, "\n");
}
mwexec("/sbin/umount -f {$g['cf_path']}");
@ -174,11 +177,11 @@ else if ($g['booting'] and !file_exists($g['cf_conf_path'] . "/config.xml") ) {
if (!$cfgdevice) {
$last_backup = discover_last_backup();
if($last_backup) {
log_error("No config.xml found, attempting last known config restore.");
file_notice("config.xml", "No config.xml found, attempting last known config restore.", "pfSenseConfigurator", "");
log_error(gettext("No config.xml found, attempting last known config restore."));
file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", "");
restore_backup("/cf/conf/backup/{$last_backup}");
} else {
log_error("No config.xml or config backups found, resetting to factory defaults.");
log_error(gettext("No config.xml or config backups found, resetting to factory defaults."));
restore_backup('/conf.default/config.xml');
}
}
@ -218,4 +221,4 @@ if($config_parsed == true) {
}
}
?>
?>

View File

@ -76,10 +76,10 @@ function encrypted_configxml() {
fwrite($fd, $data);
fclose($fd);
exec("/bin/mv {$g['conf_path']}/config.xml.tmp {$g['conf_path']}/config.xml");
echo "\nConfig.xml unlocked.\n";
echo "\n" . gettext("Config.xml unlocked.") . "\n";
fclose($fp);
} else {
echo "\nInvalid password entered. Please try again.\n";
echo "\n" . gettext("Invalid password entered. Please try again.") . "\n";
}
}
}
@ -102,12 +102,12 @@ function parse_config($parse = false) {
if (!file_exists("{$g['conf_path']}/config.xml") || filesize("{$g['conf_path']}/config.xml") == 0) {
$last_backup = discover_last_backup();
if($last_backup) {
log_error("No config.xml found, attempting last known config restore.");
file_notice("config.xml", "No config.xml found, attempting last known config restore.", "pfSenseConfigurator", "");
log_error(gettext("No config.xml found, attempting last known config restore."));
file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", "");
restore_backup("{$g['conf_path']}/backup/{$last_backup}");
} else {
unlock($lockkey);
die("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup.");
die(gettext("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup."));
}
}
@ -135,9 +135,9 @@ function parse_config($parse = false) {
if ($last_backup)
restore_backup("/cf/conf/backup/{$last_backup}");
else {
log_error("Could not restore config.xml.");
log_error(gettext("Could not restore config.xml."));
unlock($lockkey);
die("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup.");
die(gettext("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup."));
}
}
$config = parse_xml_config($g['conf_path'] . '/config.xml', array($g['xml_rootobj'], 'pfsense'));
@ -207,8 +207,8 @@ function restore_backup($file) {
unlink_if_exists("{$g['tmp_path']}/config.cache");
copy("$file","/cf/conf/config.xml");
disable_security_checks();
log_error("{$g['product_name']} is restoring the configuration $file");
file_notice("config.xml", "{$g['product_name']} is restoring the configuration $file", "{$g['product_name']}Configurator", "");
log_error(sprintf(gettext('%1$s is restoring the configuration %2$s'), $g['product_name'], $file));
file_notice("config.xml", sprintf(gettext('%1$s is restoring the configuration %2$s'), $g['product_name'], $file), "pfSenseConfigurator", "");
conf_mount_ro();
}
}
@ -230,29 +230,29 @@ function parse_config_bootup() {
if ($g['booting']) {
if (strstr($g['platform'], "cdrom")) {
/* try copying the default config. to the floppy */
echo "Resetting factory defaults...\n";
echo gettext("Resetting factory defaults...") . "\n";
reset_factory_defaults(true);
if (!file_exists("{$g['conf_path']}/config.xml")) {
echo "No XML configuration file found - using factory defaults.\n";
echo "Make sure that the configuration floppy disk with the conf/config.xml\n";
echo "file is inserted. If it isn't, your configuration changes will be lost\n";
echo "on reboot.\n";
echo gettext("No XML configuration file found - using factory defaults.\n" .
"Make sure that the configuration floppy disk with the conf/config.xml\n" .
"file is inserted. If it isn't, your configuration changes will be lost\n" .
"on reboot.\n");
}
} else {
$last_backup = discover_last_backup();
if($last_backup) {
log_error("No config.xml found, attempting last known config restore.");
file_notice("config.xml", "No config.xml found, attempting last known config restore.", "pfSenseConfigurator", "");
file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", "");
restore_backup("/cf/conf/backup/{$last_backup}");
}
if(!file_exists("{$g['conf_path']}/config.xml")) {
echo "XML configuration file not found. {$g['product_name']} cannot continue booting.\n";
echo sprintf(gettext("XML configuration file not found. %s cannot continue booting."), $g['product_name']) . "\n";
unlock($lockkey);
mwexec("/sbin/halt");
exit;
}
log_error("Last known config found and restored. Please double check your configuration file for accuracy.");
file_notice("config.xml", "Last known config found and restored. Please double check your configuration file for accuracy.", "pfSenseConfigurator", "");
file_notice("config.xml", gettext("Last known config found and restored. Please double check your configuration file for accuracy."), "pfSenseConfigurator", "");
}
} else {
unlock($lockkey);
@ -263,12 +263,12 @@ function parse_config_bootup() {
if (filesize("{$g['conf_path']}/config.xml") == 0) {
$last_backup = discover_last_backup();
if($last_backup) {
log_error("No config.xml found, attempting last known config restore.");
file_notice("config.xml", "No config.xml found, attempting last known config restore.", "pfSenseConfigurator", "");
log_error(gettext("No config.xml found, attempting last known config restore."));
file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", "");
restore_backup("{$g['conf_path']}/backup/{$last_backup}");
} else {
unlock($lockkey);
die("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup.");
die(gettext("Config.xml is corrupted and is 0 bytes. Could not restore a previous backup."));
}
}
unlock($lockkey);
@ -314,7 +314,7 @@ function conf_mount_rw() {
$status = mwexec("/sbin/mount -u -w -o sync,noatime {$g['cf_path']}");
if($status <> 0) {
if($g['booting'])
echo "Disk is dirty. Running fsck -y\n";
echo gettext("Disk is dirty. Running fsck -y") . "\n";
mwexec("/sbin/fsck -y {$g['cf_path']}");
$status = mwexec("/sbin/mount -u -w -o sync,noatime {$g['cf_path']}");
}
@ -325,7 +325,7 @@ function conf_mount_rw() {
$status = mwexec("/sbin/mount -u -w -o sync,noatime /");
/* we could not mount this correctly. kick off fsck */
if($status <> 0) {
log_error("File system is dirty. Launching FSCK for /");
log_error(gettext("File system is dirty. Launching FSCK for /"));
mwexec("/sbin/fsck -y /");
$status = mwexec("/sbin/mount -u -w -o sync,noatime /");
}
@ -376,7 +376,7 @@ function conf_mount_ro() {
function convert_config() {
global $config, $g;
$now = date("H:i:s");
log_error("Start Configuration upgrade at $now, set execution timeout to 15 minutes");
log_error(sprintf(gettext("Start Configuration upgrade at %s, set execution timeout to 15 minutes"), $now));
//ini_set("max_execution_time", "900");
/* special case upgrades */
@ -386,8 +386,8 @@ function convert_config() {
if(stristr($config['cron']['item'][$x]['command'], "rc.update_bogons.sh")) {
if($config['cron']['item'][$x]['hour'] == "*" ) {
$config['cron']['item'][$x]['hour'] = "3";
write_config("Updated bogon update frequency to 3am");
log_error("Updated bogon update frequency to 3am");
write_config(gettext("Updated bogon update frequency to 3am"));
log_error(gettext("Updated bogon update frequency to 3am"));
}
}
}
@ -417,10 +417,10 @@ function convert_config() {
}
$now = date("H:i:s");
log_error("Ended Configuration upgrade at $now");
log_error(sprintf(gettext("Ended Configuration upgrade at %s"), $now));
if ($prev_version != $config['version'])
write_config("Upgraded config version level from {$prev_version} to {$config['version']}");
write_config(sprintf(gettext('Upgraded config version level from %1$s to %2$s'), $prev_version, $config['version']));
}
/****f* config/safe_write_file
@ -509,7 +509,7 @@ function write_config($desc="Unknown", $backup = true) {
/* Log the running script so it's not entirely unlogged what changed */
if ($desc == "Unknown")
$desc = "{$_SERVER['SCRIPT_NAME']} made unknown change";
$desc = sprintf(gettext("%s made unknown change"), $_SERVER['SCRIPT_NAME']);
$config['revision']['description'] = "{$username}: " . $desc;
$config['revision']['username'] = $username;
@ -522,9 +522,9 @@ function write_config($desc="Unknown", $backup = true) {
/* write new configuration */
if (!safe_write_file("{$g['cf_conf_path']}/config.xml", $xmlconfig, false)) {
log_error("WARNING: Config contents could not be save. Could not open file!");
log_error(gettext("WARNING: Config contents could not be save. Could not open file!"));
unlock($lockkey);
file_notice("config.xml", "Unable to open {$g['cf_conf_path']}/config.xml for writing in write_config()\n");
file_notice("config.xml", sprintf(gettext("Unable to open %s/config.xml for writing in write_config()%s"), $g['cf_conf_path'], "\n"));
return -1;
}
@ -633,7 +633,7 @@ function config_restore($conffile) {
conf_mount_ro();
write_config("Reverted to " . array_pop(explode("/", $conffile)) . ".", false);
write_config(gettext("Reverted to") . " " . array_pop(explode("/", $conffile)) . ".", false);
return 0;
}
@ -648,9 +648,9 @@ function config_install($conffile) {
return 1;
if($g['booting'] == true)
echo "Installing configuration...\n";
echo gettext("Installing configuration...") . "\n";
else
log_error("Installing configuration ....");
log_error(gettext("Installing configuration ...."));
conf_mount_rw();
$lockkey = lock('config', LOCK_EX);
@ -701,13 +701,13 @@ function config_validate($conffile) {
$xml_parser = xml_parser_create();
if (!($fp = fopen($conffile, "r"))) {
$xmlerr = "XML error: unable to open file";
$xmlerr = gettext("XML error: unable to open file");
return false;
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
$xmlerr = sprintf("%s at line %d",
$xmlerr = sprintf(gettext('%1$s at line %2$d'),
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser));
return false;
@ -753,9 +753,9 @@ function cleanup_backupcache($revisions = 30, $lock = false) {
echo ".";
$newxml = parse_xml_config($backup, array($g['xml_rootobj'], 'pfsense'));
if($newxml == "-1") {
log_error("The backup cache file $backup is corrupted. Unlinking.");
log_error(sprintf(gettext("The backup cache file %s is corrupted. Unlinking."), $backup));
unlink($backup);
log_error("The backup cache file $backup is corrupted. Unlinking.");
log_error(sprintf(gettext("The backup cache file %s is corrupted. Unlinking."), $backup));
continue;
}
if($newxml['revision']['description'] == "")

View File

@ -19,6 +19,7 @@
* - OpenDNS (opendns.com)
* - Namecheap (namecheap.com)
* - HE.net (dns.he.net)
* - HE.net Tunnelbroker IP update (ipv4.tunnelbroker.net)
* +----------------------------------------------------+
* Requirements:
* - PHP version 4.0.2 or higher with CURL Library
@ -51,6 +52,7 @@
* OpenDNS - Last Tested: 4 August 2008
* Namecheap - Last Tested: 31 August 2010
* HE.net - Last Tested: NEVER
* HE.net Tunnel - Last Tested: 28 June 2011
* +====================================================+
*
* @author E.Kristensen
@ -160,6 +162,9 @@
case 'he-net':
$this->_update();
break;
case 'he-net-tunnelbroker':
$this->_update();
break;
default:
$this->_error(6);
break;
@ -394,6 +399,14 @@
curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsHost . ':' . $this->_dnsPass);
curl_setopt($ch, CURLOPT_URL, $server . 'hostname=' . $this->_dnsHost);
break;
case 'he-net-tunnelbroker':
$needsIP = FALSE;
log_error("HE.net Tunnelbroker: DNS update() starting.");
$server = "https://ipv4.tunnelbroker.net/ipv4_end.php?";
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser . ':' . $this->_dnsPass);
curl_setopt($ch, CURLOPT_URL, $server . 'tid=' . $this->_dnsHost);
break;
default:
break;
}
@ -745,6 +758,33 @@
$this->_debug($data);
}
break;
case 'he-net-tunnelbroker':
/*
-ERROR: Missing parameter(s).
-ERROR: Invalid API key or password
-ERROR: Tunnel not found
-ERROR: Another tunnel exists for this IP.
-ERROR: This tunnel is already associated with this IP address
+OK: Tunnel endpoint updated to: x.x.x.x
*/
if (preg_match("/Missing parameter/i", $data)) {
$status = "phpDynDNS: (Error) Bad Request - Missing/Invalid Parameters.";
} else if (preg_match('/Tunnel not found/i', $data)) {
$status = "phpDynDNS: (Error) Bad Request - Invalid Tunnel ID.";
} else if (preg_match('/Invalid API key or password/i', $data)) {
$status = "phpDynDNS: (Error) Invalid username or password.";
} else if (preg_match('/OK:/i', $data)) {
$status = "phpDynDNS: (Success) IP Address Updated Successfully!";
$successful_update = true;
} else if (preg_match('/This tunnel is already associated with this IP address/i', $data)) {
$status = "phpDynDNS: (Success) No Change In IP Address.";
$successful_update = true;
} else {
$status = "phpDynDNS: (Unknown Response)";
log_error("phpDynDNS: PAYLOAD: {$data}");
$this->_debug($data);
}
break;
}
if($successful_update == true) {

View File

@ -46,7 +46,7 @@ function easyrule_find_rule_interface($int) {
if ($config['pptpd']['mode'] == "server")
$iflist['pptp'] = "PPTP VPN";
if (is_pppoe_server_enabled() && have_ruleint_access("pppoe"))
if ($config['pppoe']['mode'] == "server")
$iflist['pppoe'] = "PPPoE VPN";
if ($config['l2tp']['mode'] == "server")
@ -113,7 +113,7 @@ function easyrule_block_rule_create($int = 'wan') {
$filterent['interface'] = $int;
$filterent['source']['address'] = $blockaliasname . strtoupper($int);
$filterent['destination']['any'] = '';
$filterent['descr'] = "Easy Rule: Blocked from Firewall Log View";
$filterent['descr'] = gettext("Easy Rule: Blocked from Firewall Log View");
array_splice($a_filter, 0, 0, array($filterent));
@ -162,15 +162,15 @@ function easyrule_block_alias_add($host, $int = 'wan') {
$alias['descr'] = $a_aliases[$id]['descr'];
$alias['address'] = $a_aliases[$id]['address'] . ' ' . $host . '/32';
$alias['detail'] = $a_aliases[$id]['detail'] . 'Entry added ' . date('r') . '||';
$alias['detail'] = $a_aliases[$id]['detail'] . gettext('Entry added') . ' ' . date('r') . '||';
} else {
/* Create a new alias with all the proper information */
$alias['name'] = $blockaliasname . strtoupper($int);
$alias['type'] = 'network';
$alias['descr'] = "Hosts blocked from Firewall Log view";
$alias['descr'] = gettext("Hosts blocked from Firewall Log view");
$alias['address'] = $host . '/32';
$alias['detail'] = 'Entry added ' . date('r') . '||';
$alias['detail'] = gettext('Entry added') . ' ' . date('r') . '||';
}
/* Replace the old alias if needed, otherwise tack it on the end */
@ -230,7 +230,7 @@ function easyrule_block_host_add($host, $int = 'wan') {
}
}
function easyrule_pass_rule_add($int, $proto, $srchost, $dsthost, $dstport) {
function easyrule_pass_rule_add($int, $proto, $srchost, $dsthost, $dstport, $ipproto) {
global $config;
/* No rules, start a new array */
@ -245,7 +245,8 @@ function easyrule_pass_rule_add($int, $proto, $srchost, $dsthost, $dstport) {
$filterent = array();
$filterent['type'] = 'pass';
$filterent['interface'] = $int;
$filterent['descr'] = "Easy Rule: Passed from Firewall Log View";
$filterent['ipprotocol'] = $ipproto;
$filterent['descr'] = gettext("Easy Rule: Passed from Firewall Log View");
if ($proto != "any")
$filterent['protocol'] = $proto;
@ -272,63 +273,64 @@ function easyrule_pass_rule_add($int, $proto, $srchost, $dsthost, $dstport) {
}
}
function easyrule_parse_block($int, $src) {
function easyrule_parse_block($int, $src, $ipproto) {
$filterent['ipprotocol'] = $ipproto;
if (!empty($src) && !empty($int)) {
if (!is_ipaddr($src)) {
return "Tried to block invalid IP: " . htmlspecialchars($src);
return gettext("Tried to block invalid IP:") . ' ' . htmlspecialchars($src);
}
$int = easyrule_find_rule_interface($int);
if ($int === false) {
return "Invalid interface for block rule: " . htmlspecialchars($int);
return gettext("Invalid interface for block rule:") . ' ' . htmlspecialchars($int);
}
if (easyrule_block_host_add($src, $int)) {
return "Host added successfully";
return gettext("Host added successfully");
} else {
return "Failed to create block rule, alias, or add host.";
return gettext("Failed to create block rule, alias, or add host.");
}
} else {
return "Tried to block but had no host IP or interface";
return gettext("Tried to block but had no host IP or interface");
}
return "Unknown block error.";
return gettext("Unknown block error.");
}
function easyrule_parse_pass($int, $proto, $src, $dst, $dstport = 0) {
function easyrule_parse_pass($int, $proto, $src, $dst, $dstport = 0, $ipproto = inet) {
/* Check for valid int, srchost, dsthost, dstport, and proto */
global $protocols_with_ports;
if (!empty($int) && !empty($proto) && !empty($src) && !empty($dst)) {
$int = easyrule_find_rule_interface($int);
if ($int === false) {
return "Invalid interface for pass rule: " . htmlspecialchars($int);
return gettext("Invalid interface for pass rule:") . ' ' . htmlspecialchars($int);
}
if (getprotobyname($proto) == -1) {
return "Invalid protocol for pass rule: " . htmlspecialchars($proto);
return gettext("Invalid protocol for pass rule:") . ' ' . htmlspecialchars($proto);
}
if (!is_ipaddr($src)) {
return "Tried to pass invalid source IP: " . htmlspecialchars($src);
return gettext("Tried to pass invalid source IP:") . ' ' . htmlspecialchars($src);
}
if (!is_ipaddr($dst)) {
return "Tried to pass invalid destination IP: " . htmlspecialchars($dst);
return gettext("Tried to pass invalid destination IP:") . ' ' . htmlspecialchars($dst);
}
if (in_array($proto, $protocols_with_ports)) {
if (empty($dstport)) {
return "Missing destination port: " . htmlspecialchars($dstport);
return gettext("Missing destination port:") . ' ' . htmlspecialchars($dstport);
}
if (!is_port($dstport)) {
return "Tried to pass invalid destination port: " . htmlspecialchars($dstport);
return gettext("Tried to pass invalid destination port:") . ' ' . htmlspecialchars($dstport);
}
} else {
$dstport = 0;
}
/* Should have valid input... */
if (easyrule_pass_rule_add($int, $proto, $src, $dst, $dstport)) {
return "Successfully added pass rule!";
if (easyrule_pass_rule_add($int, $proto, $src, $dst, $dstport, $ipproto)) {
return gettext("Successfully added pass rule!");
} else {
return "Failed to add pass rule.";
return gettext("Failed to add pass rule.");
}
} else {
return "Missing parameters for pass rule.";
return gettext("Missing parameters for pass rule.");
}
return "Unknown pass error.";
return gettext("Unknown pass error.");
}
?>
?>

View File

@ -192,7 +192,7 @@ function filter_configure_sync() {
filter_pflog_start();
update_filter_reload_status("Initializing");
update_filter_reload_status(gettext("Initializing"));
/* invalidate interface cache */
get_interface_arr(true);
@ -204,45 +204,45 @@ function filter_configure_sync() {
/* Get interface list to work with. */
filter_generate_optcfg_array();
if($g['booting'] == true)
echo "Configuring firewall";
echo gettext("Configuring firewall");
/* generate aliases */
if($g['booting'] == true)
echo ".";
update_filter_reload_status("Creating aliases");
update_filter_reload_status(gettext("Creating aliases"));
$aliases = filter_generate_aliases();
$gateways = filter_generate_gateways();
if($g['booting'] == true)
echo ".";
update_filter_reload_status("Generating NAT rules");
update_filter_reload_status(gettext("Generating NAT rules"));
/* generate nat rules */
$natrules = filter_nat_rules_generate();
if($g['booting'] == true)
echo ".";
update_filter_reload_status("Generating filter rules");
update_filter_reload_status(gettext("Generating filter rules"));
/* generate pfctl rules */
$pfrules = filter_rules_generate();
/* generate altq, limiter */
if($g['booting'] == true)
echo ".";
update_filter_reload_status("Generating ALTQ queues");
update_filter_reload_status(gettext("Generating ALTQ queues"));
$altq_queues = filter_generate_altq_queues();
update_filter_reload_status("Generating Limiter rules");
update_filter_reload_status(gettext("Generating Limiter rules"));
$dummynet_rules = filter_generate_dummynet_rules();
update_filter_reload_status("Generating Layer7 rules");
update_filter_reload_status(gettext("Generating Layer7 rules"));
generate_layer7_files();
if($g['booting'] == true)
echo ".";
update_filter_reload_status("Loading filter rules");
update_filter_reload_status(gettext("Loading filter rules"));
/* enable pf if we need to, otherwise disable */
if(!isset ($config['system']['disablefilter'])) {
mwexec("/sbin/pfctl -e", true);
} else {
mwexec("/sbin/pfctl -d");
unlink_if_exists("{$g['tmp_path']}/filter_loading");
update_filter_reload_status("Filter is disabled. Not loading rules.");
update_filter_reload_status(gettext("Filter is disabled. Not loading rules."));
if($g['booting'] == true)
echo "done.\n";
echo gettext("done.") . "\n";
unlock($filterlck);
return;
}
@ -254,7 +254,7 @@ function filter_configure_sync() {
$rules = "";
$rules .= "{$aliases} \n";
$rules .= "{$gateways} \n";
update_filter_reload_status("Setting up logging information");
update_filter_reload_status(gettext("Setting up logging information"));
$rules .= filter_setup_logging_interfaces();
if($config['system']['optimization'] <> "") {
$rules .= "set optimization {$config['system']['optimization']}\n";
@ -285,7 +285,7 @@ function filter_configure_sync() {
$rules .= "\n";
$rules .= "set skip on pfsync0\n";
$rules .= "\n";
update_filter_reload_status("Setting up SCRUB information");
update_filter_reload_status(gettext("Setting up SCRUB information"));
$rules .= filter_generate_scrubing();
$rules .= "\n";
/* NOTE: Disabled until we catch up with dummynet changes. */
@ -331,11 +331,11 @@ function filter_configure_sync() {
$line_number = $line_error[1];
$line_split = file("{$g['tmp_path']}/rules.debug");
if(is_array($line_split))
$line_error = "The line in question reads [{$line_number}]: {$line_split[$line_number-1]}";
$line_error = sprintf(gettext('The line in question reads [%1$d]: %2$s'), $line_number, $line_split[$line_number-1]);
if($line_error and $line_number) {
file_notice("filter_load", "There were error(s) loading the rules: {$rules_error} {$line_error}", "Filter Reload", "");
file_notice("filter_load", sprintf(gettext('There were error(s) loading the rules: %1$s - %2$s'), $rules_error, $line_error), "Filter Reload", "");
log_error("There were error(s) loading the rules: {$rules_error} - {$line_error}");
update_filter_reload_status("There were error(s) loading the rules: {$rules_error} - {$line_error}");
update_filter_reload_status(sprintf(gettext('There were error(s) loading the rules: %1$s - %2$s'), $rules_error, $line_error));
unlock($filterlck);
return;
}
@ -344,12 +344,13 @@ function filter_configure_sync() {
exec("/sbin/pfctl -d");
exec("/sbin/pfctl -e");
exec("/sbin/pfctl -f {$g['tmp_path']}/rules.debug");
file_notice("pf_busy", "PF was wedged/busy and has been reset.", "pf_busy", "");
log_error("PF was wedged/busy and has been reset.");
$error_msg = gettext("PF was wedged/busy and has been reset.");
file_notice("pf_busy", $error_msg, "pf_busy", "");
log_error($error_msg);
}
}
update_filter_reload_status("Starting up layer7 daemon");
update_filter_reload_status(gettext("Starting up layer7 daemon"));
layer7_start_l7daemon();
if(!empty($filterdns)) {
@ -396,21 +397,21 @@ function filter_configure_sync() {
if($g['booting'] == true)
echo ".";
update_filter_reload_status("Processing down interface states");
update_filter_reload_status(gettext("Processing down interface states"));
filter_delete_states_for_down_gateways();
update_filter_reload_status("Running plugins");
update_filter_reload_status(gettext("Running plugins"));
if(is_dir("/usr/local/pkg/pf/")) {
/* process packager manager custom rules */
update_filter_reload_status("Running plugins (pf)");
update_filter_reload_status(gettext("Running plugins (pf)"));
run_plugins("/usr/local/pkg/pf/");
update_filter_reload_status("Plugins completed.");
update_filter_reload_status(gettext("Plugins completed."));
}
update_filter_reload_status("Done");
update_filter_reload_status(gettext("Done"));
if($g['booting'] == true)
echo "done.\n";
echo gettext("done.") . "\n";
unlock($filterlck);
return 0;
@ -628,7 +629,7 @@ function filter_generate_gateways() {
$rules = "# Gateways\n";
update_filter_reload_status("Creating gateway group item...");
update_filter_reload_status(gettext("Creating gateway group item..."));
/* Lookup Gateways to be used in filter rules once */
$GatewaysList = return_gateways_array();
@ -658,14 +659,14 @@ function filter_generate_gateways() {
$gatewayip = $member['gwip'];
if (($int <> "") && is_ipaddr($gatewayip)) {
if ($g['debug'])
log_error("Setting up route with {$gatewayip} om $int");
log_error(sprintf(gettext('Setting up route with %1$s on %2$s'), $gatewayip, $int));
if ($member['weight'] > 1) {
$routeto .= str_repeat("( {$int} {$gatewayip} ) ", $member['weight']);
} else
$routeto .= "( {$int} {$gatewayip} ) ";
$foundlb++;
} else
log_error("An error occurred while trying to find the interface got $gatewayip . The rule has not been added.");
log_error(sprintf(gettext("An error occurred while trying to find the interface got %s . The rule has not been added."), $gatewayip));
}
$route = "";
if ($foundlb > 0) {
@ -777,17 +778,21 @@ function filter_generate_optcfg_array() {
if (!does_interface_exist($oic['if']))
continue;
$oic['ip'] = get_interface_ip($if);
$oic['ipv6'] = get_interface_ipv6($if);
if(!is_ipaddr($oc['ipaddr']) && !empty($oc['ipaddr']))
$oic['type'] = $oc['ipaddr'];
$oic['sn'] = get_interface_subnet($if);
$oic['snv6'] = get_interface_subnetv6($if);
$oic['mtu'] = empty($oc['mtu']) ? 1500 : $oc['mtu'];
$oic['mss'] = empty($oc['mss']) ? '' : $oc['mss'];
$oic['descr'] = $ifdetail;
$oic['sa'] = gen_subnet($oic['ip'], $oic['sn']);
$oic['sav6'] = gen_subnetv6($oic['ipv6'], $oic['snv6']);
$oic['nonat'] = $oc['nonat'];
$oic['alias-address'] = $oc['alias-address'];
$oic['alias-subnet'] = $oc['alias-subnet'];
$oic['gateway'] = $oc['gateway'];
$oic['gatewayv6'] = $oc['gatewayv6'];
$oic['spoofcheck'] = "yes";
$oic['bridge'] = link_interface_to_bridge($if);
$FilterIflist[$if] = $oic;
@ -913,7 +918,7 @@ function filter_generate_reflection_nat($rule, &$route_table, $nat_ifs, $protoco
// Initialize natrules holder string
$natrules = "";
update_filter_reload_status("Creating reflection NAT rule for {$rule['descr']}...");
update_filter_reload_status(sprintf(gettext("Creating reflection NAT rule for %s..."), $rule['descr']));
/* TODO: Add this option to port forwards page. */
if(isset($rule['staticnatport'])) {
@ -967,7 +972,7 @@ function filter_generate_reflection($rule, $nordr, $rdr_ifs, $srcaddr, $dstaddr_
else
$reflectiontimeout = "2000";
update_filter_reload_status("Creating reflection rule for {$rule['descr']}...");
update_filter_reload_status(sprintf(gettext("Creating reflection rule for %s..."), $rule['descr']));
$rdr_if_list = implode(" ", $rdr_ifs);
if(count($rdr_ifs) > 1)
@ -1225,7 +1230,7 @@ function filter_nat_rules_generate() {
$natrules = "nat-anchor \"natearly/*\"\n";
$natrules .= "nat-anchor \"natrules/*\"\n\n";
update_filter_reload_status("Creating 1:1 rules...");
update_filter_reload_status(gettext("Creating 1:1 rules..."));
$reflection_txt = "";
$route_table = "";
@ -1289,13 +1294,42 @@ function filter_nat_rules_generate() {
$reflection_txt .= filter_generate_reflection_nat($rule, $route_table, $nat_if_list, "", $srcaddr, $srcip, $sn);
}
}
/* Add binat rules for Network Prefix translation */
if(is_array($config['nat']['npt'])) {
foreach ($config['nat']['npt'] as $rule) {
if (isset($rule['disabled']))
continue;
if (!$rule['interface'])
$natif = "wan";
else
$natif = $rule['interface'];
if (!isset($FilterIflist[$natif]))
continue;
$srcaddr = filter_generate_address($rule, 'source');
$dstaddr = filter_generate_address($rule, 'destination');
$srcaddr = trim($srcaddr);
$dstaddr = trim($dstaddr);
$natif = $FilterIflist[$natif]['descr'];
$natrules .= "binat on \${$natif} from {$srcaddr} to any -> {$dstaddr}\n";
$natrules .= "binat on \${$natif} from any to {$dstaddr} -> {$srcaddr}\n";
}
}
$natrules .= "\n# Outbound NAT rules\n";
/* outbound rules - advanced or standard */
if(isset($config['nat']['advancedoutbound']['enable'])) {
/* advanced outbound rules */
if(is_array($config['nat']['advancedoutbound']['rule'])) {
foreach ($config['nat']['advancedoutbound']['rule'] as $obent) {
update_filter_reload_status("Creating advanced outbound rule {$obent['descr']}");
update_filter_reload_status(sprintf(gettext("Creating advanced outbound rule %s"), $obent['descr']));
$src = alias_expand($obent['source']['network']);
if(!$src)
$src = $obent['source']['network'];
@ -1331,7 +1365,7 @@ function filter_nat_rules_generate() {
}
} else {
/* standard outbound rules (one for each interface) */
update_filter_reload_status("Creating outbound NAT rules");
update_filter_reload_status(gettext("Creating outbound NAT rules"));
$tonathosts = "";
$numberofnathosts = 0;
@ -1423,7 +1457,7 @@ function filter_nat_rules_generate() {
foreach ($FilterIflist as $if => $ifcfg) {
if (substr($ifcfg['if'], 0, 4) == "ovpn")
continue;
update_filter_reload_status("Creating outbound rules {$if} - ({$ifcfg['descr']})");
update_filter_reload_status(sprintf(gettext('Creating outbound rules %1$s - (%2$s)'), $if, $ifcfg['descr']));
if(interface_has_gateway($if)) {
$target = $ifcfg['ip'];
/* create outbound nat entries for all local networks */
@ -1441,7 +1475,7 @@ function filter_nat_rules_generate() {
$natrules .= "\n# Load balancing anchor\n";
$natrules .= "rdr-anchor \"relayd/*\"\n";
update_filter_reload_status("Setting up TFTP helper");
update_filter_reload_status(gettext("Setting up TFTP helper"));
$natrules .= "# TFTP proxy\n";
$natrules .= "rdr-anchor \"tftp-proxy/*\"\n";
@ -1481,7 +1515,7 @@ function filter_nat_rules_generate() {
$starting_localhost_port = 19000;
$natrules .= "# NAT Inbound Redirects\n";
foreach ($config['nat']['rule'] as $rule) {
update_filter_reload_status("Creating NAT rule {$rule['descr']}");
update_filter_reload_status(sprintf(gettext("Creating NAT rule %s"), $rule['descr']));
if(isset($rule['disabled']))
continue;
@ -1625,7 +1659,7 @@ function filter_nat_rules_generate() {
function filter_generate_user_rule_arr($rule) {
global $config;
update_filter_reload_status("Creating filter rule {$rule['descr']} ...");
update_filter_reload_status(sprintf(gettext("Creating filter rule %s ..."), $rule['descr']));
$ret = array();
$line = filter_generate_user_rule($rule);
$ret['rule'] = $line;
@ -1648,53 +1682,101 @@ function filter_generate_address(& $rule, $target = "source", $isnat = false) {
if(strstr($rule[$target]['network'], "opt")) {
$optmatch = "";
$matches = "";
/* check for opt$NUMip here */
if (preg_match("/opt([0-9]*)ip/", $rule[$target]['network'], $matches)) {
$src = $FilterIflist["opt{$matches[1]}"]['ip'];
if(!is_ipaddr($src))
return "";
} else if (preg_match("/opt([0-9]*)$/", $rule[$target]['network'], $optmatch)) {
$opt_ip = $FilterIflist["opt{$optmatch[1]}"]['ip'];
if(!is_ipaddr($opt_ip))
return "";
$src = $opt_ip . "/" .
$FilterIflist["opt{$optmatch[1]}"]['sn'];
if($rule['ipprotocol'] == "inet6") {
if(preg_match("/opt([0-9]*)$/", $rule[$target]['network'], $optmatch)) {
$opt_ip = $FilterIflist["opt{$optmatch[1]}"]['ipv6'];
if(!is_ipaddr($opt_ip))
return "";
$src = $opt_ip . "/" .
$FilterIflist["opt{$optmatch[1]}"]['snv6'];
/* check for opt$NUMip here */
} else if(preg_match("/opt([0-9]*)ip/", $rule[$target]['network'], $matches)) {
$src = $FilterIflist["opt{$matches[1]}"]['ipv6'];
if(!is_ipaddr($src))
return "";
}
if(isset($rule[$target]['not']))
$src = " !{$src}";
} else {
if(preg_match("/opt([0-9]*)$/", $rule[$target]['network'], $optmatch)) {
$opt_ip = $FilterIflist["opt{$optmatch[1]}"]['ip'];
if(!is_ipaddr($opt_ip))
return "";
$src = $opt_ip . "/" .
$FilterIflist["opt{$optmatch[1]}"]['sn'];
/* check for opt$NUMip here */
} else if(preg_match("/opt([0-9]*)ip/", $rule[$target]['network'], $matches)) {
$src = $FilterIflist["opt{$matches[1]}"]['ip'];
if(!is_ipaddr($src))
return "";
}
if(isset($rule[$target]['not']))
$src = " !{$src}";
}
if(isset($rule[$target]['not']))
$src = " !{$src}";
} else {
switch ($rule[$target]['network']) {
case 'wan':
$wansa = $FilterIflist['wan']['sa'];
$wansn = $FilterIflist['wan']['sn'];
$src = "{$wansa}/{$wansn}";
break;
case 'wanip':
$src = $FilterIflist["wan"]['ip'];
break;
case 'lanip':
$src = $FilterIflist["lan"]['ip'];
break;
case 'lan':
$lansa = $FilterIflist['lan']['sa'];
$lansn = $FilterIflist['lan']['sn'];
$src = "{$lansa}/{$lansn}";
break;
case 'pptp':
$pptp_subnets = ip_range_to_subnet_array($config['pptpd']['remoteip'], long2ip32(ip2long($config['pptpd']['remoteip'])+($config['pptpd']['n_pptp_units']-1)));
$src = "{ " . implode(" ", $pptp_subnets) . " }";
break;
case 'pppoe':
/* XXX: This needs to be fixed somehow! */
if (is_array($FilterIflist['pppoe'])) {
$pppoesa = gen_subnet($FilterIflist['pppoe'][0]['ip'], $FilterIflist['pppoe'][0]['sn']);
$pppoesn = $FilterIflist['pppoe'][0]['sn'];
$src = "{$pppoesa}/{$pppoesn}";
if($rule['ipprotocol'] == "inet6") {
switch ($rule[$target]['network']) {
case 'wan':
$wansa = $FilterIflist['wan']['sav6'];
$wansn = $FilterIflist['wan']['snv6'];
$src = "{$wansa}/{$wansn}";
break;
case 'wanip':
$src = $FilterIflist["wan"]['ipv6'];
break;
case 'lanip':
$src = $FilterIflist["lan"]['ipv6'];
break;
case 'lan':
$lansa = $FilterIflist['lan']['sav6'];
$lansn = $FilterIflist['lan']['snv6'];
$src = "{$lansa}/{$lansn}";
break;
case 'pptp':
$pptpsav6 = gen_subnetv6($FilterIflist['pptp']['sav6'], $FilterIflist['pptp']['snv6']);
$pptpsnv6 = $FilterIflist['pptp']['snv6'];
$src = "{$pptpsav6}/{$pptpsnv6}";
break;
case 'pppoe':
if (is_array($FilterIflist['pppoe'])) {
$pppoesav6 = gen_subnetv6($FilterIflist['pppoe'][0]['ipv6'], $FilterIflist['pppoe'][0]['snv6']);
$pppoesnv6 = $FilterIflist['pppoe'][0]['snv6'];
$src = "{$pppoesav6}/{$pppoesnv6}";
}
}
break;
} else {
switch ($rule[$target]['network']) {
case 'wan':
$wansa = $FilterIflist['wan']['sa'];
$wansn = $FilterIflist['wan']['sn'];
$src = "{$wansa}/{$wansn}";
break;
case 'wanip':
$src = $FilterIflist["wan"]['ip'];
break;
case 'lanip':
$src = $FilterIflist["lan"]['ip'];
break;
case 'lan':
$lansa = $FilterIflist['lan']['sa'];
$lansn = $FilterIflist['lan']['sn'];
$src = "{$lansa}/{$lansn}";
break;
case 'pptp':
$pptp_subnets = ip_range_to_subnet_array($config['pptpd']['remoteip'], long2ip32(ip2long($config['pptpd']['remoteip'])+($config['pptpd']['n_pptp_units']-1)));
$src = "{ " . implode(" ", $pptp_subnets) . " }";
$src = "{$pptpsa}/{$pptpsn}";
break;
case 'pppoe':
/* XXX: This needs to be fixed somehow! */
if (is_array($FilterIflist['pppoe'])) {
$pppoesa = gen_subnet($FilterIflist['pppoe'][0]['ip'], $FilterIflist['pppoe'][0]['sn']);
$pppoesn = $FilterIflist['pppoe'][0]['sn'];
$src = "{$pppoesa}/{$pppoesn}";
}
break;
}
}
if(isset($rule[$target]['not']))
$src = "!{$src}";
}
} else if($rule[$target]['address']) {
$expsrc = alias_expand($rule[$target]['address']);
@ -1711,7 +1793,7 @@ function filter_generate_address(& $rule, $target = "source", $isnat = false) {
$srcport = explode("-", $rule[$target]['port']);
$srcporta = alias_expand($srcport[0]);
if(!$srcporta)
log_error("filter_generate_address: {$srcport[0]} is not a valid source port.");
log_error(sprintf(gettext("filter_generate_address: %s is not a valid source port."), $srcport[0]));
else if((!$srcport[1]) || ($srcport[0] == $srcport[1])) {
$src .= " port {$srcporta} ";
} else if(($srcport[0] == 1) && ($srcport[1] == 65535)) {
@ -1784,6 +1866,17 @@ function filter_generate_user_rule($rule) {
return "# source network or destination network == pptp on " . $rule['descr'];
}
if(isset($rule['ipprotocol'])) {
switch($rule['ipprotocol']) {
case "inet":
$aline['ipprotocol'] = "inet";
break;
case "inet6":
$aline['ipprotocol'] = "inet6";
break;
}
}
/* check for unresolvable aliases */
if($rule['source']['address'] && !alias_expand($rule['source']['address'])) {
file_notice("Filter_Reload", "# unresolvable source aliases {$rule['descr']}");
@ -1816,21 +1909,32 @@ function filter_generate_user_rule($rule) {
$aline['quick'] = " quick ";
/* set the gateway interface */
update_filter_reload_status("Setting up pass/block rules {$rule['descr']}");
update_filter_reload_status(sprintf(gettext("Setting up pass/block rules %s"), $rule['descr']));
/* do not process reply-to for gateway'd rules */
if($rule['gateway'] == "" && $aline['direction'] <> "" && interface_has_gateway($rule['interface']) && !isset($config['system']['disablereplyto'])) {
$rg = get_interface_gateway($rule['interface']);
if(is_ipaddr($rg)) {
$aline['reply'] = "reply-to ( {$ifcfg['if']} {$rg} ) ";
if($rule['ipprotocol'] == "inet6") {
$rg = get_interface_gateway_v6($rule['interface']);
if(is_ipaddrv6($rg)) {
$aline['reply'] = "reply-to ( {$ifcfg['if']} {$rg} ) ";
} else {
if($rule['interface'] <> "pptp") {
log_error("Could not find IPv6 gateway for interface({$rule['interface']}).");
}
}
} else {
if($rule['interface'] <> "pptp") {
log_error("Could not find gateway for interface({$rule['interface']}).");
$rg = get_interface_gateway($rule['interface']);
if(is_ipaddrv4($rg)) {
$aline['reply'] = "reply-to ( {$ifcfg['if']} {$rg} ) ";
} else {
if($rule['interface'] <> "pptp") {
log_error(sprintf(gettext("Could not find IPv4 gateway for interface (%s)."), $rule['interface']));
}
}
}
}
/* if user has selected a custom gateway, lets work with it */
else if($rule['gateway'] <> "") {
else if($rule['gateway'] <> "" && $type == "pass") {
if (isset($GatewaysList[$rule['gateway']]))
/* Add the load balanced gateways */
$aline['route'] = " \$GW{$rule['gateway']} ";
@ -1841,15 +1945,17 @@ function filter_generate_user_rule($rule) {
if (isset($rule['protocol']) && !empty($rule['protocol'])) {
if($rule['protocol'] == "tcp/udp")
$aline['prot'] = " proto { tcp udp } ";
elseif(($rule['protocol'] == "icmp") && ($rule['ipprotocol'] == "inet6"))
$aline['prot'] = " proto ipv6-icmp ";
elseif($rule['protocol'] == "icmp")
$aline['prot'] = " inet proto icmp ";
$aline['prot'] = " proto icmp ";
else
$aline['prot'] = " proto {$rule['protocol']} ";
} else {
if($rule['source']['port'] <> "" || $rule['destination']['port'] <> "")
$aline['prot'] = " proto tcp ";
}
update_filter_reload_status("Creating rule {$rule['descr']}");
update_filter_reload_status(sprintf(gettext("Creating rule %s"), $rule['descr']));
/* source address */
$src = filter_generate_address($rule, "source");
@ -1878,8 +1984,10 @@ function filter_generate_user_rule($rule) {
$l7_structures = $l7rule->get_unique_structures();
$aline['divert'] = "divert " . $l7rule->GetRPort() . " ";
}
if(($rule['protocol'] == "icmp") && $rule['icmptype'])
if(($rule['protocol'] == "icmp") && $rule['icmptype'] && ($rule['ipprotocol'] == "inet"))
$aline['icmp-type'] = "icmp-type {$rule['icmptype']} ";
if(($rule['protocol'] == "icmp") && $rule['icmptype'] && ($rule['ipprotocol'] == "inet6"))
$aline['icmp6-type'] = "icmp6-type {$rule['icmptype']} ";
if(!empty($rule['tag']))
$aline['tag'] = " tag " .$rule['tag']. " ";
if(!empty($rule['tagged']))
@ -2036,8 +2144,8 @@ function filter_generate_user_rule($rule) {
/* negate VPN/PPTP/PPPoE networks for load balancer/gateway rules */
$vpns = " to <vpns> ";
$line .= $aline['type'] . $aline['direction'] . $aline['log'] . $aline['quick'] .
$aline['interface'] . $aline['prot'] . $aline['src'] . $aline['os'] .
$vpns . $aline['icmp-type'] . $aline['tag'] . $aline['tagged'] .
$aline['interface'] . $aline['ipprotocol'] . $aline['prot'] . $aline['src'] . $aline['os'] .
$vpns . $aline['icmp-type'] . $aline['icmp6-type'] . $aline['tag'] . $aline['tagged'] .
$aline['dscp'] . $aline['allowopts'] . $aline['flags'] .
$aline['queue'] . $aline['dnpipe'] . $aline['schedlabel'] .
" label \"NEGATE_ROUTE: Negate policy route for vpn(s)\"\n";
@ -2045,8 +2153,8 @@ function filter_generate_user_rule($rule) {
}
/* piece together the actual user rule */
$line .= $aline['type'] . $aline['direction'] . $aline['log'] . $aline['quick'] . $aline['interface'] .
$aline['reply'] . $aline['route'] . $aline['prot'] . $aline['src'] . $aline['os'] . $aline['dst'] .
$aline['divert'] . $aline['icmp-type'] . $aline['tag'] . $aline['tagged'] . $aline['dscp'] .
$aline['reply'] . $aline['route'] . $aline['ipprotocol'] . $aline['prot'] . $aline['src'] . $aline['os'] . $aline['dst'] .
$aline['divert'] . $aline['icmp-type'] . $aline['icmp6-type'] . $aline['tag'] . $aline['tagged'] . $aline['dscp'] .
$aline['allowopts'] . $aline['flags'] . $aline['queue'] . $aline['dnpipe'] . $aline['schedlabel'];
@ -2056,7 +2164,7 @@ function filter_generate_user_rule($rule) {
function filter_rules_generate() {
global $config, $g, $FilterIflist, $time_based_rules, $GatewaysList;
update_filter_reload_status("Creating default rules");
update_filter_reload_status(gettext("Creating default rules"));
if(isset($config['system']['developerspew'])) {
$mt = microtime();
echo "filter_rules_generate() being called $mt\n";
@ -2079,20 +2187,43 @@ function filter_rules_generate() {
#---------------------------------------------------------------------------
# default deny rules
#---------------------------------------------------------------------------
block in $log all label "Default deny rule"
block out $log all label "Default deny rule"
block in $log inet all label "Default deny rule IPv4"
block out $log inet all label "Default deny rule IPv4"
block in $log inet6 all label "Default deny rule IPv6"
block out $log inet6 all label "Default deny rule IPv6"
# IPv6 ICMP is not auxilary, it is required for operation
# See man icmp6(4)
# 1 unreach Destination unreachable
# 2 toobig Packet too big
# 128 echoreq Echo service request
# 129 echorep Echo service reply
# 133 routersol Router solicitation
# 134 routeradv Router advertisement
# 135 neighbrsol Neighbor solicitation
# 136 neighbradv Neighbor advertisement
pass quick inet6 proto ipv6-icmp from any to any icmp6-type {1,2,135,136} keep state
# Allow only bare essential icmpv6 packets (NS, NA, and RA, echoreq, echorep)
pass out quick inet6 proto ipv6-icmp from fe80::/10 to fe80::/10 icmp6-type {128,133,134,135,136} keep state
pass out quick inet6 proto ipv6-icmp from fe80::/10 to ff02::/16 icmp6-type {128,133,134,135,136} keep state
pass in quick inet6 proto ipv6-icmp from fe80::/10 to fe80::/10 icmp6-type {129,133,134,135,136} keep state
pass in quick inet6 proto ipv6-icmp from ff02::/16 to fe80::/10 icmp6-type {129,133,134,135,136} keep state
pass in quick inet6 proto ipv6-icmp from fe80::/10 to ff02::/16 icmp6-type {129,133,134,135,136} keep state
# We use the mighty pf, we cannot be fooled.
block quick proto { tcp, udp } from any port = 0 to any
block quick proto { tcp, udp } from any to any port = 0
block quick inet proto { tcp, udp } from any port = 0 to any
block quick inet proto { tcp, udp } from any to any port = 0
block quick inet6 proto { tcp, udp } from any port = 0 to any
block quick inet6 proto { tcp, udp } from any to any port = 0
EOD;
if(!isset($config['system']['ipv6allow'])) {
$ipfrules .= "# Block all IPv6\n";
$ipfrules .= "block in quick inet6 all\n";
$ipfrules .= "block out quick inet6 all\n";
$ipfrules .= "block in inet6 all label \"Default Deny ipv6 rule\"\n";
$ipfrules .= "block out inet6 all label \"Default Deny ipv6 rule\"\n";
}
$ipfrules .= <<<EOD
@ -2184,10 +2315,13 @@ EOD;
if(isset($config['interfaces'][$on]['blockbogons'])) {
if($bogontableinstalled == 0)
$ipfrules .= "table <bogons> persist file \"/etc/bogons\"\n";
$ipfrules .= "table <bogonsv6> persist file \"/etc/bogonsv6\"\n";
$ipfrules .= <<<EOD
# block bogon networks
# http://www.cymru.com/Documents/bogon-bn-nonagg.txt
block in $log quick on \${$oc['descr']} from <bogons> to any label "block bogon networks from {$oc['descr']}"
# http://www.team-cymru.org/Services/Bogons/fullbogons-ipv6.txt
block in $log quick on \${$oc['descr']} from <bogons> to any label "block bogon IPv4 networks from {$oc['descr']}"
block in $log quick on \${$oc['descr']} from <bogonsv6> to any label "block bogon IPv6 networks from {$oc['descr']}"
EOD;
$bogontableinstalled++;
@ -2209,10 +2343,11 @@ EOD;
$ipfrules .= <<<EOD
# block anything from private networks on interfaces with the option set
antispoof for \${$oc['descr']}
block in $log quick on \${$oc['descr']} from 10.0.0.0/8 to any label "block private networks from wan block 10/8"
block in $log quick on \${$oc['descr']} from 127.0.0.0/8 to any label "block private networks from wan block 127/8"
block in $log quick on \${$oc['descr']} from 172.16.0.0/12 to any label "block private networks from wan block 172.16/12"
block in $log quick on \${$oc['descr']} from 192.168.0.0/16 to any label "block private networks from wan block 192.168/16"
block in $log quick on \${$oc['descr']} from 10.0.0.0/8 to any label "Block private networks from {$oc['descr']} block 10/8"
block in $log quick on \${$oc['descr']} from 127.0.0.0/8 to any label "Block private networks from {$oc['descr']} block 127/8"
block in $log quick on \${$oc['descr']} from 172.16.0.0/12 to any label "Block private networks from {$oc['descr']} block 172.16/12"
block in $log quick on \${$oc['descr']} from 192.168.0.0/16 to any label "Block private networks from {$oc['descr']} block 192.168/16"
block in $log quick on \${$oc['descr']} from fc00::/7 to any label "Block ULA networks from {$oc['descr']} block fc00::/7"
EOD;
}
@ -2232,6 +2367,9 @@ EOD;
# allow our DHCP client out to the {$oc['descr']}
pass in on \${$oc['descr']} proto udp from any port = 67 to any port = 68 label "allow dhcp client out {$oc['descr']}"
pass out on \${$oc['descr']} proto udp from any port = 68 to any port = 67 label "allow dhcp client out {$oc['descr']}"
# allow our DHCPv6 client out to the {$oc['descr']}
pass in on \${$oc['descr']} proto udp from any port = 547 to any port = 546 label "allow dhcpv6 client out {$oc['descr']}"
pass out on \${$oc['descr']} proto udp from any port = 546 to any port = 547 label "allow dhcpv6 client out {$oc['descr']}"
# Not installing DHCP server firewall rules for {$oc['descr']} which is configured for DHCP.
EOD;
@ -2245,6 +2383,7 @@ EOD;
/* allow access to DHCP server on interfaces */
if(isset($config['dhcpd'][$on]['enable'])) {
$ipfrules .= <<<EOD
# allow access to DHCP server on {$oc['descr']}
pass in on \${$oc['descr']} proto udp from any port = 68 to 255.255.255.255 port = 67 label "allow access to DHCP server"
pass in on \${$oc['descr']} proto udp from any port = 68 to {$oc['ip']} port = 67 label "allow access to DHCP server"
@ -2260,6 +2399,19 @@ pass in on \${$oc['descr']} proto { tcp udp } from {$config['dhcpd'][$on]['failo
EOD;
}
}
if(isset($config['dhcpdv6'][$on]['enable'])) {
$ipfrules .= <<<EOD
# allow access to DHCPv6 server on {$oc['descr']}
anchor "dhcpv6server{$oc['descr']}"
# We need inet6 icmp for stateless autoconfig and dhcpv6
pass in on \${$oc['descr']} inet6 proto udp from fe80::/10 to ff02::/16 port = 546 label "allow access to DHCPv6 server"
pass in on \${$oc['descr']} inet6 proto udp from fe80::/10 to ff02::/16 port = 547 label "allow access to DHCPv6 server"
pass in on \${$oc['descr']} inet6 proto udp from fe80::/10 to {$oc['ipv6']} port = 546 label "allow access to DHCPv6 server"
pass out on \${$oc['descr']} inet6 proto udp from {$oc['ipv6']} port = 547 to fe80::/10 label "allow access to DHCPv6 server"
EOD;
}
break;
}
@ -2272,24 +2424,32 @@ EOD;
$ipfrules .= <<<EOD
# loopback
pass in on \$loopback all label "pass loopback"
pass out on \$loopback all label "pass loopback"
pass in on \$loopback inet all label "pass IPv4 loopback"
pass out on \$loopback inet all label "pass IPv4 loopback"
pass in on \$loopback inet6 all label "pass IPv6 loopback"
pass out on \$loopback inet6 all label "pass IPv6 loopback"
EOD;
$ipfrules .= <<<EOD
# let out anything from the firewall host itself and decrypted IPsec traffic
pass out all keep state allow-opts label "let out anything from firewall host itself"
pass out inet all keep state allow-opts label "let out anything IPv4 from firewall host itself"
pass out inet6 all keep state allow-opts label "let out anything IPv6 from firewall host itself"
EOD;
foreach ($FilterIflist as $ifdescr => $ifcfg) {
if(isset($ifcfg['virtual']))
continue;
if(isset($ifcfg['virtual']))
continue;
$gw = get_interface_gateway($ifdescr);
if (is_ipaddr($gw) && is_ipaddr($ifcfg['ip']))
$ipfrules .= "pass out route-to ( {$ifcfg['if']} {$gw} ) from {$ifcfg['ip']} to !{$ifcfg['sa']}/{$ifcfg['sn']} keep state allow-opts label \"let out anything from firewall host itself\"\n";
}
$gwv6 = get_interface_gateway_v6($ifdescr);
if (is_ipaddrv6($gwv6) && is_ipaddrv6($ifcfg['ipv6']))
$ipfrules .= "pass out route-to ( {$ifcfg['if']} {$gwv6} ) inet6 from {$ifcfg['ipv6']} to !{$ifcfg['sav6']}/{$ifcfg['snv6']} keep state allow-opts label \"let out anything from firewall host itself\"\n";
}
/* add ipsec interfaces */
if(isset($config['ipsec']['enable']) || isset($config['ipsec']['client']['enable']))
@ -2348,7 +2508,7 @@ EOD;
/* this shouldnt ever happen but instead of breaking the clients ruleset
* log an error.
*/
log_error("ERROR! PPTP enabled but could not resolve the \$pptpdtarget");
log_error(gettext("ERROR! PPTP enabled but could not resolve the \$pptpdtarget"));
}
}
@ -2408,25 +2568,43 @@ EOD;
$friendly = $GatewaysList[$route['gateway']]['friendlyiface'];
if(is_array($FilterIflist[$friendly])) {
$oc = $FilterIflist[$friendly];
if($oc['ip']) {
$sa = $oc['sa'];
$sn = $oc['sn'];
$if = $oc['if'];
}
if($sa) {
$ipfrules .= <<<EOD
if(is_ipaddrv4($route['network'])) {
if($oc['ip']) {
$sa = $oc['sa'];
$sn = $oc['sn'];
$if = $oc['if'];
}
if($sa) {
$ipfrules .= <<<EOD
pass quick on \${$oc['descr']} proto tcp from {$sa}/{$sn} to {$route['network']} flags any keep state(sloppy) label "pass traffic between statically routed subnets"
pass quick on \${$oc['descr']} from {$sa}/{$sn} to {$route['network']} keep state(sloppy) label "pass traffic between statically routed subnets"
pass quick on \${$oc['descr']} proto tcp from {$route['network']} to {$sa}/{$sn} flags any keep state(sloppy) label "pass traffic between statically routed subnets"
pass quick on \${$oc['descr']} from {$route['network']} to {$sa}/{$sn} keep state(sloppy) label "pass traffic between statically routed subnets"
EOD;
}
}
if(is_ipaddrv6($route['network'])) {
if($oc['ipv6']) {
$sa = $oc['sav6'];
$sn = $oc['snv6'];
$if = $oc['if'];
}
if($sa) {
$ipfrules .= <<<EOD
pass quick on \${$oc['descr']} inet6 proto tcp from {$sa}/{$sn} to {$route['network']} flags any keep state(sloppy) label "pass traffic between statically routed subnets"
pass quick on \${$oc['descr']} inet6 from {$sa}/{$sn} to {$route['network']} keep state(sloppy) label "pass traffic between statically routed subnets"
pass quick on \${$oc['descr']} inet6 proto tcp from {$route['network']} to {$sa}/{$sn} flags any keep state(sloppy) label "pass traffic between statically routed subnets"
pass quick on \${$oc['descr']} inet6 from {$route['network']} to {$sa}/{$sn} keep state(sloppy) label "pass traffic between statically routed subnets"
EOD;
}
}
}
}
}
update_filter_reload_status("Creating IPsec rules...");
update_filter_reload_status(gettext("Creating IPsec rules..."));
$ipfrules .= filter_generate_ipsec_rules();
$ipfrules .= <<<EOD
@ -2479,7 +2657,7 @@ function filter_rules_spoofcheck_generate($ifname, $if, $sa, $sn, $log) {
/* COMPAT Function */
function tdr_install_cron($should_install) {
log_error("Please use filter_tdr_install_cron() function tdr_install_cron will be deprecated!");
log_error(gettext("Please use filter_tdr_install_cron() function tdr_install_cron will be deprecated!"));
filter_tdr_install_cron($should_install);
}
@ -2524,7 +2702,7 @@ function filter_tdr_install_cron($should_install) {
$cron_item['who'] = "root";
$cron_item['command'] = "/etc/rc.filter_configure_sync";
$config['cron']['item'][] = $cron_item;
write_config("Installed 15 minute filter reload for Time Based Rules");
write_config(gettext("Installed 15 minute filter reload for Time Based Rules"));
configure_cron();
}
break;
@ -2879,17 +3057,17 @@ function discover_pkg_rules($ruletype) {
$rules = "";
$files = glob("/usr/local/pkg/*.inc");
foreach($files as $pkg_inc) {
update_filter_reload_status("Checking for {$ruletype} PF hooks in package {$pkg_inc}");
update_filter_reload_status(sprintf(gettext('Checking for %1$s PF hooks in package %2$s'), $ruletype, $pkg_inc));
require_once($pkg_inc);
$pkg = basename($pkg_inc, ".inc");
$pkg_generate_rules = "{$pkg}_generate_rules";
if(function_exists($pkg_generate_rules)) {
update_filter_reload_status("Processing early {$ruletype} rules for package {$pkg_inc}");
update_filter_reload_status(sprintf(gettext('Processing early %1$s rules for package %2$s'), $ruletype, $pkg_inc));
$tmprules = $pkg_generate_rules("$ruletype");
file_put_contents("{$g['tmp_path']}/rules.test.packages", $aliases . $tmprules);
$status = mwexec("/sbin/pfctl -nf {$g['tmp_path']}/rules.test.packages");
if ($status <> 0) {
$errorrules = "There was an error while parsing the package filter rules for {$pkg_inc}.\n";
$errorrules = sprintf(gettext("There was an error while parsing the package filter rules for %s."), $pkg_inc) . "\n";
log_error($errorrules);
file_put_contents("{$g['tmp_path']}/rules.packages.{$pkg}", "#{$errorrules}\n");
continue;

View File

@ -135,6 +135,8 @@ function parse_filter_line($line) {
* boolean FALSE because it could return a valid answer of 0 upon success. */
if (!(strpos($details, 'proto ') === FALSE)) {
preg_match("/.*\sproto\s(.*)\s\(/", $details, $proto);
} elseif (!(strpos($details, 'next-header ') === FALSE)) {
preg_match("/.*\snext-header\s(.*)\s\(/", $details, $proto);
} elseif (!(strpos($details, 'proto: ') === FALSE)) {
preg_match("/.*\sproto\:(.*)\s\(/", $details, $proto);
} elseif (!(strpos($leftovers, 'sum ok] ') === FALSE)) {
@ -159,7 +161,7 @@ function parse_filter_line($line) {
return $flent;
} else {
if($g['debug']) {
log_error("There was a error parsing rule: $errline. Please report to mailing list or forum.");
log_error(sprintf(gettext("There was a error parsing rule: %s. Please report to mailing list or forum."), $errline));
}
return "";
}
@ -203,7 +205,7 @@ function get_port_with_service($port, $proto) {
$service = getservbyport($port, $proto);
$portstr = "";
if ($service) {
$portstr = "<span title=\"Service {$port}/{$proto}: {$service}\">" . htmlspecialchars($port) . "</span>";
$portstr = sprintf('<span title="' . gettext('Service %1$s/%2$s: %3$s') . '">' . htmlspecialchars($port) . '</span>', $port, $proto, $service);
} else {
$portstr = htmlspecialchars($port);
}
@ -279,4 +281,4 @@ function handle_ajax($nentries, $tail = 50) {
}
}
?>
?>

View File

@ -91,7 +91,7 @@ $g = array(
"disablecrashreporter" => false,
"crashreporterurl" => "http://crashreporter.pfsense.org/crash_reporter.php",
"debug" => false,
"latest_config" => "8.0",
"latest_config" => "8.2",
"nopkg_platforms" => array("cdrom"),
"minimum_ram_warning" => "101",
"minimum_ram_warning_text" => "128 MB",

View File

@ -145,7 +145,12 @@ EOD;
}
/* Interface ip is needed since apinger will bind a socket to it. */
$gwifip = find_interface_ip($gateway['interface'], true);
if (is_ipaddrv4($gateway['gateway'])) {
$gwifip = find_interface_ip($gateway['interface'], true);
}
if (is_ipaddrv6($gateway['gateway'])) {
$gwifip = find_interface_ipv6($gateway['interface'], true);
}
if (!is_ipaddr($gwifip))
continue; //Skip this target
@ -210,7 +215,7 @@ EOD;
* not strictly necessary but is a added level of protection.
*/
if (is_ipaddr($gateway['gateway']) && $gateway['monitor'] != $gateway['gateway']) {
log_error("Removing static route for monitor {$gateway['monitor']} and adding a new route through {$gateway['gateway']}");
log_error(sprintf(gettext('Removing static route for monitor %1$s and adding a new route through %2$s'), $gateway['monitor'], $gateway['gateway']));
mwexec("/sbin/route delete -host " . escapeshellarg($gateway['monitor']), true);
mwexec("/sbin/route add -host " . escapeshellarg($gateway['monitor']) .
" " . escapeshellarg($gateway['gateway']), true);
@ -421,15 +426,15 @@ function return_gateway_groups_array() {
$status = $gateways_status[$gwname];
$gwdown = false;
if (stristr($status['status'], "down")) {
$msg = "MONITOR: {$gwname} is down, removing from routing group";
$msg = sprintf(gettext("MONITOR: %s is down, removing from routing group"), $gwname);
$gwdown = true;
} else if (stristr($status['status'], "loss") && strstr($group['trigger'], "loss")) {
/* packet loss */
$msg = "MONITOR: {$gwname} has packet loss, removing from routing group";
$msg = sprintf(gettext("MONITOR: %s has packet loss, removing from routing group"), $gwname);
$gwdown = true;
} else if (stristr($status['status'], "delay") && strstr($group['trigger'] , "latency")) {
/* high latency */
$msg = "MONITOR: {$gwname} has high latency, removing from routing group";
$msg = sprintf(gettext("MONITOR: %s has high latency, removing from routing group"), $gwname);
$gwdown = true;
}
if ($gwdown == true) {
@ -445,7 +450,7 @@ function return_gateway_groups_array() {
if($tiers_count == 0) {
/* Oh dear, we have no members! Engage Plan B */
if (!$g['booting']) {
$msg = "Gateways status could not be determined, considering all as up/active.";
$msg = gettext("Gateways status could not be determined, considering all as up/active.");
log_error($msg);
notify_via_growl($msg);
notify_via_smtp($msg);
@ -499,7 +504,7 @@ function dhclient_update_gateway_groups_defaultroute($interface = "wan") {
}
}
if($changed && $current_gw)
write_config("Updating gateway group gateway for $interface - new gateway is $current_gw");
write_config(sprintf(gettext('Updating gateway group gateway for %1$s - new gateway is %2$s'), $interfac, $current_gw));
}
function lookup_gateway_ip_by_name($name) {
@ -539,35 +544,63 @@ function lookup_gateway_interface_by_name($name) {
}
function get_interface_gateway($interface, &$dynamic = false) {
global $config, $g;
global $config, $g;
$gw = NULL;
$gw = NULL;
$gwcfg = $config['interfaces'][$interface];
if (!empty($gwcfg['gateway']) && is_array($config['gateways']['gateway_item'])) {
foreach($config['gateways']['gateway_item'] as $gateway) {
if ($gateway['name'] == $gwcfg['gateway']) {
$gw = $gateway['gateway'];
$gwcfg = $config['interfaces'][$interface];
if (!empty($gwcfg['gateway']) && is_array($config['gateways']['gateway_item'])) {
foreach($config['gateways']['gateway_item'] as $gateway) {
if(($gateway['name'] == $gwcfg['gateway']) && (is_ipaddrv4($gateway['gateway']))) {
$gw = $gateway['gateway'];
break;
}
}
}
}
// for dynamic interfaces we handle them through the $interface_router file.
if (!is_ipaddr($gw) && !is_ipaddr($gwcfg['ipaddr'])) {
$realif = get_real_interface($interface);
if (file_exists("{$g['tmp_path']}/{$realif}_router")) {
$gw = trim(file_get_contents("{$g['tmp_path']}/{$realif}_router"), " \n");
$dynamic = true;
}
if (file_exists("{$g['tmp_path']}/{$realif}_defaultgw"))
$dynamic = "default";
// for dynamic interfaces we handle them through the $interface_router file.
if (!is_ipaddr($gw) && !is_ipaddr($gwcfg['ipaddr'])) {
$realif = get_real_interface($interface);
if (file_exists("{$g['tmp_path']}/{$realif}_router")) {
$gw = trim(file_get_contents("{$g['tmp_path']}/{$realif}_router"), " \n");
$dynamic = true;
}
if (file_exists("{$g['tmp_path']}/{$realif}_defaultgw"))
$dynamic = "default";
}
}
/* return gateway */
return ($gw);
/* return gateway */
return ($gw);
}
function get_interface_gateway_v6($interface, &$dynamic = false) {
global $config, $g;
$gw = NULL;
$gwcfg = $config['interfaces'][$interface];
if (!empty($gwcfg['gatewayv6']) && is_array($config['gateways']['gateway_item'])) {
foreach($config['gateways']['gateway_item'] as $gateway) {
if(($gateway['name'] == $gwcfg['gatewayv6']) && (is_ipaddrv6($gateway['gateway']))) {
$gw = $gateway['gateway'];
break;
}
}
}
// for dynamic interfaces we handle them through the $interface_router file.
if (!is_ipaddrv6($gw) && !is_ipaddr($gwcfg['ipaddrv6'])) {
$realif = get_real_interface($interface);
if (file_exists("{$g['tmp_path']}/{$realif}_routerv6")) {
$gw = trim(file_get_contents("{$g['tmp_path']}/{$realif}_routerv6"), " \n");
$dynamic = true;
}
if (file_exists("{$g['tmp_path']}/{$realif}_defaultgwv6"))
$dynamic = "default";
}
/* return gateway */
return ($gw);
}
?>

View File

@ -37,6 +37,7 @@
pfSense_BUILDER_BINARIES: /sbin/dhclient /bin/sh /usr/bin/grep /usr/bin/xargs /usr/bin/awk /usr/local/sbin/choparp
pfSense_BUILDER_BINARIES: /sbin/ifconfig /sbin/route /usr/sbin/ngctl /usr/sbin/arp /bin/kill /usr/local/sbin/mpd5
pfSense_BUILDER_BINARIES: /usr/local/sbin/dhcp6c
pfSense_MODULE: interfaces
*/
@ -47,7 +48,7 @@ require_once("cmd_chain.inc");
function interfaces_bring_up($interface) {
if(!$interface) {
log_error("interfaces_bring_up() was called but no variable defined.");
log_error(gettext("interfaces_bring_up() was called but no variable defined."));
log_error( "Backtrace: " . debug_backtrace() );
return;
}
@ -205,18 +206,18 @@ This block of code is only entered for OPTx interfaces that are configured for P
function interfaces_loopback_configure() {
if($g['booting'])
echo "Configuring loopback interface...";
echo gettext("Configuring loopback interface...");
pfSense_interface_setaddress("lo0", "127.0.0.1");
interfaces_bring_up("lo0");
if($g['booting'])
echo "done.\n";
echo gettext("done.") . "\n";
return 0;
}
function interfaces_vlan_configure() {
global $config, $g;
if($g['booting'])
echo "Configuring VLAN interfaces...";
echo gettext("Configuring VLAN interfaces...");
if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
foreach ($config['vlans']['vlan'] as $vlan) {
if(empty($vlan['vlanif']))
@ -226,14 +227,14 @@ function interfaces_vlan_configure() {
}
}
if($g['booting'])
echo "done.\n";
echo gettext("done.") . "\n";
}
function interface_vlan_configure(&$vlan) {
global $config, $g;
if (!is_array($vlan)) {
log_error("VLAN: called with wrong options. Problems with config!");
log_error(gettext("VLAN: called with wrong options. Problems with config!"));
return;
}
$if = $vlan['if'];
@ -241,7 +242,7 @@ function interface_vlan_configure(&$vlan) {
$tag = $vlan['tag'];
if (empty($if)) {
log_error("interface_vlan_confgure called with if undefined.");
log_error(gettext("interface_vlan_confgure called with if undefined."));
return;
}
@ -275,14 +276,14 @@ function interface_qinq_configure(&$vlan, $fd = NULL) {
global $config, $g;
if (!is_array($vlan)) {
log_error("QinQ compat VLAN: called with wrong options. Problems with config!\n");
log_error(sprintf(gettext("QinQ compat VLAN: called with wrong options. Problems with config!%s"), "\n"));
return;
}
$qinqif = $vlan['if'];
$tag = $vlan['tag'];
if(empty($qinqif)) {
log_error("interface_qinq_confgure called with if undefined.\n");
log_error(sprintf(gettext("interface_qinq_confgure called with if undefined.%s"), "\n"));
return;
}
$vlanif = interface_vlan_configure($vlan);
@ -344,7 +345,7 @@ function interface_qinq_configure(&$vlan, $fd = NULL) {
function interfaces_qinq_configure() {
global $config, $g;
if($g['booting'])
echo "Configuring QinQ interfaces...";
echo gettext("Configuring QinQ interfaces...");
if (is_array($config['qinqs']['qinqentry']) && count($config['qinqs']['qinqentry'])) {
foreach ($config['qinqs']['qinqentry'] as $qinq) {
/* XXX: Maybe we should report any errors?! */
@ -352,14 +353,14 @@ function interfaces_qinq_configure() {
}
}
if($g['booting'])
echo "done.\n";
echo gettext( "done.") . "\n";
}
function interface_qinq2_configure(&$qinq, $fd, $macaddr) {
global $config, $g;
if (!is_array($qinq)) {
log_error("QinQ compat VLAN: called with wrong options. Problems with config!\n");
log_error(sprintf(gettext("QinQ compat VLAN: called with wrong options. Problems with config!%s"), "\n"));
return;
}
@ -367,7 +368,7 @@ function interface_qinq2_configure(&$qinq, $fd, $macaddr) {
$tag = $qinq['tag'];
$vlanif = "{$if}_{$tag}";
if(empty($if)) {
log_error("interface_qinq_confgure called with if undefined.\n");
log_error(sprintf(gettext("interface_qinq_confgure called with if undefined.%s"), "\n"));
return;
}
@ -388,7 +389,7 @@ function interfaces_create_wireless_clones() {
global $config;
if($g['booting'])
echo "Creating other wireless clone interfaces...";
echo gettext("Creating other wireless clone interfaces...");
if (is_array($config['wireless']['clone']) && count($config['wireless']['clone'])) {
foreach ($config['wireless']['clone'] as $clone) {
if(empty($clone['cloneif']))
@ -402,7 +403,7 @@ function interfaces_create_wireless_clones() {
}
}
if($g['booting'])
echo " done.\n";
echo " " . gettext("done.") . "\n";
}
function interfaces_bridge_configure($checkmember = 0) {
@ -431,7 +432,7 @@ function interface_bridge_configure(&$bridge) {
return -1;
if (empty($bridge['members'])) {
log_error("No members found on {$bridge['bridgeif']}");
log_error(sprintf(gettext("No members found on %s"), $bridge['bridgeif']));
return -1;
}
@ -497,7 +498,7 @@ function interface_bridge_configure(&$bridge) {
$realif1 = get_real_interface($member);
$realif = escapeshellarg($realif1);
if (!$realif) {
log_error("realif not defined in interfaces bridge - up");
log_error(gettext("realif not defined in interfaces bridge - up"));
continue;
}
/* make sure the parent interface is up */
@ -610,7 +611,7 @@ function interface_bridge_configure(&$bridge) {
if($bridgeif)
interfaces_bring_up($bridgeif);
else
log_error("bridgeif not defined -- could not bring interface up");
log_error(gettext("bridgeif not defined -- could not bring interface up"));
return $bridgeif;
}
@ -644,7 +645,7 @@ function interfaces_lagg_configure()
{
global $config, $g;
if($g['booting'])
echo "Configuring LAGG interfaces...";
echo gettext("Configuring LAGG interfaces...");
$i = 0;
if (is_array($config['laggs']['lagg']) && count($config['laggs']['lagg'])) {
foreach ($config['laggs']['lagg'] as $lagg) {
@ -656,7 +657,7 @@ function interfaces_lagg_configure()
}
}
if($g['booting'])
echo "done.\n";
echo gettext("done.") . "\n";
}
function interface_lagg_configure(&$lagg) {
@ -782,11 +783,14 @@ function interface_gre_configure(&$gre, $grekey = "") {
if($greif)
interfaces_bring_up($greif);
else
log_error("Could not bring greif up -- variable not defined.");
log_error(gettext("Could not bring greif up -- variable not defined."));
if (isset($gre['link1']) && $gre['link1'])
mwexec("/sbin/route add {$gre['tunnel-remote-addr']}/{$gre['tunnel-remote-net']} {$gre['tunnel-local-addr']}");
file_put_contents("{$g['tmp_path']}/{$greif}_router", $gre['tunnel-remote-addr']);
if(is_ipaddrv4($gre['tunnel-remote-addr']))
file_put_contents("{$g['tmp_path']}/{$greif}_router", $gre['tunnel-remote-addr']);
if(is_ipaddrv6($gre['tunnel-remote-addr']))
file_put_contents("{$g['tmp_path']}/{$greif}_routerv6", $gre['tunnel-remote-addr']);
return $greif;
}
@ -822,7 +826,7 @@ function interface_gif_configure(&$gif, $gifkey = "") {
if($realif)
interfaces_bring_up($realif);
else
log_error("could not bring realif up -- variable not defined -- interface_gif_configure()");
log_error(gettext("could not bring realif up -- variable not defined -- interface_gif_configure()"));
if ($g['booting'] || !(empty($gif['gifif']))) {
pfSense_interface_destroy($gif['gifif']);
@ -833,7 +837,11 @@ function interface_gif_configure(&$gif, $gifkey = "") {
/* Do not change the order here for more see gif(4) NOTES section. */
mwexec("/sbin/ifconfig {$gifif} tunnel {$realifip} {$gif['remote-addr']}");
mwexec("/sbin/ifconfig {$gifif} {$gif['tunnel-local-addr']} {$gif['tunnel-remote-addr']} netmask " . gen_subnet_mask($gif['tunnel-remote-net']));
if((is_ipaddrv6($gif['tunnel-local-addr'])) || (is_ipaddrv6($gif['tunnel-remote-addr']))) {
mwexec("/sbin/ifconfig {$gifif} inet6 {$gif['tunnel-local-addr']} {$gif['tunnel-remote-addr']} prefixlen {$gif['tunnel-remote-net']} ");
} else {
mwexec("/sbin/ifconfig {$gifif} {$gif['tunnel-local-addr']} {$gif['tunnel-remote-addr']} netmask " . gen_subnet_mask($gif['tunnel-remote-net']));
}
if (isset($gif['link0']) && $gif['link0'])
pfSense_interface_flags($gifif, IFF_LINK0);
if (isset($gif['link1']) && $gif['link1'])
@ -841,11 +849,26 @@ function interface_gif_configure(&$gif, $gifkey = "") {
if($gifif)
interfaces_bring_up($gifif);
else
log_error("could not bring gifif up -- variable not defined");
log_error(gettext("could not bring gifif up -- variable not defined"));
/* XXX: Needed?! */
//mwexec("/sbin/route add {$gif['tunnel-remote-addr']}/{$gif['tunnel-remote-net']} -iface {$gifif}");
file_put_contents("{$g['tmp_path']}/{$gifif}_router", $gif['tunnel-remote-addr']);
$iflist = get_configured_interface_list();
foreach($iflist as $ifname) {
if($config['interfaces'][$ifname]['if'] == $gifif) {
if(get_interface_gateway($ifname)) {
system_routing_configure($ifname);
break;
}
if(get_interface_gateway_v6($ifname)) {
system_routing_configure($ifname);
break;
}
}
}
if(is_ipaddrv4($gif['tunnel-remote-addr']))
file_put_contents("{$g['tmp_path']}/{$gifif}_router", $gif['tunnel-remote-addr']);
if(is_ipaddrv6($gif['tunnel-remote-addr']))
file_put_contents("{$g['tmp_path']}/{$gifif}_routerv6", $gif['tunnel-remote-addr']);
return $gifif;
}
@ -886,12 +909,12 @@ function interfaces_configure() {
continue;
} else {
if ($g['booting'])
echo "Configuring {$ifname} interface...";
printf(gettext("Configuring %s interface..."), $ifname);
if($g['debug'])
log_error("Configuring {$ifname}");
log_error(sprintf(gettext("Configuring %s"), $ifname));
interface_configure($if, $reload);
if ($g['booting'])
echo "done.\n";
echo gettext( "done.") . "\n";
}
}
@ -924,14 +947,14 @@ function interfaces_configure() {
foreach ($delayed_list as $if => $ifname) {
if ($g['booting'])
echo "Configuring {$ifname} interface...";
printf(gettext("Configuring %s interface..."), $ifname);
if ($g['debug'])
log_error("Configuring {$ifname}");
log_error(sprintf(gettext("Configuring %s"), $ifname));
interface_configure($if, $reload);
if ($g['booting'])
echo "done.\n";
echo gettext("done.") . "\n";
}
/* set up BRIDGe virtual interfaces */
@ -939,14 +962,14 @@ function interfaces_configure() {
foreach ($bridge_list as $if => $ifname) {
if ($g['booting'])
echo "Configuring {$ifname} interface...";
printf(gettext("Configuring %s interface..."), $ifname);
if($g['debug'])
log_error("Configuring {$ifname}");
log_error(sprintf(gettext("Configuring %s"), $ifname));
interface_configure($if, $reload);
if ($g['booting'])
echo "done.\n";
echo gettext("done.") . "\n";
}
/* configure interface groups */
@ -1045,8 +1068,12 @@ function interface_bring_down($interface = "wan", $destroy = false) {
$pid = find_dhclient_process($realif);
if($pid)
mwexec("/bin/kill {$pid}");
$pidv6 = find_dhcp6c_process($realif);
if($pidv6)
mwexec("/bin/kill {$pidv6}");
sleep(1);
unlink_if_exists("{$g['varetc_path']}/dhclient_{$interface}.conf");
unlink_if_exists("{$g['varetc_path']}/dhcp6c_{$interface}.conf");
if(does_interface_exist("$realif")) {
mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " delete", true);
if ($destroy == true)
@ -1067,7 +1094,9 @@ function interface_bring_down($interface = "wan", $destroy = false) {
/* remove interface up file if it exists */
unlink_if_exists("{$g['tmp_path']}/{$realif}up");
unlink_if_exists("{$g['vardb_path']}/{$interface}ip");
unlink_if_exists("{$g['vardb_path']}/{$interface}ipv6");
unlink_if_exists("{$g['tmp_path']}/{$realif}_router");
unlink_if_exists("{$g['tmp_path']}/{$realif}_routerv6");
unlink_if_exists("{$g['varetc_path']}/nameserver_{$realif}");
unlink_if_exists("{$g['varetc_path']}/searchdomain_{$realif}");
@ -1237,7 +1266,7 @@ function interface_ppps_configure($interface) {
}
}
if (!$ppp || $ifcfg['if'] != $ppp['if']){
log_error("Can't find PPP config for {$ifcfg['if']} in interface_ppps_configure().");
log_error(sprintf(gettext("Can't find PPP config for %s in interface_ppps_configure()."), $ifcfg['if']));
return 0;
}
$pppif = $ifcfg['if'];
@ -1300,19 +1329,19 @@ function interface_ppps_configure($interface) {
*/
}
if(!is_ipaddr($gateways[$pid])){
log_error("Could not get a PPTP/L2TP Remote IP address from {$dhcp_gateway} for {$gway} in interfaces_ppps_configure.");
log_error(sprintf(gettext('Could not get a PPTP/L2TP Remote IP address from %1$s for %2$s in interfaces_ppps_configure.'), $dhcp_gateway, $gway));
return 0;
}
pfSense_ngctl_attach(".", $port);
break;
case "ppp":
if (!file_exists("{$port}")) {
log_error("Device {$port} does not exist. PPP link cannot start without the modem device.");
log_error(sprintf(gettext("Device %s does not exist. PPP link cannot start without the modem device."), $port));
return 0;
}
break;
default:
log_error("Unkown {$type} configured as ppp interface.");
log_error(sprintf(gettext("Unkown %s configured as ppp interface."), $type));
break;
}
}
@ -1373,6 +1402,7 @@ startup:
default:
{$ppp['type']}client:
create bundle static {$interface}
set bundle enable ipv6cp
set iface name {$pppif}
EOD;
@ -1576,7 +1606,7 @@ EOD;
else {
$fd = fopen("{$g['varetc_path']}/mpd_{$interface}.conf", "w");
if (!$fd) {
log_error("Error: cannot open mpd_{$interface}.conf in interface_ppps_configure().\n");
log_error(sprintf(gettext("Error: cannot open mpd_%s.conf in interface_ppps_configure().%s"), $interface, "\n"));
return 0;
}
// Write out mpd_ppp.conf
@ -1628,7 +1658,7 @@ function interfaces_carp_setup() {
$cmdchain = new CmdCHAIN();
if ($g['booting']) {
echo "Configuring CARP settings...";
echo gettext("Configuring CARP settings...");
mute_kernel_msgs();
}
@ -1649,12 +1679,12 @@ function interfaces_carp_setup() {
}
if($balanacing) {
$cmdchain->add("Enable CARP ARP-balancing", "/sbin/sysctl net.inet.carp.arpbalance=1", true);
$cmdchain->add("Disallow CARP preemption", "/sbin/sysctl net.inet.carp.preempt=0", true);
$cmdchain->add(gettext("Enable CARP ARP-balancing"), "/sbin/sysctl net.inet.carp.arpbalance=1", true);
$cmdchain->add(gettext("Disallow CARP preemption"), "/sbin/sysctl net.inet.carp.preempt=0", true);
} else
$cmdchain->add("Enable CARP preemption", "/sbin/sysctl net.inet.carp.preempt=1", true);
$cmdchain->add(gettext("Enable CARP preemption"), "/sbin/sysctl net.inet.carp.preempt=1", true);
$cmdchain->add("Enable CARP logging", "/sbin/sysctl net.inet.carp.log=1", true);
$cmdchain->add(gettext("Enable CARP logging"), "/sbin/sysctl net.inet.carp.log=1", true);
if (!empty($pfsyncinterface))
$carp_sync_int = get_real_interface($pfsyncinterface);
@ -1670,22 +1700,33 @@ function interfaces_carp_setup() {
fclose($fd);
mwexec("/sbin/pfctl -f {$g['tmp_path']}/rules.boot");
} else
log_error("Could not create rules.boot file!");
log_error(gettext("Could not create rules.boot file!"));
}
/* setup pfsync interface */
if($carp_sync_int and $pfsyncenabled) {
if (is_ipaddr($pfsyncpeerip))
$cmdchain->add("Bring up pfsync0 syncpeer", "/sbin/ifconfig pfsync0 syncdev {$carp_sync_int} syncpeer {$pfsyncpeerip} up", false);
$cmdchain->add(gettext("Bring up pfsync0 syncpeer"), "/sbin/ifconfig pfsync0 syncdev {$carp_sync_int} syncpeer {$pfsyncpeerip} up", false);
else
$cmdchain->add("Bring up pfsync0 syncdev", "/sbin/ifconfig pfsync0 syncdev {$carp_sync_int} up", false);
$cmdchain->add(gettext("Bring up pfsync0 syncdev"), "/sbin/ifconfig pfsync0 syncdev {$carp_sync_int} up", false);
} else
$cmdchain->add("Bring up pfsync0", "/sbin/ifconfig pfsync0 syncdev lo0 up", false);
$cmdchain->add(gettext("Bring up pfsync0"), "/sbin/ifconfig pfsync0 syncdev lo0 up", false);
sleep(1);
/* XXX: Handle an issue with pfsync(4) and carp(4). In a cluster carp will come up before pfsync(4) has updated and so will cause issuese
* for exiting sessions.
*/
$i = 0;
while (intval(trim(`/sbin/ifconfig pfsync0 | /usr/bin/grep 'syncok: 0' | /usr/bin/grep -v grep | /usr/bin/wc -l`)) == 0 && $i < 30) {
$i++;
sleep(1);
}
if($config['virtualip']['vip'])
$cmdchain->add("Allow CARP.", "/sbin/sysctl net.inet.carp.allow=1", true);
$cmdchain->add(gettext("Allow CARP."), "/sbin/sysctl net.inet.carp.allow=1", true);
else
$cmdchain->add("Disallow CARP.", "/sbin/sysctl net.inet.carp.allow=0", true);
$cmdchain->add(gettext("Disallow CARP."), "/sbin/sysctl net.inet.carp.allow=0", true);
if($g['debug'])
$cmdchain->setdebug(); // optional for verbose logging
@ -1695,7 +1736,7 @@ function interfaces_carp_setup() {
if ($g['booting']) {
unmute_kernel_msgs();
echo "done.\n";
echo gettext("done.") . "\n";
}
}
@ -1878,16 +1919,27 @@ function interface_carp_configure(&$vip) {
*/
$realif = get_real_interface($vip['interface']);
if (!does_interface_exist($realif)) {
file_notice("CARP", "Interface specified for the virtual IP address {$vip['subnet']} does not exist. Skipping this VIP.", "Firewall: Virtual IP", "");
file_notice("CARP", sprintf(gettext("Interface specified for the virtual IP address %s does not exist. Skipping this VIP."), $vip['subnet']), "Firewall: Virtual IP", "");
return;
}
/* Ensure CARP IP really exists prior to loading up. */
$ww_subnet_ip = find_interface_ip($realif);
$ww_subnet_bits = find_interface_subnet($realif);
if (!ip_in_subnet($vip['subnet'], gen_subnet($ww_subnet_ip, $ww_subnet_bits) . "/" . $ww_subnet_bits) && !ip_in_interface_alias_subnet($vip['interface'], $vip['subnet'])) {
file_notice("CARP", "Sorry but we could not find a matching real interface subnet for the virtual IP address {$vip['subnet']}.", "Firewall: Virtual IP", "");
return;
if(is_ipaddrv4($vip['subnet'])) {
/* Ensure CARP IP really exists prior to loading up. */
$ww_subnet_ip = find_interface_ip($realif);
$ww_subnet_bits = find_interface_subnet($realif);
if (!ip_in_subnet($vip['subnet'], gen_subnet($ww_subnet_ip, $ww_subnet_bits) . "/" . $ww_subnet_bits) && !ip_in_interface_alias_subnet($vip['interface'], $vip['subnet'])) {
file_notice("CARP", sprintf(gettext("Sorry but we could not find a matching real interface subnet for the virtual IP address %s."), $vip['subnet']), "Firewall: Virtual IP", "");
return;
}
}
if(is_ipaddrv6($vip['subnet'])) {
/* Ensure CARP IP really exists prior to loading up. */
$ww_subnet_ip = find_interface_ipv6($realif);
$ww_subnet_bits = find_interface_subnetv6($realif);
if (!ip_in_subnet($vip['subnet'], gen_subnetv6($ww_subnet_ip, $ww_subnet_bits) . "/" . $ww_subnet_bits) && !ip_in_interface_alias_subnet($vip['interface'], $vip['subnet'])) {
file_notice("CARP", sprintf(gettext("Sorry but we could not find a matching real interface subnet for the virtual IPv6 address %s."), $vip['subnet']), "Firewall: Virtual IP", "");
return;
}
}
/* create the carp interface and setup */
@ -1902,11 +1954,18 @@ function interface_carp_configure(&$vip) {
/* invalidate interface cache */
get_interface_arr(true);
$broadcast_address = gen_subnet_max($vip['subnet'], $vip['subnet_bits']);
$advbase = "";
if (!empty($vip['advbase']))
$advbase = "advbase {$vip['advbase']}";
mwexec("/sbin/ifconfig {$vipif} {$vip['subnet']}/{$vip['subnet_bits']} vhid {$vip['vhid']} advskew {$vip['advskew']} {$advbase} {$password}");
if(is_ipaddrv4($vip['subnet'])) {
$broadcast_address = gen_subnet_max($vip['subnet'], $vip['subnet_bits']);
mwexec("/sbin/ifconfig {$vipif} {$vip['subnet']}/{$vip['subnet_bits']} vhid {$vip['vhid']} advskew {$vip['advskew']} {$advbase} {$password}");
}
if(is_ipaddrv6($vip['subnet'])) {
$broadcast_address = gen_subnet_max($vip['subnet'], $vip['subnet_bits']);
mwexec("/sbin/ifconfig {$vipif} inet6 {$vip['subnet']} prefixlen {$vip['subnet_bits']} vhid {$vip['vhid']} advskew {$vip['advskew']} {$advbase} {$password}");
}
interfaces_bring_up($vipif);
@ -1935,7 +1994,7 @@ function interface_carpdev_configure(&$vip) {
* prevents a panic if the interface is missing or invalid
*/
if (!does_interface_exist($realif)) {
file_notice("CARP", "Interface specified for the virtual IP address {$vip['subnet']} does not exist. Skipping this VIP.", "Firewall: Virtual IP", "");
file_notice("CARP", sprintf(gettext("Interface specified for the virtual IP address %s does not exist. Skipping this VIP."), $vip['subnet']), "Firewall: Virtual IP", "");
return;
}
@ -1981,7 +2040,7 @@ EOD;
/* fire up dhclient */
mwexec("/sbin/dhclient -c {$g['varetc_path']}/dhclient_{$vipif}.conf {$vipif} >{$g['tmp_path']}/{$vipif}_output 2>{$g['tmp_path']}/{$vipif}_error_output", false);
} else {
log_error("Error: cannot open dhclient_{$vipif}.conf in interfaces_carpdev_configure() for writing.\n");
log_error(sprintf(gettext("Error: cannot open dhclient_%s.conf in interfaces_carpdev_configure() for writing.%s"), $vipif, "\n"));
mwexec("/sbin/dhclient -b {$vipif}");
}
@ -2014,15 +2073,15 @@ function interface_wireless_clone($realif, $wlcfg) {
exec("/sbin/ifconfig {$realif}", $output, $ret);
$ifconfig_str = implode($output);
if(($wlcfg_mode == "hostap") && (! preg_match("/hostap/si", $ifconfig_str))) {
log_error("Interface {$realif} changed to hostap mode");
log_error(sprintf(gettext("Interface %s changed to hostap mode"), $realif));
$needs_clone = true;
}
if(($wlcfg_mode == "adhoc") && (! preg_match("/adhoc/si", $ifconfig_str))) {
log_error("Interface {$realif} changed to adhoc mode");
log_error(sprintf(gettext("Interface %s changed to adhoc mode"), $realif));
$needs_clone = true;
}
if(($wlcfg_mode == "bss") && (preg_match("/hostap|adhoc/si", $ifconfig_str))) {
log_error("Interface {$realif} changed to infrastructure mode");
log_error(sprintf(gettext("Interface %s changed to infrastructure mode"), $realif));
$needs_clone = true;
}
} else {
@ -2034,12 +2093,12 @@ function interface_wireless_clone($realif, $wlcfg) {
if(does_interface_exist($realif))
pfSense_interface_destroy($realif);
log_error("Cloning new wireless interface {$realif}");
log_error(sprintf(gettext("Cloning new wireless interface %s"), $realif));
// Create the new wlan interface. FreeBSD returns the new interface name.
// example: wlan2
exec("/sbin/ifconfig wlan create wlandev {$baseif} {$mode} bssid 2>&1", $out, $ret);
if($ret <> 0) {
log_error("Failed to clone interface {$baseif} with error code {$ret}, output {$out[0]}");
log_error(sprintf(gettext('Failed to clone interface %1$s with error code %2$s, output %3$s'), $baseif, $ret, $out[0]));
return false;
}
$newif = trim($out[0]);
@ -2547,9 +2606,19 @@ function find_dhclient_process($interface) {
return intval($pid);
}
function find_dhcp6c_process($interface) {
if ($interface)
$pid = `/bin/ps auxw|grep "dhcp6c" |grep "{$interface}"|awk '{print $2}'`;
else
$pid = 0;
return intval($pid);
}
function interface_configure($interface = "wan", $reloadall = false, $linkupevent = false) {
global $config, $g;
global $interface_sn_arr_cache, $interface_ip_arr_cache;
global $interface_snv6_arr_cache, $interface_ipv6_arr_cache;
$wancfg = $config['interfaces'][$interface];
@ -2560,8 +2629,11 @@ function interface_configure($interface = "wan", $reloadall = false, $linkupeven
if (!$g['booting'] && !substr($realif, 0, 4) == "ovpn") {
/* remove all IPv4 addresses */
/* remove all IPv4 and IPv6 addresses */
while (mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " -alias", true) == 0);
while (mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 -alias", true) == 0);
/* Disable Accepting router advertisements unless specifically requested */
while (mwexec("/sbin/ifconfig " . escapeshellarg($realif) . " inet6 -accept_rtadv") == 0);
switch ($wancfg['ipaddr']) {
case 'pppoe':
@ -2600,13 +2672,13 @@ function interface_configure($interface = "wan", $reloadall = false, $linkupeven
/* this is not a valid mac address. generate a
* temporary mac address so the machine can get online.
*/
echo "Generating new MAC address.";
echo gettext("Generating new MAC address.");
$random_mac = generate_random_mac_address();
mwexec("/sbin/ifconfig " . escapeshellarg($realhwif) .
" link " . escapeshellarg($random_mac));
$wancfg['spoofmac'] = $random_mac;
write_config();
file_notice("MAC Address altered", "The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface {$realif} has been automatically replaced with {$random_mac}", "Interfaces");
file_notice("MAC Address altered", sprintf(gettext('The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface %1$s has been automatically replaced with %2$s'), $realif, $random_mac), "Interfaces");
}
}
@ -2681,6 +2753,8 @@ function interface_configure($interface = "wan", $reloadall = false, $linkupeven
get_interface_arr(true);
unset($interface_ip_arr_cache[$realif]);
unset($interface_sn_arr_cache[$realif]);
unset($interface_ipv6_arr_cache[$realif]);
unset($interface_snv6_arr_cache[$realif]);
switch ($wancfg['ipaddr']) {
case 'carpdev-dhcp':
@ -2716,6 +2790,16 @@ function interface_configure($interface = "wan", $reloadall = false, $linkupeven
break;
}
switch ($wancfg['ipaddrv6']) {
default:
if ($wancfg['ipaddrv6'] <> "" && $wancfg['subnetv6'] <> "") {
pfSense_interface_setaddress($realif, "{$wancfg['ipaddrv6']}/{$wancfg['subnetv6']}");
// FIXME: Add IPv6 Support to the pfSense module
mwexec("/sbin/ifconfig {$realif} inet6 {$wancfg['ipaddrv6']} prefixlen {$wancfg['subnetv6']} ");
}
break;
}
if(does_interface_exist($wancfg['if']))
interfaces_bring_up($wancfg['if']);
@ -2734,7 +2818,7 @@ function interface_configure($interface = "wan", $reloadall = false, $linkupeven
if (!empty($gif))
array_walk($gif, 'interface_gif_configure');
if ($linkupevent == false) {
if ($linkupevent == false || substr($realif, 0, 4) == "ovpn") {
unset($bridgetmp);
$bridgetmp = link_interface_to_bridge($interface);
if (!empty($bridgetmp))
@ -2780,7 +2864,7 @@ function interface_carpdev_dhcp_configure($interface = "wan") {
if($wanif)
interfaces_bring_up($wanif);
else
log_error("Could not bring wanif up in terface_carpdev_dhcp_configure()");
log_error(gettext("Could not bring wanif up in terface_carpdev_dhcp_configure()"));
return 0;
}
@ -2789,13 +2873,95 @@ function interface_dhcp_configure($interface = "wan") {
global $config, $g;
$wancfg = $config['interfaces'][$interface];
$wanif = $wancfg['if'];
if (empty($wancfg))
$wancfg = array();
$wanif = get_real_interface($interface);
/* bring wan interface up before starting dhclient */
if($wanif)
interfaces_bring_up($wanif);
else
log_error("Could not bring up {$wanif} interface in interface_dhcp_configure()");
/* launch v6 before v4, dhclient can hold up the execution if no dhcp4 is available */
interface_dhcpv6_configure($interface);
interface_dhcpv4_configure($interface);
return 0;
}
function interface_dhcpv6_configure($interface = "wan") {
global $config, $g;
$iflist = get_configured_interface_with_descr(false, true);
$wancfg = $config['interfaces'][$interface];
$wanif = $wancfg['if'];
if (empty($wancfg))
$wancfg = array();
$wanif = get_real_interface($interface);
/* Add IPv6 dhclient here, only wide-dhcp6c works for now. */
$fd = fopen("{$g['varetc_path']}/dhcp6c_{$interface}.conf", "w");
if (!$fd) {
printf("Error: cannot open dhcp6c_{$interface}.conf in interfaces_wan_dhcp_configure() for writing.\n");
return 1;
}
$dhcp6cconf = "";
$dhcp6cconf .= "interface {$wanif} {\n";
$dhcp6cconf .= " send ia-na 0; # request stateful address\n";
if(is_numeric($wancfg['dhcp6-ia-pd-len'])) {
$dhcp6cconf .= " send ia-pd 0; # request prefix delegation\n";
}
$dhcp6cconf .= "request domain-name-servers;\n";
$dhcp6cconf .= "request domain-name;\n";
$dhcp6cconf .= "script \"/etc/rc.newwanipv6\"; # we'd like some nameservers please\n";
$dhcp6cconf .= "};\n";
$dhcp6cconf .= "id-assoc na 0 { };\n";
if(is_numeric($wancfg['dhcp6-ia-pd-len'])) {
/* Setup the prefix delegation */
$dhcp6cconf .= " id-assoc pd 0 {\n";
foreach($iflist as $friendly => $pdinterface) {
// log_error("setting up $friendly - $pdinterface - {$pdinterface['dhcp6-pd-sla-id']}");
if(is_numeric($config['interfaces'][$friendly]['dhcp6-pd-sla-id'])) {
$realif = get_real_interface($friendly);
$dhcp6cconf .= " prefix-interface {$realif} {\n";
$dhcp6cconf .= " sla-id {$config['interfaces'][$friendly]['dhcp6-pd-sla-id']};\n";
$dhcp6cconf .= " sla-len {$wancfg['dhcp6-ia-pd-len']};\n";
$dhcp6cconf .= " };\n";
}
}
$dhcp6cconf .= "};\n";
}
fwrite($fd, $dhcp6cconf);
fclose($fd);
/* accept router advertisements for this interface */
// mwexec("/sbin/sysctl -w net.inet6.ip6.accept_rtadv=1");
mwexec("/sbin/ifconfig {$wanif} inet6 accept_rtadv");
/* fire up dhcp6c for IPv6 first, this backgrounds immediately */
mwexec("/usr/local/sbin/dhcp6c -d -c {$g['varetc_path']}/dhcp6c_{$interface}.conf {$wanif}");
return 0;
}
function interface_dhcpv4_configure($interface = "wan") {
global $config, $g;
$wancfg = $config['interfaces'][$interface];
$wanif = $wancfg['if'];
if (empty($wancfg))
$wancfg = array();
/* generate dhclient_wan.conf */
$fd = fopen("{$g['varetc_path']}/dhclient_{$interface}.conf", "w");
if (!$fd) {
printf("Error: cannot open dhclient_{$interface}.conf in interfaces_wan_dhcp_configure() for writing.\n");
printf(printf(gettext("Error: cannot open dhclient_%s.conf in interfaces_wan_dhcp_configure() for writing.%s"), $interface, "\n"));
return 1;
}
@ -2808,7 +2974,7 @@ function interface_dhcp_configure($interface = "wan") {
$wanif = get_real_interface($interface);
if (empty($wanif)) {
log_error("Invalid interface \"{$interface}\" in interface_dhcp_configure()");
log_error(sprintf(gettext("Invalid interface \"%s\" in interface_dhcp_configure()"), $interface));
return 0;
}
$dhclientconf = "";
@ -2843,7 +3009,7 @@ EOD;
if($wanif)
interfaces_bring_up($wanif);
else
log_error("Could not bring up {$wanif} interface in interface_dhcp_configure()");
log_error(printf(gettext("Could not bring up %s interface in interface_dhcp_configure()"), $wanif));
/* fire up dhclient */
mwexec("/sbin/dhclient -c {$g['varetc_path']}/dhclient_{$interface}.conf {$wanif} > {$g['tmp_path']}/{$wanif}_output > {$g['tmp_path']}/{$wanif}_error_output");
@ -3171,13 +3337,28 @@ function guess_interface_from_ip($ipaddress) {
if(! is_ipaddr($ipaddress)) {
return false;
}
/* create a route table we can search */
exec("netstat -rnWf inet", $output, $ret);
foreach($output as $line) {
if(preg_match("/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\/[0-9]+[ ]+link[#]/", $line)) {
$fields = preg_split("/[ ]+/", $line);
if(ip_in_subnet($ipaddress, $fields[0])) {
return $fields[6];
if(is_ipaddrv4($ipaddress)) {
/* create a route table we can search */
exec("netstat -rnWf inet", $output, $ret);
foreach($output as $line) {
if(preg_match("/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\/[0-9]+[ ]+link[#]/", $line)) {
$fields = preg_split("/[ ]+/", $line);
if(ip_in_subnet($ipaddress, $fields[0])) {
return $fields[6];
}
}
}
}
/* FIXME: This works from cursory testing, regexp might need fine tuning */
if(is_ipaddrv6($ipaddress)) {
/* create a route table we can search */
exec("netstat -rnWf inet6", $output, $ret);
foreach($output as $line) {
if(preg_match("/[0-9a-f]+[:]+[0-9a-f]+[:]+[\/][0-9]+/", $line)) {
$fields = preg_split("/[ ]+/", $line);
if(ip_in_subnet($ipaddress, $fields[0])) {
return $fields[6];
}
}
}
}
@ -3226,8 +3407,22 @@ function find_carp_interface($ip) {
if (is_array($config['virtualip']['vip'])) {
foreach ($config['virtualip']['vip'] as $vip) {
if ($vip['mode'] == "carp" || $vip['mode'] == "carpdev") {
$carp_ip = get_interface_ip($vip['interface']);
$if = `ifconfig | grep '$ip ' -B1 | head -n1 | cut -d: -f1`;
if(is_ipaddrv4($ip)) {
$carp_ip = get_interface_ip($vip['interface']);
}
if(is_ipaddrv6($ip)) {
$carp_ip = get_interface_ipv6($vip['interface']);
}
exec("/sbin/ifconfig", $output, $return);
foreach($output as $line) {
$elements = preg_split("/[ ]+/i", $line);
if(strstr($elements[0], "vip"))
$curif = str_replace(":", "", $elements[0]);
if(stristr($line, $ip)) {
$if = $curif;
continue;
}
}
if ($if)
return $if;
}
@ -3415,6 +3610,46 @@ function find_interface_ip($interface, $flush = false)
return $interface_ip_arr_cache[$interface];
}
/*
* find_interface_ipv6($interface): return the interface ip (first found)
*/
function find_interface_ipv6($interface, $flush = false)
{
global $interface_ipv6_arr_cache;
global $interface_snv6_arr_cache;
global $config;
$interface = str_replace("\n", "", $interface);
if (!does_interface_exist($interface))
return;
/* Setup IP cache */
if (!isset($interface_ipv6_arr_cache[$interface]) or $flush) {
$ifinfo = pfSense_get_interface_addresses($interface);
// FIXME: Add IPv6 support to the pfSense module
exec("/sbin/ifconfig {$interface} inet6", $output);
foreach($output as $line) {
if(preg_match("/inet6/", $line)) {
$parts = explode(" ", $line);
if(! preg_match("/fe80::/", $parts[1])) {
$ifinfo['ipaddrv6'] = $parts[1];
if($parts[2] == "-->") {
$parts[5] = "126";
$ifinfo['subnetbitsv6'] = $parts[5];
} else {
$ifinfo['subnetbitsv6'] = $parts[3];
}
}
}
}
$interface_ipv6_arr_cache[$interface] = $ifinfo['ipaddrv6'];
$interface_snv6_arr_cache[$interface] = $ifinfo['subnetbitsv6'];
}
return $interface_ipv6_arr_cache[$interface];
}
function find_interface_subnet($interface, $flush = false)
{
global $interface_sn_arr_cache;
@ -3433,6 +3668,40 @@ function find_interface_subnet($interface, $flush = false)
return $interface_sn_arr_cache[$interface];
}
function find_interface_subnetv6($interface, $flush = false)
{
global $interface_snv6_arr_cache;
global $interface_ipv6_arr_cache;
$interface = str_replace("\n", "", $interface);
if (does_interface_exist($interface) == false)
return;
if (!isset($interface_snv6_arr_cache[$interface]) or $flush) {
$ifinfo = pfSense_get_interface_addresses($interface);
// FIXME: Add IPv6 support to the pfSense module
exec("/sbin/ifconfig {$interface} inet6", $output);
foreach($output as $line) {
if(preg_match("/inet6/", $line)) {
$parts = explode(" ", $line);
if(! preg_match("/fe80::/", $parts[1])) {
$ifinfo['ipaddrv6'] = $parts[1];
if($parts[2] == "-->") {
$parts[5] = "126";
$ifinfo['subnetbitsv6'] = $parts[5];
} else {
$ifinfo['subnetbitsv6'] = $parts[3];
}
}
}
}
$interface_ipv6_arr_cache[$interface] = $ifinfo['ipaddrv6'];
$interface_snv6_arr_cache[$interface] = $ifinfo['subnetbitsv6'];
}
return $interface_snv6_arr_cache[$interface];
}
function ip_in_interface_alias_subnet($interface, $ipalias) {
global $config;
@ -3473,6 +3742,25 @@ function get_interface_ip($interface = "wan")
return null;
}
function get_interface_ipv6($interface = "wan")
{
$realif = get_real_interface($interface);
if (!$realif) {
if (preg_match("/^carp/i", $interface))
$realif = $interface;
else if (preg_match("/^vip/i", $interface))
$realif = $interface;
else
return null;
}
$curip = find_interface_ipv6($realif);
if ($curip && is_ipaddrv6($curip) && ($curip != "::"))
return $curip;
else
return null;
}
function get_interface_subnet($interface = "wan")
{
$realif = get_real_interface($interface);
@ -3492,6 +3780,25 @@ function get_interface_subnet($interface = "wan")
return null;
}
function get_interface_subnetv6($interface = "wan")
{
$realif = get_real_interface($interface);
if (!$realif) {
if (preg_match("/^carp/i", $interface))
$realif = $interface;
else if (preg_match("/^vip/i", $interface))
$realif = $interface;
else
return null;
}
$cursn = find_interface_subnetv6($realif);
if (!empty($cursn))
return $cursn;
return null;
}
/* return outside interfaces with a gateway */
function get_interfaces_with_gateway() {
global $config;

View File

@ -36,21 +36,21 @@
/* IPsec defines */
$my_identifier_list = array(
'myaddress' => array( 'desc' => 'My IP address', 'mobile' => true ),
'address' => array( 'desc' => 'IP address', 'mobile' => true ),
'fqdn' => array( 'desc' => 'Distinguished name', 'mobile' => true ),
'user_fqdn' => array( 'desc' => 'User distinguished name', 'mobile' => true ),
'asn1dn' => array( 'desc' => 'ASN.1 distinguished Name', 'mobile' => true ),
'keyid tag' => array( 'desc' => 'KeyID tag', 'mobile' => true ),
'dyn_dns' => array( 'desc' => 'Dynamic DNS', 'mobile' => true ));
'myaddress' => array( 'desc' => gettext('My IP address'), 'mobile' => true ),
'address' => array( 'desc' => gettext('IP address'), 'mobile' => true ),
'fqdn' => array( 'desc' => gettext('Distinguished name'), 'mobile' => true ),
'user_fqdn' => array( 'desc' => gettext('User distinguished name'), 'mobile' => true ),
'asn1dn' => array( 'desc' => gettext('ASN.1 distinguished Name'), 'mobile' => true ),
'keyid tag' => array( 'desc' => gettext('KeyID tag'), 'mobile' => true ),
'dyn_dns' => array( 'desc' => gettext('Dynamic DNS'), 'mobile' => true ));
$peer_identifier_list = array(
'peeraddress' => array( 'desc' => 'Peer IP address', 'mobile' => false ),
'address' => array( 'desc' => 'IP address', 'mobile' => false ),
'fqdn' => array( 'desc' => 'Distinguished name', 'mobile' => true ),
'user_fqdn' => array( 'desc' => 'User distinguished name', 'mobile' => true ),
'asn1dn' => array( 'desc' => 'ASN.1 distinguished Name', 'mobile' => true ),
'keyid tag' => array( 'desc' =>'KeyID tag', 'mobile' => true ));
'peeraddress' => array( 'desc' => gettext('Peer IP address'), 'mobile' => false ),
'address' => array( 'desc' => gettext('IP address'), 'mobile' => false ),
'fqdn' => array( 'desc' => gettext('Distinguished name'), 'mobile' => true ),
'user_fqdn' => array( 'desc' => gettext('User distinguished name'), 'mobile' => true ),
'asn1dn' => array( 'desc' => gettext('ASN.1 distinguished Name'), 'mobile' => true ),
'keyid tag' => array( 'desc' =>gettext('KeyID tag'), 'mobile' => true ));
$p1_ealgos = array(
'aes' => array( 'name' => 'AES', 'keysel' => array( 'lo' => 128, 'hi' => 256, 'step' => 64 ) ),
@ -82,7 +82,8 @@ $p1_authentication_methods = array(
'pre_shared_key' => array( 'name' => 'Mutual PSK', 'mobile' => false ) );
$p2_modes = array(
'tunnel' => 'Tunnel',
'tunnel' => 'Tunnel IPv4',
'tunnel6' => 'Tunnel IPv6',
'transport' => 'Transport');
$p2_protos = array(
@ -126,14 +127,21 @@ function ipsec_get_phase1_src(& $ph1ent) {
if ($ph1ent['interface']) {
if (!is_ipaddr($ph1ent['interface'])) {
$if = $ph1ent['interface'];
$interfaceip = get_interface_ip($if);
if($ph1ent['protocol'] == "inet6") {
$interfaceip = get_interface_ipv6($if);
} else {
$interfaceip = get_interface_ip($if);
}
} else {
$interfaceip=$ph1ent['interface'];
}
}
else {
} else {
$if = "wan";
$interfaceip = get_interface_ip($if);
if($ph1ent['protocol'] == "inet6") {
$interfaceip = get_interface_ipv6($if);
} else {
$interfaceip = get_interface_ip($if);
}
}
return $interfaceip;
@ -166,21 +174,33 @@ function ipsec_idinfo_to_cidr(& $idinfo,$addrbits = false) {
switch ($idinfo['type'])
{
case "address":
if ($addrbits)
return $idinfo['address']."/32";
else
if ($addrbits) {
if($idinfo['mode'] == "tunnel6") {
return $idinfo['address']."/128";
} else {
return $idinfo['address']."/32";
}
} else {
return $idinfo['address'];
}
case "network":
return $idinfo['address']."/".$idinfo['netbits'];
case "none":
case "mobile":
return "0.0.0.0/0";
default:
$address = get_interface_ip($idinfo['type']);
$netbits = get_interface_subnet($idinfo['type']);
$address = gen_subnet($address,$netbits);
return $address."/".$netbits;
}
if($idinfo['mode'] == "tunnel6") {
$address = get_interface_ipv6($idinfo['type']);
$netbits = get_interface_subnetv6($idinfo['type']);
$address = gen_subnetv6($address,$netbits);
return $address."/".$netbits;
} else {
$address = get_interface_ip($idinfo['type']);
$netbits = get_interface_subnet($idinfo['type']);
$address = gen_subnet($address,$netbits);
return $address."/".$netbits;
}
}
}
/*
@ -192,22 +212,33 @@ function ipsec_idinfo_to_subnet(& $idinfo,$addrbits = false) {
switch ($idinfo['type'])
{
case "address":
if ($addrbits)
return $idinfo['address']."/255.255.255.255";
else
if ($addrbits) {
if($idinfo['mode'] == "tunnel6") {
return $idinfo['address']."/128";
} else {
return $idinfo['address']."/255.255.255.255";
}
} else {
return $idinfo['address'];
}
case "none":
case "network":
return $idinfo['address']."/".gen_subnet_mask($idinfo['netbits']);
case "mobile":
return "0.0.0.0/0";
default:
$address = get_interface_ip($idinfo['type']);
$netbits = get_interface_subnet($idinfo['type']);
$address = gen_subnet($address,$netbits);
$netbits = gen_subnet_mask($netbits);
return $address."/".netbits;
}
if($idinfo['mode'] == "tunnel6") {
$address = get_interface_ipv6($idinfo['type']);
$netbits = get_interface_subnetv6($idinfo['type']);
$address = gen_subnetv6($address,$netbits);
return $address."/".$netbits;
} else {
$address = get_interface_ip($idinfo['type']);
$netbits = get_interface_subnet($idinfo['type']);
$address = gen_subnet($address,$netbits);
return $address."/".$netbits;
}
}
}
/*
@ -222,9 +253,9 @@ function ipsec_idinfo_to_text(& $idinfo) {
case "network":
return $idinfo['address']."/".$idinfo['netbits'];
case "mobile":
return "Mobile Client";
return gettext("Mobile Client");
case "none":
return "None";
return gettext("None");
default:
return strtoupper($idinfo['type']);
}
@ -270,7 +301,7 @@ function ipsec_phase1_status(& $ph1ent) {
function ipsec_phase2_status(& $spd,& $sad,& $ph1ent,& $ph2ent) {
$loc_ip = ipsec_get_phase1_src($ph1ent);
$rmt_ip = gethostbyname(ipsec_get_phase1_dst($ph1ent));
$rmt_ip = resolve_retry(ipsec_get_phase1_dst($ph1ent));
$loc_id = ipsec_idinfo_to_cidr($ph2ent['localid'],true);
$rmt_id = ipsec_idinfo_to_cidr($ph2ent['remoteid'],true);

View File

@ -65,7 +65,7 @@ function list_phpfiles($path, & $found) {
$dir = opendir($path);
if (!$dir) {
echo "list_phpfiles: unable to examine path {$path}\n";
printf(gettext("list_phpfiles: unable to examine path %s\n"), $path);
return;
}
@ -96,7 +96,7 @@ function read_file_metadata($fpath, & $metadata, $taglist = false) {
$fdata = @file_get_contents($fpath);
if (!$fdata) {
echo "unable to read {$fpath}\n";
printf(gettext("unable to read %s\n"), $fpath);
continue;
}
@ -129,7 +129,7 @@ function read_file_metadata($fpath, & $metadata, $taglist = false) {
$tagend = substr($fdata, $tagend_off + 4, $tagend_len - 4);
if ($tagbeg != $tagend) {
echo "error: tag mismatch ( {$tagbeg} != {$tagend} ) in '$fpath'\n";
printf(gettext("error: tag mismatch ( %1\$s != %2\$s ) in '%3\$s'%4\$s"), $tagbeg, $tagend, $fpath, "\n");
break;
}
@ -140,7 +140,7 @@ function read_file_metadata($fpath, & $metadata, $taglist = false) {
$mdata = substr($fdata, $mdata_off, $mdata_len);
if (!strlen($mdata)) {
echo "warning: tag {$tagbeg} has no data in '$fpath'\n";
printf(gettext("warning: tag %1\$s has no data in '%2\$s'%3\$s"), $tagbeg, $fpath, "\n");
break;
}
@ -160,7 +160,7 @@ function read_file_metadata($fpath, & $metadata, $taglist = false) {
$valtag = stripos($line, "##|*");
if ($valtag === false || $valtag) {
echo "warning: tag {$tagbeg} has malformed data in '$fpath'\n";
printf(gettext("warning: tag %1\$s has malformed data in '%2\$s'%3\$s"), $tagbeg, $fpath, "\n");
continue;
}
@ -182,7 +182,7 @@ function read_file_metadata($fpath, & $metadata, $taglist = false) {
}
if (!isset($vname) || !isset($vdata)) {
echo "warning: tag {$tagbeg} has invalid data in '$fpath'\n";
printf(gettext("warning: tag %1\$s has invalid data in '%2\$s'%3\$s"), $tagbeg, $fpath, "\n");
continue;
}
@ -197,4 +197,4 @@ function read_file_metadata($fpath, & $metadata, $taglist = false) {
$metadata[$fname] = $tags;
}
?>
?>

View File

@ -73,12 +73,12 @@ function file_notice($id, $notice, $category = "General", $url = "", $priority =
$queue[$queuekey] = $toqueue;
$queueout = fopen($notice_path, "w");
if(!$queueout) {
log_error("Could not open {$notice_path} for writing");
log_error(printf(gettext("Could not open %s for writing"), $notice_path));
return;
}
fwrite($queueout, serialize($queue));
fclose($queueout);
log_error("New alert found: {$notice}");
log_error("New alert found: $notice");
/* soekris */
if(file_exists("/dev/led/error"))
exec("/bin/echo 1 > /dev/led/error");
@ -324,11 +324,11 @@ function notify_via_smtp($message) {
fclose($fd);
if($smtp->SendMessage($from, array($to), $headers, $message)) {
log_error("Message sent to {$to} OK");
log_error(sprintf(gettext("Message sent to %s OK"), $to));
return;
} else {
log_error("Could not send the message to {$to} -- Error: {$smtp->error}");
return("Could not send the message to {$to} -- Error: {$smtp->error}");
log_error(sprintf(gettext('Could not send the message to %1$s -- Error: %2$s'), $to, $smtp->error));
return(sprintf(gettext('Could not send the message to %1$s -- Error: %2$s'), $to, $smtp->error));
}
}

View File

@ -96,11 +96,6 @@ if (!$username || !$password) {
/* Replaced by a sed with propper variables used below(ldap parameters). */
//<template>
if (file_exists("{$g['varetc_path']}/openvpn/{$modeid}.ca")) {
putenv("LDAPTLS_CACERT={$g['varetc_path']}/openvpn/{$modeid}.ca");
putenv("LDAPTLS_REQCERT=never");
}
$authenticated = false;
if (($strictusercn === true) && ($common_name != $username)) {
@ -127,4 +122,4 @@ syslog(LOG_WARNING, "user {$username} authenticated\n");
exit(0);
?>
?>

View File

@ -72,15 +72,15 @@ $openvpn_dh_lengths = array(
1024, 2048, 4096 );
$openvpn_server_modes = array(
'p2p_tls' => "Peer to Peer ( SSL/TLS )",
'p2p_shared_key' => "Peer to Peer ( Shared Key )",
'server_tls' => "Remote Access ( SSL/TLS )",
'server_user' => "Remote Access ( User Auth )",
'server_tls_user' => "Remote Access ( SSL/TLS + User Auth )");
'p2p_tls' => gettext("Peer to Peer ( SSL/TLS )"),
'p2p_shared_key' => gettext("Peer to Peer ( Shared Key )"),
'server_tls' => gettext("Remote Access ( SSL/TLS )"),
'server_user' => gettext("Remote Access ( User Auth )"),
'server_tls_user' => gettext("Remote Access ( SSL/TLS + User Auth )"));
$openvpn_client_modes = array(
'p2p_tls' => "Peer to Peer ( SSL/TLS )",
'p2p_shared_key' => "Peer to Peer ( Shared Key )" );
'p2p_tls' => gettext("Peer to Peer ( SSL/TLS )"),
'p2p_shared_key' => gettext("Peer to Peer ( Shared Key )") );
function openvpn_create_key() {
@ -168,7 +168,7 @@ function openvpn_get_cipherlist() {
$words = explode(' ', $line);
$ciphers[$words[0]] = "{$words[0]} {$words[1]}";
}
$ciphers["none"] = "None (No Encryption)";
$ciphers["none"] = gettext("None (No Encryption)");
return $ciphers;
}
@ -192,14 +192,14 @@ function openvpn_validate_engine($engine) {
function openvpn_validate_host($value, $name) {
$value = trim($value);
if (empty($value) || (!is_domain($value) && !is_ipaddr($value)))
return "The field '$name' must contain a valid IP address or domain name.";
return sprintf(gettext("The field '%s' must contain a valid IP address or domain name."), $name);
return false;
}
function openvpn_validate_port($value, $name) {
$value = trim($value);
if (empty($value) || !is_numeric($value) || $value < 0 || ($value > 65535))
return "The field '$name' must contain a valid port, ranging from 0 to 65535.";
return sprintf(gettext("The field '%s' must contain a valid port, ranging from 0 to 65535."), $name);
return false;
}
@ -208,7 +208,7 @@ function openvpn_validate_cidr($value, $name) {
if (!empty($value)) {
list($ip, $mask) = explode('/', $value);
if (!is_ipaddr($ip) or !is_numeric($mask) or ($mask > 32) or ($mask < 0))
return "The field '$name' must contain a valid CIDR range.";
return sprintf(gettext("The field '%s' must contain a valid CIDR range."), $name);
}
return false;
}
@ -328,20 +328,31 @@ function openvpn_reconfigure($mode, $settings) {
$interface = $settings['interface'];
$ipaddr = $settings['ipaddr'];
$ipaddrv6 = $settings['ipaddrv6'];
// If a specific ip address (VIP) is requested, use it.
// Otherwise, if a specific interface is requested, use it
// If "any" interface was selected, local directive will be ommited.
if (!empty($ipaddr)) {
if (is_ipaddrv4($ipaddr)) {
$iface_ip=$ipaddr;
} elseif (is_ipaddrv6($ipaddrv6)) {
$iface_ipv6=$ipaddrv6;
} else {
if ((!empty($interface)) && (strcmp($interface, "any"))) {
$iface_ip=get_interface_ip($interface);
}
if ((!empty($interface)) && (strcmp($interface, "any"))) {
$iface_ipv6=get_interface_ipv6($interface);
}
}
$conf = "dev {$devname}\n";
$conf .= "dev-type {$settings['dev_mode']}\n";
switch($settings['dev_mode']) {
case "tun":
$conf .= "tun-ipv6\n";
break;
}
$conf .= "dev-node /dev/{$tunname}\n";
$conf .= "writepid {$pfile}\n";
$conf .= "#user nobody\n";
@ -357,9 +368,12 @@ function openvpn_reconfigure($mode, $settings) {
$conf .= "up /usr/local/sbin/ovpn-linkup\n";
$conf .= "down /usr/local/sbin/ovpn-linkdown\n";
if (!empty($iface_ip)) {
if (is_ipaddrv4($iface_ip)) {
$conf .= "local {$iface_ip}\n";
}
if (is_ipaddrv6($iface_ipv6)) {
// $conf .= "local {$iface_ipv6}\n";
}
if (openvpn_validate_engine($settings['engine']) && ($settings['engine'] != "none"))
$conf .= "engine {$settings['engine']}\n";
@ -368,6 +382,7 @@ function openvpn_reconfigure($mode, $settings) {
if ($mode == 'server') {
list($ip, $cidr) = explode('/', $settings['tunnel_network']);
list($ipv6, $prefix) = explode('/', $settings['tunnel_networkv6']);
$mask = gen_subnet_mask($cidr);
// configure tls modes
@ -400,6 +415,8 @@ function openvpn_reconfigure($mode, $settings) {
case 'server_user':
case 'server_tls_user':
$conf .= "server {$ip} {$mask}\n";
if(is_ipaddr($ipv6))
$conf .= "server-ipv6 {$ipv6}/{$prefix}\n";
$conf .= "client-config-dir {$g['varetc_path']}/openvpn-csc\n";
break;
}
@ -448,6 +465,10 @@ function openvpn_reconfigure($mode, $settings) {
$mask = gen_subnet_mask($mask);
$conf .= "push \"route $ip $mask\"\n";
}
if ($settings['local_networkv6']) {
list($ipv6, $prefix) = explode('/', $settings['local_networkv6']);
$conf .= "push \"route-ipv6 $ipv6/$prefix\"\n";
}
switch($settings['mode']) {
case 'server_tls':
@ -541,6 +562,7 @@ function openvpn_reconfigure($mode, $settings) {
$conf .= "dh {$g['etc_path']}/dh-parameters.{$settings['dh_length']}\n";
if (!empty($settings['crlref'])) {
$crl = lookup_crl($settings['crlref']);
crl_update($crl);
openvpn_add_keyfile($crl['text'], $conf, $mode_id, "crl-verify");
}
if ($settings['tls']) {
@ -969,4 +991,4 @@ function openvpn_refresh_crls() {
}
}
?>
?>

View File

@ -342,11 +342,11 @@ function get_carp_interface_status($carpinterface) {
exec("/sbin/ifconfig $carpinterface | /usr/bin/grep -v grep | /usr/bin/grep carp:", $carp_query);
foreach($carp_query as $int) {
if(stristr($int, "MASTER"))
return "MASTER";
return gettext("MASTER");
if(stristr($int, "BACKUP"))
return "BACKUP";
return gettext("BACKUP");
if(stristr($int, "INIT"))
return "INIT";
return gettext("INIT");
}
return;
}
@ -414,7 +414,7 @@ function after_sync_bump_adv_skew() {
}
}
if($processed_skew == 1)
write_config("After synch increase advertising skew");
write_config(gettext("After synch increase advertising skew"));
}
/*
@ -459,16 +459,16 @@ function WakeOnLan($addr, $mac)
// send it to the broadcast address using UDP
$s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if ($s == false) {
log_error("Error creating socket!");
log_error("Error code is '".socket_last_error($s)."' - " . socket_strerror(socket_last_error($s)));
log_error(gettext("Error creating socket!"));
log_error(sprintf(gettext("Error code is '%1\$s' - %2\$s"), socket_last_error($s), socket_strerror(socket_last_error($s))));
} else {
// setting a broadcast option to socket:
$opt_ret = socket_set_option($s, 1, 6, TRUE);
if($opt_ret < 0)
log_error("setsockopt() failed, error: " . strerror($opt_ret));
log_error(sprintf(gettext("setsockopt() failed, error: %s"), strerror($opt_ret)));
$e = socket_sendto($s, $msg, strlen($msg), 0, $addr, 2050);
socket_close($s);
log_error("Magic Packet sent ({$e}) to {$addr} MAC={$mac}");
log_error(sprintf(gettext('Magic Packet sent (%1$s) to {%2$s} MAC=%3$s'), $e, $addr, $mac));
return true;
}
@ -545,7 +545,7 @@ function restore_config_section($section, $new_contents) {
@unlink($g['tmp_path'] . "/tmpxml");
if(file_exists("{$g['tmp_path']}/config.cache"))
unlink("{$g['tmp_path']}/config.cache");
write_config("Restored {$section} of config file (maybe from CARP partner)");
write_config(sprintf(gettext("Restored %s of config file (maybe from CARP partner)"), $section));
disable_security_checks();
conf_mount_ro();
return;
@ -567,7 +567,7 @@ function merge_config_section($section, $new_contents) {
$section_xml = parse_xml_config($fname, $section);
$config[$section] = $section_xml;
unlink($fname);
write_config("Restored {$section} of config file (maybe from CARP partner)");
write_config(sprintf(gettext("Restored %s of config file (maybe from CARP partner)"), $section));
disable_security_checks();
conf_mount_ro();
return;
@ -726,10 +726,10 @@ function call_pfsense_method($method, $params, $timeout = 0) {
}
$resp = $cli->send($msg, $timeout);
if(!is_object($resp)) {
log_error("XMLRPC communication error: " . $cli->errstr);
log_error(sprintf(gettext("XMLRPC communication error: %s"), $cli->errstr));
return false;
} elseif($resp->faultCode()) {
log_error("XMLRPC request failed with error " . $resp->faultCode() . ": " . $resp->faultString());
log_error(sprintf(gettext('XMLRPC request failed with error %1$s: %2$s'), $resp->faultCode(), $resp->faultString()));
return false;
} else {
return XML_RPC_Decode($resp->value());
@ -822,7 +822,7 @@ function reload_interfaces_sync() {
global $config, $g;
if($g['debug'])
log_error("reload_interfaces_sync() is starting.");
log_error(gettext("reload_interfaces_sync() is starting."));
/* parse config.xml again */
$config = parse_config(true);
@ -830,10 +830,10 @@ function reload_interfaces_sync() {
/* enable routing */
system_routing_enable();
if($g['debug'])
log_error("Enabling system routing");
log_error(gettext("Enabling system routing"));
if($g['debug'])
log_error("Cleaning up Interfaces");
log_error(gettext("Cleaning up Interfaces"));
/* set up interfaces */
interfaces_configure();
@ -939,7 +939,7 @@ function auto_login() {
}
if (!$fd) {
conf_mount_ro();
log_error("Enabling auto login was not possible.");
log_error(gettext("Enabling auto login was not possible."));
return;
}
foreach($getty_split as $gs) {
@ -1037,15 +1037,26 @@ function is_dhcp_server_enabled()
$dhcpdenable = false;
if (!is_array($config['dhcpd']))
if ((!is_array($config['dhcpd'])) && (!is_array($config['dhcpdv6'])))
return false;
$Iflist = get_configured_interface_list();
foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) {
if (isset($dhcpifconf['enable']) && isset($Iflist[$dhcpif])) {
$dhcpdenable = true;
break;
if(is_array($config['dhcpd'])) {
foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) {
if (isset($dhcpifconf['enable']) && isset($Iflist[$dhcpif])) {
$dhcpdenable = true;
break;
}
}
}
if(is_array($config['dhcpdv6'])) {
foreach ($config['dhcpdv6'] as $dhcpv6if => $dhcpv6ifconf) {
if (isset($dhcpv6ifconf['enable']) && isset($Iflist[$dhcpv6if])) {
$dhcpdenable = true;
break;
}
}
}
@ -1100,7 +1111,7 @@ function get_ppp_uptime($port){
}
return convert_seconds_to_hms($sec);
} else {
$total_time = "No history data found!";
$total_time = gettext("No history data found!");
return $total_time;
}
}
@ -1123,11 +1134,13 @@ function get_interface_info($ifdescr) {
$ifinfo['macaddr'] = $ifinfotmp['macaddr'];
$ifinfo['ipaddr'] = $ifinfotmp['ipaddr'];
$ifinfo['subnet'] = $ifinfotmp['subnet'];
$ifinfo['ipaddrv6'] = get_interface_ipv6($ifdescr);
$ifinfo['subnetv6'] = get_interface_subnetv6($ifdescr);
if (isset($ifinfotmp['link0']))
$link0 = "down";
$ifinfotmp = pfSense_get_interface_stats($chkif);
$ifinfo['inpkts'] = $ifinfotmp['inpkts'];
$ifinfo['outpkts'] = $ifinfotmp['outpkts'];
// $ifinfo['inpkts'] = $ifinfotmp['inpkts'];
// $ifinfo['outpkts'] = $ifinfotmp['outpkts'];
$ifinfo['inerrs'] = $ifinfotmp['inerrs'];
$ifinfo['outerrs'] = $ifinfotmp['outerrs'];
$ifinfo['collisions'] = $ifinfotmp['collisions'];
@ -1137,31 +1150,43 @@ function get_interface_info($ifdescr) {
exec("/sbin/pfctl -vvsI -i {$chkif}", $pfctlstats);
$pf_in4_pass = preg_split("/ +/ ", $pfctlstats[3]);
$pf_out4_pass = preg_split("/ +/", $pfctlstats[5]);
$pf_in6_pass = preg_split("/ +/ ", $pfctlstats[7]);
$pf_out6_pass = preg_split("/ +/", $pfctlstats[9]);
$in4_pass = $pf_in4_pass[5];
$out4_pass = $pf_out4_pass[5];
$in4_pass_packets = $pf_in4_pass[3];
$out4_pass_packets = $pf_out4_pass[3];
$ifinfo['inbytespass'] = $in4_pass;
$ifinfo['outbytespass'] = $out4_pass;
$ifinfo['inpktspass'] = $in4_pass_packets;
$ifinfo['outpktspass'] = $out4_pass_packets;
$in6_pass = $pf_in6_pass[5];
$out6_pass = $pf_out6_pass[5];
$in6_pass_packets = $pf_in6_pass[3];
$out6_pass_packets = $pf_out6_pass[3];
$ifinfo['inbytespass'] = $in4_pass + $in6_pass;
$ifinfo['outbytespass'] = $out4_pass + $out6_pass;
$ifinfo['inpktspass'] = $in4_pass_packets + $in6_pass_packets;
$ifinfo['outpktspass'] = $out4_pass_packets + $in6_pass_packets;
/* Block */
$pf_in4_block = preg_split("/ +/", $pfctlstats[4]);
$pf_out4_block = preg_split("/ +/", $pfctlstats[6]);
$pf_in6_block = preg_split("/ +/", $pfctlstats[8]);
$pf_out6_block = preg_split("/ +/", $pfctlstats[10]);
$in4_block = $pf_in4_block[5];
$out4_block = $pf_out4_block[5];
$in4_block_packets = $pf_in4_block[3];
$out4_block_packets = $pf_out4_block[3];
$ifinfo['inbytesblock'] = $in4_block;
$ifinfo['outbytesblock'] = $out4_block;
$ifinfo['inpktsblock'] = $in4_block_packets;
$ifinfo['outpktsblock'] = $out4_block_packets;
$in6_block = $pf_in6_block[5];
$out6_block = $pf_out6_block[5];
$in6_block_packets = $pf_in6_block[3];
$out6_block_packets = $pf_out6_block[3];
$ifinfo['inbytesblock'] = $in4_block + $in6_block;
$ifinfo['outbytesblock'] = $out4_block + $out6_block;
$ifinfo['inpktsblock'] = $in4_block_packets + $in6_block_packets;
$ifinfo['outpktsblock'] = $out4_block_packets + $out6_block_packets;
$ifinfo['inbytes'] = $in4_pass + $in4_block;
$ifinfo['outbytes'] = $out4_pass + $out4_block;
$ifinfo['inpkts'] = $in4_pass_packets + $in4_block_packets;
$ifinfo['outpkts'] = $in4_pass_packets + $out4_block_packets;
$ifinfo['inbytes'] = $in4_pass + $in6_pass;
$ifinfo['outbytes'] = $out4_pass + $out6_pass;
$ifinfo['inpkts'] = $in4_pass_packets + $in6_pass_packets;
$ifinfo['outpkts'] = $in4_pass_packets + $out6_pass_packets;
$ifconfiginfo = "";
$link_type = $config['interfaces'][$ifdescr]['ipaddr'];
@ -1208,7 +1233,7 @@ function get_interface_info($ifdescr) {
break;
if (!file_exists($dev)) {
$ifinfo['nodevice'] = 1;
$ifinfo['pppinfo'] = $dev . " device not present! Is the modem attached to the system?";
$ifinfo['pppinfo'] = $dev . " " . gettext("device not present! Is the modem attached to the system?");
}
// Calculate cumulative uptime for PPP link. Useful for connections that have per minute/hour contracts so you don't go over!
if (isset($ppp['uptime']))
@ -1248,8 +1273,8 @@ function get_interface_info($ifdescr) {
if (preg_match("/status: (.*)$/", $ici, $matches)) {
if ($matches[1] != "active")
$ifinfo['status'] = $matches[1];
if($ifinfo['status'] == "running")
$ifinfo['status'] = "up";
if($ifinfo['status'] == gettext("running"))
$ifinfo['status'] = gettext("up");
}
if (preg_match("/channel (\S*)/", $ici, $matches)) {
$ifinfo['channel'] = $matches[1];
@ -1275,8 +1300,10 @@ function get_interface_info($ifdescr) {
}
/* lookup the gateway */
if (interface_has_gateway($ifdescr))
if (interface_has_gateway($ifdescr)) {
$ifinfo['gateway'] = get_interface_gateway($ifdescr);
$ifinfo['gatewayv6'] = get_interface_gateway_v6($ifdescr);
}
}
$bridge = "";
@ -1284,13 +1311,13 @@ function get_interface_info($ifdescr) {
if($bridge) {
$bridge_text = `/sbin/ifconfig {$bridge}`;
if(stristr($bridge_text, "blocking") <> false) {
$ifinfo['bridge'] = "<b><font color='red'>blocking</font></b> - check for ethernet loops";
$ifinfo['bridge'] = "<b><font color='red'>" . gettext("blocking") . "</font></b> - " . gettext("check for ethernet loops");
$ifinfo['bridgeint'] = $bridge;
} else if(stristr($bridge_text, "learning") <> false) {
$ifinfo['bridge'] = "learning";
$ifinfo['bridge'] = gettext("learning");
$ifinfo['bridgeint'] = $bridge;
} else if(stristr($bridge_text, "forwarding") <> false) {
$ifinfo['bridge'] = "forwarding";
$ifinfo['bridge'] = gettext("forwarding");
$ifinfo['bridgeint'] = $bridge;
}
}
@ -1401,7 +1428,7 @@ function compare_hostname_to_dnscache($hostname) {
if(trim($oldcontents) != trim($contents)) {
if($g['debug']) {
log_error("DNSCACHE: Found old IP {$oldcontents} and new IP {$contents}");
log_error(sprintf(gettext('DNSCACHE: Found old IP %1$s and new IP %2$s'), $oldcontents, $contents));
}
return ($oldcontents);
} else {
@ -2181,6 +2208,37 @@ function filter_rules_compare($a, $b) {
return compare_interface_friendly_names($a['interface'], $b['interface']);
}
function generate_ipv6_from_mac($mac) {
$elements = explode(":", $mac);
if(count($elements) <> 6)
return false;
$i = 0;
$ipv6 = "fe80::";
foreach($elements as $byte) {
if($i == 0) {
$hexadecimal = substr($byte, 1, 2);
$bitmap = base_convert($hexadecimal, 16, 2);
$bitmap = str_pad($bitmap, 4, "0", STR_PAD_LEFT);
$bitmap = substr($bitmap, 0, 2) ."1". substr($bitmap, 3,4);
$byte = substr($byte, 0, 1) . base_convert($bitmap, 2, 16);
}
$ipv6 .= $byte;
if($i == 1) {
$ipv6 .= ":";
}
if($i == 3) {
$ipv6 .= ":";
}
if($i == 2) {
$ipv6 .= "ff:fe";
}
$i++;
}
return $ipv6;
}
/****f* pfsense-utils/load_mac_manufacturer_table
* NAME
* load_mac_manufacturer_table
@ -2245,4 +2303,4 @@ function pfSense_handle_custom_code($src_dir) {
}
}
?>
?>

View File

@ -194,7 +194,7 @@ function get_pkg_sizes($pkgs = 'all') {
function resync_all_package_configs($show_message = false) {
global $config, $pkg_interface, $g;
log_error("Resyncing configuration for all packages.");
log_error(gettext("Resyncing configuration for all packages."));
if (!is_array($config['installedpackages']['package']))
return;
@ -214,7 +214,7 @@ function resync_all_package_configs($show_message = false) {
stop_service($package['name']);
sync_package($idx, true, true);
if($pkg_interface == "console")
echo "\nSyncing packages:";
echo "\n" . gettext("Syncing packages:");
}
if($show_message == true)
@ -256,7 +256,7 @@ function get_pkg_depends($pkg_name, $filetype = ".xml", $format = "files", $retu
$package =& $config['installedpackages']['package'][$pkg_id];
if(!file_exists("/usr/local/pkg/" . $package['configurationfile'])) {
log_error("The {$package['name']} package is missing required dependencies and is being reinstalled." . $package['configurationfile']);
log_error(sprintf(gettext('The %1$s package is missing required dependencies and must be reinstalled. %2$s'), $package['name'], $package['configurationfile']));
uninstall_package($package['name']);
if (install_package($package['name']) < 0) {
log_error("Failed reinstalling package {$package['name']}.");
@ -280,7 +280,7 @@ function get_pkg_depends($pkg_name, $filetype = ".xml", $format = "files", $retu
if(!is_dir($prefix))
exec("/bin/mkdir -p {$prefix}");
if(!file_exists($prefix . $depend_file))
log_error("The {$package['name']} package is missing required dependencies and must be reinstalled.");
log_error(sprintf(gettext("The %s package is missing required dependencies and must be reinstalled."), $package['name']));
switch ($format) {
case "files":
$depends[] = $prefix . $depend_file;
@ -385,7 +385,7 @@ function sync_package($pkg_name, $sync_depends = true, $show_message = false) {
else
return; /* empty package tag */
if(!file_exists("/usr/local/pkg/" . $package['configurationfile'])) {
log_error("The {$package['name']} package is missing its configuration file and must be reinstalled.");
log_error(sprintf(gettext("The %s package is missing its configuration file and must be reinstalled."), $package['name']));
force_remove_package($package['name']);
return -1;
}
@ -418,7 +418,7 @@ function sync_package($pkg_name, $sync_depends = true, $show_message = false) {
foreach($depends as $item) {
if(!file_exists($item)) {
require_once("notices.inc");
file_notice($package['name'], "The {$package['name']} package is missing required dependencies and must be reinstalled.", "Packages", "/pkg_mgr_install.php?mode=reinstallpkg&pkg={$package['name']}", 1);
file_notice($package['name'], sprintf(gettext("The %s package is missing required dependencies and must be reinstalled."), $package['name']), "Packages", "/pkg_mgr_install.php?mode=reinstallpkg&pkg={$package['name']}", 1);
log_error("Could not find {$item}. Reinstalling package.");
uninstall_package($pkg_name);
if (install_package($pkg_name) < 0) {
@ -541,44 +541,44 @@ function install_package($package, $pkg_info = "") {
return -1;
}
}
pkg_debug("Beginning package installation.\n");
log_error('Beginning package installation for ' . $pkg_info['name'] . '.');
$static_output .= "Beginning package installation for " . $pkg_info['name'] . "...";
pkg_debug(gettext("Beginning package installation.") . "\n");
log_error(sprintf(gettext('Beginning package installation for %s .'), $pkg_info['name']));
$static_output .= sprintf(gettext("Beginning package installation for %s ."), $pkg_info['name']);
update_status($static_output);
/* fetch the package's configuration file */
if($pkg_info['config_file'] != "") {
$static_output .= "\nDownloading package configuration file... ";
$static_output .= "\n" . gettext("Downloading package configuration file... ");
update_output_window($static_output);
pkg_debug("Downloading package configuration file...\n");
pkg_debug(gettext("Downloading package configuration file...") . "\n");
$fetchto = substr(strrchr($pkg_info['config_file'], '/'), 1);
download_file_with_progress_bar($pkg_info['config_file'], '/usr/local/pkg/' . $fetchto);
if(!file_exists('/usr/local/pkg/' . $fetchto)) {
pkg_debug("ERROR! Unable to fetch package configuration file. Aborting installation.\n");
pkg_debug(gettext("ERROR! Unable to fetch package configuration file. Aborting installation.") . "\n");
if($pkg_interface == "console")
print "\nERROR! Unable to fetch package configuration file. Aborting package installation.\n";
print "\n" . gettext("ERROR! Unable to fetch package configuration file. Aborting package installation.") . "\n";
else {
$static_output .= "failed!\n\nInstallation aborted.\n";
$static_output .= gettext("failed!\n\nInstallation aborted.\n");
update_output_window($static_output);
echo "<br>Show <a href=\"pkg_mgr_install.php?showlog=true\">install log</a></center>";
}
conf_mount_ro();
return -1;
}
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/* add package information to config.xml */
$pkgid = get_pkg_id($pkg_info['name']);
$static_output .= "Saving updated package information... ";
$static_output .= gettext("Saving updated package information...") . " ";
update_output_window($static_output);
if($pkgid == -1) {
$config['installedpackages']['package'][] = $pkg_info;
$changedesc = "Installed {$pkg_info['name']} package.";
$to_output = "done.\n";
$changedesc = gettext("Installed") . $pkg_info['name'] . gettext("package.");
$to_output = gettext("done.") . "\n";
} else {
$config['installedpackages']['package'][$pkgid] = $pkg_info;
$changedesc = "Overwrote previous installation of {$pkg_info['name']}.";
$to_output = "overwrite!\n";
$changedesc = sprintf(gettext("Overwrote previous installation of %s."), $pkg_info['name']);
$to_output = gettext("overwrite!") . "\n";
}
if(file_exists('/conf/needs_package_sync'))
@unlink('/conf/needs_package_sync');
@ -590,14 +590,14 @@ function install_package($package, $pkg_info = "") {
if (!install_package_xml($package)) {
uninstall_package($package);
write_config($changedesc);
$static_output .= "Failed to install package.\n";
$static_output .= gettext("Failed to install package.") . "\n";
update_output_window($static_output);
return -1;
} else {
$static_output .= "Writing configuration... ";
$static_output .= gettext("Writing configuration... ");
update_output_window($static_output);
write_config($changedesc);
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
update_output_window($static_output);
if($pkg_info['after_install_info'])
@ -631,7 +631,7 @@ function install_package_xml($pkg) {
global $g, $config, $static_output, $pkg_interface, $config_parsed;
if(($pkgid = get_pkg_id($pkg)) == -1) {
$static_output .= "The {$pkg} package is not installed.\n\nInstallation aborted.";
$static_output .= sprintf(gettext("The %s package is not installed.%sInstallation aborted."), $pkg, "\n\n");
update_output_window($static_output);
if($pkg_interface <> "console") {
echo "\n<script language=\"JavaScript\">document.progressbar.style.visibility='hidden';</script>";
@ -646,8 +646,8 @@ function install_package_xml($pkg) {
if($pkg_info['depends_on_package_base_url'] != "") {
if($pkg_interface == "console")
echo "\n";
update_status("Installing " . $pkg_info['name'] . " and its dependencies.");
$static_output .= "Downloading " . $pkg_info['name'] . " and its dependencies... ";
update_status(gettext("Installing") . " " . $pkg_info['name'] . " " . gettext("and its dependencies."));
$static_output .= gettext("Downloading") . " " . $pkg_info['name'] . " " . gettext("and its dependencies... ");
$static_orig = $static_output;
$static_output .= "\n";
update_output_window($static_output);
@ -659,7 +659,7 @@ function install_package_xml($pkg) {
if (!pkg_fetch_recursive($pkg_name, $pkgdep, 0, $pkg_info['depends_on_package_base_url'])) {
$static_output .= "of {$pkg_name} failed!\n\nInstallation aborted.";
update_output_window($static_output);
pkg_debug("Package WAS NOT installed properly.\n");
pkg_debug(gettext("Package WAS NOT installed properly.") . "\n");
if($pkg_interface <> "console") {
echo "\n<script language=\"JavaScript\">document.progressbar.style.visibility='hidden';</script>";
echo "\n<script language=\"JavaScript\">document.progholder.style.visibility='hidden';</script>";
@ -672,30 +672,30 @@ function install_package_xml($pkg) {
}
$configfile = substr(strrchr($pkg_info['config_file'], '/'), 1);
if(file_exists("/usr/local/pkg/" . $configfile)) {
$static_output .= "Loading package configuration... ";
$static_output .= gettext("Loading package configuration... ");
update_output_window($static_output);
$pkg_config = parse_xml_config_pkg("/usr/local/pkg/" . $configfile, "packagegui");
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
$static_output .= "Configuring package components...\n";
$static_output .= gettext("Configuring package components...\n");
if (!empty($pkg_config['filter_rules_needed']))
$config['installedpackages']['package'][$pkgid]['filter_rule_function'] = $pkg_config['filter_rules_needed'];
update_output_window($static_output);
/* modify system files */
if(is_array($pkg_config['modify_system']) && is_array($pkg_config['modify_system']['item'])) {
$static_output .= "System files... ";
$static_output .= gettext("System files... ");
update_output_window($static_output);
foreach($pkg_config['modify_system']['item'] as $ms) {
if($ms['textneeded']) {
add_text_to_file($ms['modifyfilename'], $ms['textneeded']);
}
}
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/* download additional files */
if(is_array($pkg_config['additional_files_needed'])) {
$static_output .= "Additional files... ";
$static_output .= gettext("Additional files... ");
$static_orig = $static_output;
update_output_window($static_output);
foreach($pkg_config['additional_files_needed'] as $afn) {
@ -720,20 +720,20 @@ function install_package_xml($pkg) {
return false;
}
if(stristr($filename, ".tgz") <> "") {
pkg_debug("Extracting tarball to -C for " . $filename . "...\n");
pkg_debug(gettext("Extracting tarball to -C for ") . $filename . "...\n");
$tarout = "";
exec("/usr/bin/tar xvzf " . $prefix . $filename . " -C / 2>&1", $tarout);
pkg_debug(print_r($tarout, true) . "\n");
}
if($pkg_chmod <> "") {
pkg_debug("Changing file mode to {$pkg_chmod} for {$prefix}{$filename}\n");
pkg_debug(sprintf(gettext('Changing file mode to %1$s for %2$s%3$s%4$s'), $pkg_chmod, $prefix, $filename, "\n"));
@chmod($prefix . $filename, $pkg_chmod);
system("/bin/chmod {$pkg_chmod} {$prefix}{$filename}");
}
$static_output = $static_orig;
update_output_window($static_output);
}
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/* if a require exists, include it. this will
@ -742,7 +742,7 @@ function install_package_xml($pkg) {
*/
$missing_include = false;
if($pkg_config['include_file'] <> "") {
$static_output .= "Loading package instructions...\n";
$static_output = gettext("Loading package instructions...") . "\n";
update_output_window($static_output);
pkg_debug("require_once('{$pkg_config['include_file']}')\n");
if (file_exists($pkg_config['include_file']))
@ -757,7 +757,7 @@ function install_package_xml($pkg) {
}
/* sidebar items */
if(is_array($pkg_config['menu'])) {
$static_output .= "Menu items... ";
$static_output .= gettext("Menu items... ");
update_output_window($static_output);
foreach($pkg_config['menu'] as $menu) {
if(is_array($config['installedpackages']['menu']))
@ -766,12 +766,12 @@ function install_package_xml($pkg) {
continue 2;
$config['installedpackages']['menu'][] = $menu;
}
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/* integrated tab items */
if(is_array($pkg_config['tabs']['tab'])) {
$static_output .= "Integrated Tab items... ";
$static_output .= gettext("Integrated Tab items... ");
update_output_window($static_output);
foreach($pkg_config['tabs']['tab'] as $tab) {
if(is_array($config['installedpackages']['tab']))
@ -780,12 +780,12 @@ function install_package_xml($pkg) {
continue 2;
$config['installedpackages']['tab'][] = $tab;
}
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/* services */
if(is_array($pkg_config['service'])) {
$static_output .= "Services... ";
$static_output .= gettext("Services... ");
update_output_window($static_output);
foreach($pkg_config['service'] as $service) {
if(is_array($config['installedpackages']['service']))
@ -794,39 +794,39 @@ function install_package_xml($pkg) {
continue 2;
$config['installedpackages']['service'][] = $service;
}
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/* custom commands */
$static_output .= "Custom commands...\n";
$static_output .= gettext("Custom commands...") . "\n";
update_output_window($static_output);
if ($missing_include == false) {
if($pkg_config['custom_php_global_functions'] <> "") {
$static_output .= "Executing custom_php_global_functions()...";
$static_output .= gettext("Executing custom_php_global_functions()...");
update_output_window($static_output);
eval_once($pkg_config['custom_php_global_functions']);
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
if($pkg_config['custom_php_install_command']) {
$static_output .= "Executing custom_php_install_command()...";
$static_output .= gettext("Executing custom_php_install_command()...");
update_output_window($static_output);
eval_once($pkg_config['custom_php_install_command']);
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
if($pkg_config['custom_php_resync_config_command'] <> "") {
$static_output .= "Executing custom_php_resync_config_command()...";
$static_output .= gettext("Executing custom_php_resync_config_command()...");
update_output_window($static_output);
eval_once($pkg_config['custom_php_resync_config_command']);
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
}
} else {
$static_output .= "Loading package configuration... failed!\n\nInstallation aborted.";
$static_output .= gettext("Loading package configuration... failed!") . "\n\n" . gettext("Installation aborted.");
update_output_window($static_output);
pkg_debug("Unable to load package configuration. Installation aborted.\n");
pkg_debug(gettext("Unable to load package configuration. Installation aborted.") ."\n");
if($pkg_interface <> "console") {
echo "\n<script language=\"JavaScript\">document.progressbar.style.visibility='hidden';</script>";
echo "\n<script language=\"JavaScript\">document.progholder.style.visibility='hidden';</script>";
@ -871,12 +871,12 @@ function delete_package($pkg) {
// If package has dependencies then skip it
if(does_package_depend($pkg)) {
$static_output .= "Skipping package deletion for {$pkg} because it is a dependency.\n";
$static_output .= sprintf(gettext("Skipping package deletion for %s because it is a dependency."),$pkg) . "\n";
update_output_window($static_output);
return;
} else {
if($pkg)
$static_output .= "Starting package deletion for {$pkg}...";
$static_output .= sprintf(gettext("Starting package deletion for %s..."),$pkg);
update_output_window($static_output);
}
@ -905,7 +905,7 @@ function delete_package_xml($pkg) {
$pkgid = get_pkg_id($pkg);
if ($pkgid == -1) {
$static_output .= "The {$pkg} package is not installed.\n\nDeletion aborted.";
$static_output .= sprintf(gettext("The %s package is not installed.%sDeletion aborted."), $pkg, "\n\n");
update_output_window($static_output);
if($pkg_interface <> "console") {
echo "\n<script language=\"JavaScript\">document.progressbar.style.visibility='hidden';</script>";
@ -916,8 +916,8 @@ function delete_package_xml($pkg) {
conf_mount_ro();
return;
}
pkg_debug("Removing {$pkg} package... ");
$static_output .= "Removing {$pkg} components...\n";
pkg_debug(sprintf(gettext("Removing %s package... "),$pkg));
$static_output .= sprintf(gettext("Removing %s components..."),$pkg) . "\n";
update_output_window($static_output);
/* parse package configuration */
$packages = &$config['installedpackages']['package'];
@ -929,7 +929,7 @@ function delete_package_xml($pkg) {
$pkg_config = parse_xml_config_pkg("/usr/local/pkg/" . $packages[$pkgid]['configurationfile'], "packagegui");
/* remove tab items */
if(is_array($pkg_config['tabs'])) {
$static_output .= "Tabs items... ";
$static_output .= gettext("Tabs items... ");
update_output_window($static_output);
if(is_array($pkg_config['tabs']['tab']) && is_array($tabs)) {
foreach($pkg_config['tabs']['tab'] as $tab) {
@ -941,12 +941,12 @@ function delete_package_xml($pkg) {
}
}
}
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/* remove menu items */
if(is_array($pkg_config['menu'])) {
$static_output .= "Menu items... ";
$static_output .= gettext("Menu items... ");
update_output_window($static_output);
if (is_array($pkg_config['menu']) && is_array($menus)) {
foreach($pkg_config['menu'] as $menu) {
@ -958,12 +958,12 @@ function delete_package_xml($pkg) {
}
}
}
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/* remove services */
if(is_array($pkg_config['service'])) {
$static_output .= "Services... ";
$static_output .= gettext("Services... ");
update_output_window($static_output);
if (is_array($pkg_config['service']) && is_array($services)) {
foreach($pkg_config['service'] as $service) {
@ -983,7 +983,7 @@ function delete_package_xml($pkg) {
}
}
}
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/*
@ -999,7 +999,7 @@ function delete_package_xml($pkg) {
*/
$missing_include = false;
if($pkg_config['include_file'] <> "") {
$static_output .= "Loading package instructions...\n";
$static_output .= gettext("Loading package instructions...") . "\n";
update_output_window($static_output);
pkg_debug("require_once(\"{$pkg_config['include_file']}\")\n");
if (file_exists($pkg_config['include_file']))
@ -1023,36 +1023,36 @@ function delete_package_xml($pkg) {
}
/* system files */
if(is_array($pkg_config['modify_system']) && is_array($pkg_config['modify_system']['item'])) {
$static_output .= "System files... ";
$static_output .= gettext("System files... ");
update_output_window($static_output);
foreach($pkg_config['modify_system']['item'] as $ms)
if($ms['textneeded']) remove_text_from_file($ms['modifyfilename'], $ms['textneeded']);
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/* deinstall commands */
if($pkg_config['custom_php_deinstall_command'] <> "") {
$static_output .= "Deinstall commands... ";
$static_output .= gettext("Deinstall commands... ");
update_output_window($static_output);
if ($missing_include == false) {
eval_once($pkg_config['custom_php_deinstall_command']);
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
} else
$static_output .= "\nNot executing custom deinstall hook because an include is missing.\n";
update_output_window($static_output);
}
if($pkg_config['include_file'] <> "") {
$static_output .= "Removing package instructions...";
$static_output .= gettext("Removing package instructions...");
update_output_window($static_output);
pkg_debug("Remove '{$pkg_config['include_file']}'\n");
pkg_debug(sprintf(gettext("Remove '%s'"), $pkg_config['include_file']) . "\n");
unlink_if_exists("/usr/local/pkg/" . $pkg_config['include_file']);
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/* remove all additional files */
if(is_array($pkg_config['additional_files_needed'])) {
$static_output .= "Auxiliary files... ";
$static_output .= gettext("Auxiliary files... ");
update_output_window($static_output);
foreach($pkg_config['additional_files_needed'] as $afn) {
$filename = get_filename_from_url($afn['item'][0]);
@ -1062,14 +1062,14 @@ function delete_package_xml($pkg) {
$prefix = "/usr/local/pkg/";
unlink_if_exists($prefix . $filename);
}
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/* package XML file */
$static_output .= "Package XML... ";
$static_output .= gettext("Package XML... ");
update_output_window($static_output);
unlink_if_exists("/usr/local/pkg/" . $packages[$pkgid]['configurationfile']);
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
}
/* syslog */
@ -1085,10 +1085,10 @@ function delete_package_xml($pkg) {
conf_mount_ro();
/* remove config.xml entries */
$static_output .= "Configuration... ";
$static_output .= gettext("Configuration... ");
update_output_window($static_output);
unset($config['installedpackages']['package'][$pkgid]);
$static_output .= "done.\n";
$static_output .= gettext("done.") . "\n";
update_output_window($static_output);
write_config("Removed {$pkg} package.\n");
}
@ -1194,4 +1194,4 @@ function pkg_reinstall_all() {
}
}
?>
?>

File diff suppressed because it is too large Load Diff

View File

@ -401,13 +401,13 @@ class Auth_RADIUS extends PEAR {
{
$req = radius_send_request($this->res);
if (!$req) {
return $this->raiseError('Error sending request: ' . $this->getError());
return $this->raiseError(gettext('Error sending request:') . ' ' . $this->getError());
}
switch($req) {
case RADIUS_ACCESS_ACCEPT:
if (is_subclass_of($this, 'auth_radius_acct')) {
return $this->raiseError('RADIUS_ACCESS_ACCEPT is unexpected for accounting');
return $this->raiseError(gettext('RADIUS_ACCESS_ACCEPT is unexpected for accounting'));
}
return true;
@ -416,12 +416,12 @@ class Auth_RADIUS extends PEAR {
case RADIUS_ACCOUNTING_RESPONSE:
if (is_subclass_of($this, 'auth_radius_pap')) {
return $this->raiseError('RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication');
return $this->raiseError(gettext('RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication'));
}
return true;
default:
return $this->raiseError("Unexpected return value: $req");
return $this->raiseError(gettext("Unexpected return value:") . $req);
}
}
@ -1126,4 +1126,4 @@ class Auth_RADIUS_Acct_Update extends Auth_RADIUS_Acct
var $status_type = RADIUS_UPDATE;
}
?>
?>

View File

@ -42,7 +42,7 @@ function dump_rrd_to_xml($rrddatabase, $xmldumpfile) {
exec("$rrdtool dump {$rrddatabase} {$xmldumpfile} 2>&1", $dumpout, $dumpret);
if ($dumpret <> 0) {
$dumpout = implode(" ", $dumpout);
log_error("RRD dump failed exited with $dumpret, the error is: $dumpout");
log_error(sprintf(gettext('RRD dump failed exited with %1$s, the error is: %2$s'), $dumpret, $dumpout));
}
return($dumpret);
}
@ -53,7 +53,7 @@ function create_new_rrd($rrdcreatecmd) {
exec("$rrdcreatecmd 2>&1", $rrdcreateoutput, $rrdcreatereturn);
if ($rrdcreatereturn <> 0) {
$rrdcreateoutput = implode(" ", $rrdcreateoutput);
log_error("RRD create failed exited with $rrdcreatereturn, the error is: $rrdcreateoutput");
log_error(sprintf(gettext('RRD create failed exited with %1$s, the error is: %2$s'), $rrdcreatereturn, $rrdcreateoutput));
}
return $rrdcreatereturn;
}
@ -67,7 +67,7 @@ function migrate_rrd_format($rrdoldxml, $rrdnewxml) {
$numdsold = count($rrdoldxml['ds']);
$numrranew = count($rrdnewxml['rra']);
$numdsnew = count($rrdnewxml['ds']);
log_error("Import RRD has $numdsold DS values and $numrraold RRA databases, new format RRD has $numdsnew DS values and $numrranew RRA databases");
log_error(sprintf(gettext('Import RRD has %1$s DS values and %2$s RRA databases, new format RRD has %3$s DS values and %4$s RRA databases'), $numdsold, $numrraold, $numdsnew ,$numrranew));
/* add data sources not found in the old array from the new array */
$i = 0;
@ -151,7 +151,7 @@ function migrate_rrd_format($rrdoldxml, $rrdnewxml) {
$numrranew = count($rrdoldxml['rra']);
$numdsnew = count($rrdoldxml['ds']);
log_error("The new RRD now has $numdsnew DS values and $numrranew RRA databases");
log_error(sprintf(gettext('The new RRD now has %1$s DS values and %2$s RRA databases'), $numdsnew, $numrranew));
return $rrdoldxml;
}
@ -159,7 +159,7 @@ function enable_rrd_graphing() {
global $config, $g, $altq_list_queues;
if($g['booting'])
echo "Generating RRD graphs...";
echo gettext("Generating RRD graphs...");
$rrddbpath = "/var/db/rrd/";
$rrdgraphpath = "/usr/local/www/rrd";
@ -244,7 +244,7 @@ function enable_rrd_graphing() {
exec("cd /;LANG=C /usr/bin/tar -xzf {$g['cf_conf_path']}/rrd.tgz 2>&1", $rrdrestore, $rrdreturn);
$rrdrestore = implode(" ", $rrdrestore);
if($rrdreturn <> 0) {
log_error("RRD restore failed exited with $rrdreturn, the error is: $rrdrestore\n");
log_error(sprintf(gettext('RRD restore failed exited with %1$s, the error is: %2$s%3$s'), $rrdreturn, $rrdrestore, "\n"));
}
}
}
@ -253,6 +253,7 @@ function enable_rrd_graphing() {
/* db update script */
$rrdupdatesh = "#!/bin/sh\n";
$rrdupdatesh .= "\n";
$rrdupdatesh .= "export TERM=dumb\n";
$rrdupdatesh .= "counter=1\n";
$rrdupdatesh .= "while [ \"\$counter\" -ne 0 ]\n";
$rrdupdatesh .= "do\n";
@ -284,6 +285,10 @@ function enable_rrd_graphing() {
$rrdcreate .= "DS:outpass:COUNTER:$trafficvalid:0:$upstream ";
$rrdcreate .= "DS:inblock:COUNTER:$trafficvalid:0:$downstream ";
$rrdcreate .= "DS:outblock:COUNTER:$trafficvalid:0:$upstream ";
$rrdcreate .= "DS:inpass6:COUNTER:$trafficvalid:0:$downstream ";
$rrdcreate .= "DS:outpass6:COUNTER:$trafficvalid:0:$upstream ";
$rrdcreate .= "DS:inblock6:COUNTER:$trafficvalid:0:$downstream ";
$rrdcreate .= "DS:outblock6:COUNTER:$trafficvalid:0:$upstream ";
$rrdcreate .= "RRA:AVERAGE:0.5:1:1000 ";
$rrdcreate .= "RRA:AVERAGE:0.5:5:1000 ";
$rrdcreate .= "RRA:AVERAGE:0.5:60:1000 ";
@ -294,17 +299,16 @@ function enable_rrd_graphing() {
/* enter UNKNOWN values in the RRD so it knows we rebooted. */
if($g['booting']) {
mwexec("$rrdtool update $rrddbpath$ifname$traffic N:U:U:U:U");
mwexec("$rrdtool update $rrddbpath$ifname$traffic N:U:U:U:U:U:U:U:U");
}
$rrdupdatesh .= "\n";
$rrdupdatesh .= "# polling traffic for interface $ifname $realif \n";
$rrdupdatesh .= "TMPFILE=`mktemp -q /tmp/STATS_{$realif}.XXXXXX` \n";
$rrdupdatesh .= "$pfctl -vvsI -i {$realif} > \$TMPFILE \n";
$rrdupdatesh .= "unset BYTES \n";
$rrdupdatesh .= "BYTES=`cat \$TMPFILE | awk '/In4\/Pass|Out4\/Pass/ {printf \$6 \":\"}'`\\\n";
$rrdupdatesh .= "`cat \$TMPFILE | awk '/In4\/Block|Out4\/Block/ {printf \$6 \":\"}'|sed -e 's/.\$//'`\n";
$rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$traffic N:\$BYTES\n";
$rrdupdatesh .= "# polling traffic for interface $ifname $realif IPv4/IPv6 counters \n";
$rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$traffic N:";
$rrdupdatesh .= "`$pfctl -vvsI -i {$realif} | awk '\\\n";
$rrdupdatesh .= "/In4\/Pass/ { b4pi = \$6 };/Out4\/Pass/ { b4po = \$6 };/In4\/Block/ { b4bi = \$6 };/Out4\/Block/ { b4bo = \$6 };\\\n";
$rrdupdatesh .= "/In6\/Pass/ { b6pi = \$6 };/Out6\/Pass/ { b6po = \$6 };/In6\/Block/ { b6bi = \$6 };/Out6\/Block/ { b6bo = \$6 };\\\n";
$rrdupdatesh .= "END {print b4pi \":\" b4po \":\" b4bi \":\" b4bo \":\" b6pi \":\" b6po \":\" b6bi \":\" b6bo};'`\n";
/* PACKETS, set up the rrd file */
if (!file_exists("$rrddbpath$ifname$packets")) {
@ -313,6 +317,10 @@ function enable_rrd_graphing() {
$rrdcreate .= "DS:outpass:COUNTER:$packetsvalid:0:$upstream ";
$rrdcreate .= "DS:inblock:COUNTER:$packetsvalid:0:$downstream ";
$rrdcreate .= "DS:outblock:COUNTER:$packetsvalid:0:$upstream ";
$rrdcreate .= "DS:inpass6:COUNTER:$packetsvalid:0:$downstream ";
$rrdcreate .= "DS:outpass6:COUNTER:$packetsvalid:0:$upstream ";
$rrdcreate .= "DS:inblock6:COUNTER:$packetsvalid:0:$downstream ";
$rrdcreate .= "DS:outblock6:COUNTER:$packetsvalid:0:$upstream ";
$rrdcreate .= "RRA:AVERAGE:0.5:1:1000 ";
$rrdcreate .= "RRA:AVERAGE:0.5:5:1000 ";
$rrdcreate .= "RRA:AVERAGE:0.5:60:1000 ";
@ -323,16 +331,16 @@ function enable_rrd_graphing() {
/* enter UNKNOWN values in the RRD so it knows we rebooted. */
if($g['booting']) {
mwexec("$rrdtool update $rrddbpath$ifname$packets N:U:U:U:U");
mwexec("$rrdtool update $rrddbpath$ifname$packets N:U:U:U:U:U:U:U:U");
}
$rrdupdatesh .= "\n";
$rrdupdatesh .= "# polling packets for interface $ifname $realif \n";
$rrdupdatesh .= "unset PACKETS \n";
$rrdupdatesh .= "PACKETS=`cat \$TMPFILE | awk '/In4\/Pass|Out4\/Pass/ {printf \$4 \":\"}'`\\\n";
$rrdupdatesh .= "`cat \$TMPFILE | awk '/In4\/Block|Out4\/Block/ {printf \$4 \":\"}'|sed -e 's/.\$//'`\n";
$rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$packets N:\$PACKETS\n";
$rrdupdatesh .= "rm \$TMPFILE \n";
$rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$packets N:";
$rrdupdatesh .= "`$pfctl -vvsI -i {$realif} | awk '\\\n";
$rrdupdatesh .= "/In4\/Pass/ { b4pi = \$4 };/Out4\/Pass/ { b4po = \$4 };/In4\/Block/ { b4bi = \$4 };/Out4\/Block/ { b4bo = \$4 };\\\n";
$rrdupdatesh .= "/In6\/Pass/ { b6pi = \$4 };/Out6\/Pass/ { b6po = \$4 };/In6\/Block/ { b6bi = \$4 };/Out6\/Block/ { b6bo = \$4 };\\\n";
$rrdupdatesh .= "END {print b4pi \":\" b4po \":\" b4bi \":\" b4bo \":\" b6pi \":\" b6po \":\" b6bi \":\" b6bo};'`\n";
/* WIRELESS, set up the rrd file */
if($config['interfaces'][$ifname]['wireless']['mode'] == "bss") {
@ -747,7 +755,7 @@ function enable_rrd_graphing() {
$rrdupdatesh .= "sleep 60\n";
$rrdupdatesh .= "done\n";
log_error("Creating rrd update script");
log_error(gettext("Creating rrd update script"));
/* write the rrd update script */
$updaterrdscript = "{$g['vardb_path']}/rrd/updaterrd.sh";
$fd = fopen("$updaterrdscript", "w");
@ -771,7 +779,7 @@ function enable_rrd_graphing() {
}
if($g['booting'])
echo "done.\n";
echo gettext("done.") . "\n";
}

View File

@ -35,36 +35,124 @@
pfSense_BUILDER_BINARIES: /usr/bin/killall /bin/pgrep /bin/sh /usr/local/sbin/dhcpd /usr/local/sbin/igmpproxy
pfSense_BUILDER_BINARIES: /sbin/ifconfig /usr/sbin/arp /sbin/ifconfig /usr/local/sbin/dnsmasq
pfSense_BUILDER_BINARIES: /usr/sbin/bsnmpd /sbin/route /usr/local/sbin/olsrd
pfSense_BUILDER_BINARIES: /usr/local/sbin/miniupnpd
pfSense_BUILDER_BINARIES: /usr/local/sbin/miniupnpd /usr/sbin/rtadvd
pfSense_MODULE: utils
*/
function services_dhcpd_configure() {
/* implement ipv6 route advertising deamon */
function services_rtadvd_configure() {
global $config, $g;
if($g['services_dhcp_server_enable'] == false)
return;
if(isset($config['system']['developerspew'])) {
$mt = microtime();
echo "services_dhcpd_configure($if) being called $mt\n";
echo "services_rtadvd_configure() being called $mt\n";
}
/* kill any running dhcpd */
if(is_process_running("dhcpd"))
mwexec("killall dhcpd", true);
/* DHCP enabled on any interfaces? */
if (!is_dhcp_server_enabled())
return 0;
if(is_process_running("rtadvd")) {
mwexec("killall -9 rtadvd", true);
}
/* if OLSRD is enabled, allow WAN to house DHCP. */
if($config['installedpackages']['olsrd'])
foreach($config['installedpackages']['olsrd']['config'] as $olsrd)
if($olsrd['enable'])
$is_olsr_enabled = true;
if (!is_array($config['dhcpdv6']))
$config['dhcpdv6'] = array();
/* configure DHCPD chroot */
$dhcpdv6cfg = $config['dhcpdv6'];
$Iflist = get_configured_interface_list();
/* write rtadvd.conf */
$fd = fopen("{$g['varetc_path']}/rtadvd.conf", "w");
if (!$fd) {
printf("Error: cannot open rtadvd.conf in services_rtadvd_configure().\n");
return 1;
}
/* raflags, other o, managed=64 m, stateful=128, both=192 */
$rtadvdconf = "# Automatically Generated, do not edit\n";
$rtadvdconf = <<<EOD
#
# common definitions.
#
default:\
:raflags#0:rltime#3600:\
:vltime#360000:pltime#360000:mtu#1500:
ether:\
:mtu#1280:tc=default:
EOD;
/* Process all links which need the router advertise daemon */
$rtadvdnum = 0;
foreach ($dhcpdv6cfg as $dhcpv6if => $dhcpv6ifconf) {
if($dhcpv6ifconf['mode'] == "disabled")
continue;
$realif = get_real_interface($dhcpv6if);
$rtadvdifs[] = $realif;
$ifcfgipv6 = get_interface_ipv6($dhcpv6if);
$ifcfgsnv6 = get_interface_subnetv6($dhcpv6if);
$subnetv6 = gen_subnetv6($ifcfgipv6, $ifcfgsnv6);
$subnetmaskv6 = gen_subnet_mask($ifcfgsnv6);
$rtadvdconf .= "# Generated for DHCPv6 Server $dhcpv6if\n";
$rtadvdconf .= "{$realif}:\\\n";
$rtadvdconf .= "\t:addr=\"{$subnetv6}\":\\\n";
$rtadvdconf .= "\t:prefixlen#{$ifcfgsnv6}:\\\n";
switch($dhcpv6ifconf['mode']) {
case "managed":
$rtadvdconf .= "\t:raflags=\"m\":\\\n";
break;
case "assist":
$rtadvdconf .= "\t:raflags=\"mo\":\\\n";
break;
default:
$rtadvdconf .= "\t:raflags#0:\\\n";
break;
}
$rtadvdconf .= "\t:tc=ether:\n";
$rtadvdconf .= "\n\n";
$rtadvdnum++;
}
foreach ($Iflist as $if => $ifdescr) {
if(!is_numeric($config['interfaces'][$if]['dhcp6-pd-sla-id']))
continue;
$realif = get_real_interface($if);
$rtadvdifs[] = $realif;
$ifcfgipv6 = get_interface_ipv6($if);
$ifcfgsnv6 = get_interface_subnetv6($if);
$subnetv6 = gen_subnetv6($ifcfgipv6, $ifcfgsnv6);
$subnetmaskv6 = gen_subnet_mask($ifcfgsnv6);
if(is_ipaddrv6($subnetv6)) {
$rtadvdconf .= "# Generated for DHCP-PD delegation $if\n";
$rtadvdconf .= "{$realif}:\\\n";
$rtadvdconf .= "\t:addr=\"{$subnetv6}\":\\\n";
$rtadvdconf .= "\t:prefixlen#{$ifcfgsnv6}:\\\n";
$rtadvdconf .= "\t:raflags=\"mo\":\\\n";
$rtadvdconf .= "\t:tc=ether:\n";
$rtadvdconf .= "\n\n";
$rtadvdnum++;
}
}
fwrite($fd, $rtadvdconf);
fclose($fd);
if(count($rtadvdifs) > 0) {
mwexec("/usr/sbin/rtadvd -c {$g['varetc_path']}/rtadvd.conf " . join(" ", $rtadvdifs));
}
return 0;
}
function services_dhcpd_configure() {
global $config, $g;
/* configure DHCPD chroot once */
$fd = fopen("{$g['tmp_path']}/dhcpd.sh","w");
$status = `mount | grep "{$g['dhcpd_chroot_path']}/dev"`;
fwrite($fd, "mkdir -p {$g['dhcpd_chroot_path']}\n");
@ -85,6 +173,38 @@ function services_dhcpd_configure() {
fclose($fd);
mwexec("/bin/sh {$g['tmp_path']}/dhcpd.sh");
services_dhcpdv4_configure();
services_dhcpdv6_configure();
services_rtadvd_configure();
return;
}
function services_dhcpdv4_configure() {
global $config, $g;
if($g['services_dhcp_server_enable'] == false)
return;
if(isset($config['system']['developerspew'])) {
$mt = microtime();
echo "services_dhcpdv4_configure($if) being called $mt\n";
}
/* kill any running dhcpd */
if(is_process_running("dhcpd")) {
killbypid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpd.pid");
}
/* DHCP enabled on any interfaces? */
if (!is_dhcp_server_enabled())
return 0;
/* if OLSRD is enabled, allow WAN to house DHCP. */
if($config['installedpackages']['olsrd'])
foreach($config['installedpackages']['olsrd']['config'] as $olsrd)
if($olsrd['enable'])
$is_olsr_enabled = true;
if ($g['booting']) {
if ($g['platform'] != "pfSense") {
/* restore the leases, if we have them */
@ -94,25 +214,27 @@ function services_dhcpd_configure() {
exec("cd /;LANG=C /usr/bin/tar -xzf {$g['cf_conf_path']}/dhcpleases.tgz 2>&1", $dhcprestore, $dhcpreturn);
$dhcprestore = implode(" ", $dhcprestore);
if($dhcpreturn <> 0) {
log_error("DHCP leases restore failed exited with $dhcpreturn, the error is: $dhcprestore\n");
log_error(sprintf(gettext('DHCP leases restore failed exited with %1$s, the error is: %2$s%3$s'), $dhcpreturn, $dhcprestore, "\n"));
}
}
}
}
$syscfg = $config['system'];
if (!is_array($config['dhcpd']))
$config['dhcpd'] = array();
$dhcpdcfg = $config['dhcpd'];
$Iflist = get_configured_interface_list();
if ($g['booting'])
echo "Starting DHCP service...";
echo gettext("Starting DHCP service...");
else
sleep(1);
/* write dhcpd.conf */
$fd = fopen("{$g['dhcpd_chroot_path']}/etc/dhcpd.conf", "w");
if (!$fd) {
printf("Error: cannot open dhcpd.conf in services_dhcpd_configure().\n");
printf(gettext("Error: cannot open dhcpd.conf in services_dhcpdv4_configure().%s"), "\n");
return 1;
}
@ -183,7 +305,7 @@ EOD;
}
}
} else {
log_error("Warning! DHCP Failover setup and no CARP virtual IP's defined!");
log_error(gettext("Warning! DHCP Failover setup and no CARP virtual IP's defined!"));
}
if($skew > 10) {
$type = "secondary";
@ -294,8 +416,7 @@ EOPP;
$dnscfg
EOD;
// default-lease-time
// default-lease-time
if ($dhcpifconf['defaultleasetime'])
$dhcpdconf .= " default-lease-time {$dhcpifconf['defaultleasetime']};\n";
@ -382,12 +503,13 @@ EOD;
/* create an empty leases database */
touch("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases");
touch("{$g['varrun_path']}/dhcpd.pid");
/* fire up dhcpd in a chroot */
mwexec("/usr/local/sbin/dhcpd -user dhcpd -group _dhcp -chroot {$g['dhcpd_chroot_path']} -cf /etc/dhcpd.conf " .
join(" ", $dhcpdifs));
if(count($dhcpdifs) > 0) {
mwexec("/usr/local/sbin/dhcpd -user dhcpd -group _dhcp -chroot {$g['dhcpd_chroot_path']} -cf /etc/dhcpd.conf -pf {$g['varrun_path']}/dhcpd.pid " .
join(" ", $dhcpdifs));
}
if ($g['booting']) {
print "done.\n";
@ -396,6 +518,345 @@ EOD;
return 0;
}
function services_dhcpdv6_configure() {
global $config, $g;
if($g['services_dhcp_server_enable'] == false)
return;
if(isset($config['system']['developerspew'])) {
$mt = microtime();
echo "services_dhcpd_configure($if) being called $mt\n";
}
/* kill any running dhcpd */
if(is_process_running("dhcpd")) {
killbypid("{$g['dhcpd_chroot_path']}{$g['varrun_path']}/dhcpdv6.pid");
}
/* DHCP enabled on any interfaces? */
if (!is_dhcp_server_enabled())
return 0;
/* if OLSRD is enabled, allow WAN to house DHCP. */
if($config['installedpackages']['olsrd'])
foreach($config['installedpackages']['olsrd']['config'] as $olsrd)
if($olsrd['enable'])
$is_olsr_enabled = true;
if ($g['booting']) {
if ($g['platform'] != "pfSense") {
/* restore the leases, if we have them */
if (file_exists("{$g['cf_conf_path']}/dhcp6leases.tgz")) {
$dhcprestore = "";
$dhcpreturn = "";
exec("cd /;LANG=C /usr/bin/tar -xzf {$g['cf_conf_path']}/dhcp6leases.tgz 2>&1", $dhcprestore, $dhcpreturn);
$dhcprestore = implode(" ", $dhcprestore);
if($dhcpreturn <> 0) {
log_error("DHCP leases v6 restore failed exited with $dhcpreturn, the error is: $dhcprestore\n");
}
}
}
}
$syscfg = $config['system'];
if (!is_array($config['dhcpdv6']))
$config['dhcpdv6'] = array();
$dhcpdv6cfg = $config['dhcpdv6'];
$Iflist = get_configured_interface_list();
if ($g['booting'])
echo "Starting DHCPv6 service...";
else
sleep(1);
/* write dhcpdv6.conf */
$fdv6 = fopen("{$g['dhcpd_chroot_path']}/etc/dhcpdv6.conf", "w");
if (! $fdv6) {
printf("Error: cannot open dhcpdv6.conf in services_dhcpdv6_configure().\n");
return 1;
}
$custoptionsv6 = "";
foreach ($dhcpdv6cfg as $dhcpv6if => $dhcpv6ifconf) {
if(is_array($dhcpv6ifconf['numberoptions']) && is_array($dhcpv6ifconf['numberoptions']['item'])) {
foreach($dhcpv6ifconf['numberoptions']['item'] as $itemv6idx => $itemv6) {
$custoptionsv6 .= "option custom-{$dhcpv6if}-{$itemv6idx} code {$itemv6['number']} = text;\n";
}
}
}
$dhcpdv6conf = <<<EOD
option domain-name "{$syscfg['domain']}";
option ldap-server code 95 = text;
option domain-search-list code 119 = text;
{$custoptions}
default-lease-time 7200;
max-lease-time 86400;
log-facility local7;
ddns-update-style none;
one-lease-per-client true;
deny duplicates;
ping-check true;
EOD;
if(!isset($dhcpv6ifconf['disableauthoritative']))
$dhcpdv6conf .= "authoritative;\n";
if(isset($dhcpv6ifconf['alwaysbroadcast']))
$dhcpdv6conf .= "always-broadcast on\n";
$dhcpdv6ifs = array();
/* loop through and determine if we need to setup
* failover peer "bleh" entries
*/
$dhcpv6num = 0;
foreach ($dhcpdv6cfg as $dhcpv6if => $dhcpv6ifconf) {
if (!isset($dhcpv6ifconf['enable']))
continue;
if($dhcpv6ifconf['failover_peerip'] <> "") {
$intv6 = guess_interface_from_ip($dhcpv6ifconf['failover_peerip']);
$intipv6 = find_interface_ipv6($intv6);
$real_dhcpv6if = convert_friendly_interface_to_real_interface_name($dhcpv6if);
/*
* yep, failover peer is defined.
* does it match up to a defined vip?
*/
$skew = 110;
$a_vip = &$config['virtualip']['vip'];
if(is_array($a_vip)) {
foreach ($a_vip as $vipent) {
if($intv6 == $real_dhcpv6if) {
/* this is the interface! */
if(is_numeric($vipent['advskew']) && ($vipent['advskew'] < "20"))
$skew = 0;
}
}
} else {
log_error("Warning! DHCPv6 Failover setup and no CARP virtual IPv6's defined!");
}
if($skew > 10) {
$typev6 = "secondary";
$dhcpdv6conf_pri = "mclt 600;\n";
$my_portv6 = "520";
$peer_portv6 = "519";
} else {
$my_portv6 = "519";
$peer_portv6 = "520";
$typev6 = "primary";
$dhcpdv6conf_pri = "split 128;\n";
$dhcpdv6conf_pri .= " mclt 600;\n";
}
$dhcpdv6conf .= <<<EOPP
failover peer "dhcpv6{$dhcpv6num}" {
{$typev6};
address {$intipv6};
port {$my_portv6};
peer address {$dhcpv6ifconf['failover_peerip']};
peer port {$peer_portv6};
max-response-delay 10;
max-unacked-updates 10;
{$dhcpdv6conf_pri}
load balance max seconds 3;
}
EOPP;
$dhcpv6num++;
}
}
$dhcpv6num = 0;
foreach ($dhcpdv6cfg as $dhcpv6if => $dhcpv6ifconf) {
$ifcfgv6 = $config['interfaces'][$dhcpv6if];
if (!isset($dhcpv6ifconf['enable']) || !isset($Iflist[$dhcpv6if]))
continue;
$ifcfgipv6 = get_interface_ipv6($dhcpv6if);
$ifcfgsnv6 = get_interface_subnetv6($dhcpv6if);
$subnetv6 = gen_subnetv6($ifcfgipv6, $ifcfgsnv6);
$subnetmaskv6 = gen_subnet_mask($ifcfgsnv6);
if($is_olsr_enabled == true)
if($dhcpv6ifconf['netmask'])
$subnetmask = gen_subnet_maskv6($dhcpv6ifconf['netmask']);
$dnscfgv6 = "";
if ($dhcpv6ifconf['domain']) {
$dnscfgv6 .= " option domain-name \"{$dhcpv6ifconf['domain']}\";\n";
}
if($dhcpv6ifconf['domainsearchlist'] <> "") {
$dnscfgv6 .= " option domain-search-list \"{$dhcpifconf['domainsearchlist']}\";\n";
}
if (isset($dhcpv6ifconf['ddnsupdate'])) {
if($dhcpv6ifconf['ddnsdomain'] <> "") {
$dnscfgv6 .= " ddns-domainname \"{$dhcpv6ifconf['ddnsdomain']}\";\n";
}
$dnscfgv6 .= " ddns-update-style interim;\n";
}
if (is_array($dhcpv6ifconf['dnsserver']) && ($dhcpv6ifconf['dnsserver'][0])) {
$dnscfgv6 .= " option dhcp6.name-servers " . join(",", $dhcpv6ifconf['dnsserver']) . ";";
} else if (isset($config['dnsmasq']['enable'])) {
$dnscfgv6 .= " option dhcp6.name-servers {$ifcfgipv6};";
} else if (is_array($syscfg['dnsserver']) && ($syscfg['dnsserver'][0])) {
$dns_arrv6 = array();
foreach($syscfg['dnsserver'] as $dnsserver) {
if(is_ipaddrv6($dnsserver)) {
$dns_arrv6[] = $dnsserver;
}
}
if(!empty($dns_arrv6))
$dnscfgv6 .= " option dhcp6.name-servers " . join(",", $dns_arrv6) . ";";
}
$subnet6 = Net_IPv6::compress(gen_subnetv6($ifcfgipv6, $ifcfgsnv6));
$dhcpdv6conf .= "subnet6 {$subnet6}/{$ifcfgsnv6} {\n";
/* is failover dns setup? */
if (is_array($dhcpv6ifconf['dnsserver']) && $dhcpv6ifconf['dnsserver'][0] <> "") {
$dhcpdv6conf .= " option dhcp6.name-servers {$dhcpv6ifconf['dnsserver'][0]}";
if($dhcpv6ifconf['dnsserver'][1] <> "")
$dhcpdv6conf .= ",{$dhcpv6ifconf['dnsserver'][1]}";
$dhcpdv6conf .= ";\n";
}
if($dhcpv6ifconf['failover_peerip'] <> "")
$dhcpdv6conf .= " deny dynamic bootp clients;\n";
if (isset($dhcpv6ifconf['denyunknown']))
$dhcpdv6conf .= " deny unknown clients;\n";
if ($dhcpv6ifconf['gateway'])
$routersv6 = $dhcpv6ifconf['gateway'];
else
$routersv6 = $ifcfgipv6;
if($dhcpv6ifconf['failover_peerip'] <> "") {
$dhcpdv6conf .= " failover peer \"dhcpv6{$dhcpv6num}\";\n";
$dhcpv6num++;
}
$dhcpdv6conf .= <<<EOD
range6 {$dhcpv6ifconf['range']['from']} {$dhcpv6ifconf['range']['to']};
# Not supported in IPv6; option dhcp6.routers {$routersv6};
$dnscfgv6
EOD;
if(is_ipaddrv6($dhcpv6ifconf['prefixrange']['from']) && is_ipaddrv6($dhcpv6ifconf['prefixrange']['to'])) {
$dhcpdv6conf .= " prefix6 {$dhcpv6ifconf['prefixrange']['from']} {$dhcpv6ifconf['prefixrange']['to']}/{$dhcpv6ifconf['prefixrange']['prefixlength']};\n";
}
// default-lease-time
if ($dhcpv6ifconf['defaultleasetime'])
$dhcpdv6conf .= " default-lease-time {$dhcpv6ifconf['defaultleasetime']};\n";
// max-lease-time
if ($dhcpv6ifconf['maxleasetime'])
$dhcpdv6conf .= " max-lease-time {$dhcpv6ifconf['maxleasetime']};\n";
// ntp-servers
if (is_array($dhcpv6ifconf['ntpserver']) && $dhcpv6ifconf['ntpserver'][0])
$dhcpdv6conf .= " option ntp-servers " . join(",", $dhcpv6ifconf['ntpserver']) . ";\n";
// tftp-server-name
if ($dhcpv6ifconf['tftp'] <> "")
$dhcpdv6conf .= " option tftp-server-name \"{$dhcpv6ifconf['tftp']}\";\n";
// Handle option, number rowhelper values
$dhcpdv6conf .= "\n";
if($dhcpv6ifconf['numberoptions']['item']) {
foreach($dhcpv6ifconf['numberoptions']['item'] as $itemv6idx => $itemv6) {
$dhcpdv6conf .= " option custom-{$dhcpv6if}-{$itemv6idx} \"{$itemv6['value']}\";\n";
}
}
// ldap-server
if ($dhcpv6ifconf['ldap'] <> "")
$dhcpdv6conf .= " option ldap-server \"{$dhcpv6ifconf['ldap']}\";\n";
// net boot information
if(isset($dhcpv6ifconf['netboot'])) {
if (($dhcpv6ifconf['next-server'] <> "") && ($dhcpv6ifconf['filename'] <> "")) {
$dhcpdv6conf .= " next-server {$dhcpv6ifconf['next-server']};\n";
$dhcpdv6conf .= " filename \"{$dhcpv6ifconf['filename']}\";\n";
}
if ($dhcpv6ifconf['rootpath'] <> "") {
$dhcpdv6conf .= " option root-path \"{$dhcpv6ifconf['rootpath']}\";\n";
}
}
$dhcpdv6conf .= <<<EOD
}
EOD;
/* add static mappings */
/* Needs to use DUID */
if (is_array($dhcpv6ifconf['staticmap'])) {
$i = 0;
foreach ($dhcpv6ifconf['staticmap'] as $sm) {
$dhcpdv6conf .= <<<EOD
host s_{$dhcpv6if}_{$i} {
host-identifier option dhcp6.client-id {$sm['duid']};
EOD;
if ($sm['ipaddrv6'])
$dhcpdv6conf .= " fixed-address6 {$sm['ipaddrv6']};\n";
if ($sm['hostname']) {
$dhhostname = str_replace(" ", "_", $sm['hostname']);
$dhhostname = str_replace(".", "_", $dhhostname);
$dhcpdv6conf .= " option host-name {$dhhostname};\n";
}
if ($sm['netbootfile'])
$dhcpdv6conf .= " filename \"{$sm['netbootfile']}\";\n";
$dhcpdv6conf .= "}\n";
$i++;
}
}
if($config['dhcpdv6'][$dhcpv6if]['mode'] <> "unmanaged") {
$realif = escapeshellcmd(get_real_interface($dhcpv6if));
$dhcpdv6ifs[] = $realif;
exec("/sbin/ifconfig {$realif} |awk '/ether/ {print $2}'", $mac);
$v6address = generate_ipv6_from_mac($mac[0]);
/* Create link local address for bridges */
if(stristr("$realif", "bridge")) {
mwexec("/sbin/ifconfig {$realif} inet6 {$v6address}");
}
}
}
fwrite($fdv6, $dhcpdv6conf);
fclose($fdv6);
/* create an empty leases v6 database */
touch("{$g['dhcpd_chroot_path']}/var/db/dhcpd6.leases");
/* fire up dhcpd in a chroot */
if(count($dhcpdv6ifs) > 0) {
mwexec("/usr/local/sbin/dhcpd -6 -user dhcpd -group _dhcp -chroot {$g['dhcpd_chroot_path']} -cf /etc/dhcpdv6.conf -pf {$g['varrun_path']}/dhcpdv6.pid " .
join(" ", $dhcpdv6ifs));
}
if ($g['booting']) {
print gettext("done.") . "\n";
}
return 0;
}
function services_igmpproxy_configure() {
global $config, $g;
@ -440,14 +901,14 @@ EOD;
$igmpfl = fopen($g['tmp_path'] . "/igmpproxy.conf", "w");
if (!$igmpfl) {
log_error("Could not write Igmpproxy configuration file!");
log_error(gettext("Could not write Igmpproxy configuration file!"));
return;
}
fwrite($igmpfl, $igmpconf);
fclose($igmpfl);
mwexec("/usr/local/sbin/igmpproxy -c " . $g['tmp_path'] . "/igmpproxy.conf");
log_error("Started Igmpproxy service sucsesfully.");
log_error(gettext("Started Igmpproxy service sucsesfully."));
return 0;
}
@ -469,7 +930,7 @@ function services_dhcrelay_configure() {
return 0;
if ($g['booting'])
echo "Starting DHCP relay service...";
echo gettext("Starting DHCP relay service...");
else
sleep(1);
@ -581,6 +1042,7 @@ function services_dyndns_configure_client($conf) {
$dnsWilcard = $conf['wildcard'],
$dnsMX = $conf['mx'],
$dnsIf = "{$conf['interface']}");
}
function services_dyndns_configure($int = "") {
@ -594,7 +1056,7 @@ function services_dyndns_configure($int = "") {
if (is_array($dyndnscfg)) {
if ($g['booting'])
echo "Starting DynDNS clients...";
echo gettext("Starting DynDNS clients...");
foreach ($dyndnscfg as $dyndns) {
if (!empty($int) && $int != $dyndns['interface'])
@ -606,7 +1068,7 @@ function services_dyndns_configure($int = "") {
}
if ($g['booting'])
echo "done.\n";
echo gettext("done.") . "\n";
}
return 0;
@ -627,7 +1089,7 @@ function services_dnsmasq_configure() {
if (isset($config['dnsmasq']['enable'])) {
if ($g['booting'])
echo "Starting DNS forwarder...";
echo gettext("Starting DNS forwarder...");
else
sleep(1);
@ -664,7 +1126,7 @@ function services_dnsmasq_configure() {
mwexec("/usr/local/sbin/dnsmasq --local-ttl 1 --all-servers {$dns_rebind} --dns-forward-max=5000 --cache-size=10000 {$args}");
if ($g['booting'])
echo "done.\n";
echo gettext("done.") . "\n";
}
if (!$g['booting']) {
@ -691,12 +1153,12 @@ function services_snmpd_configure() {
if (isset($config['snmpd']['enable'])) {
if ($g['booting'])
echo "Starting SNMP daemon... ";
echo gettext("Starting SNMP daemon... ");
/* generate snmpd.conf */
$fd = fopen("{$g['varetc_path']}/snmpd.conf", "w");
if (!$fd) {
printf("Error: cannot open snmpd.conf in services_snmpd_configure().\n");
printf(gettext("Error: cannot open snmpd.conf in services_snmpd_configure().%s"),"\n");
return 1;
}
@ -844,7 +1306,7 @@ EOD;
"{$bindlan} -p {$g['varrun_path']}/snmpd.pid");
if ($g['booting'])
echo "done.\n";
echo gettext("done.") . "\n";
}
return 0;
@ -1242,8 +1704,8 @@ function configure_cron() {
if (is_array($config['cron']['item'])) {
$crontab_contents .= "#\n";
$crontab_contents .= "# pfSense specific crontab entries\n";
$crontab_contents .= "# Created: " . date("F j, Y, g:i a") . "\n";
$crontab_contents .= "# " . gettext("pfSense specific crontab entries") . "\n";
$crontab_contents .= "# " .gettext( "Created:") . " " . date("F j, Y, g:i a") . "\n";
$crontab_contents .= "#\n";
foreach ($config['cron']['item'] as $item) {
@ -1257,8 +1719,8 @@ function configure_cron() {
}
$crontab_contents .= "\n#\n";
$crontab_contents .= "# If possible do not add items to this file manually.\n";
$crontab_contents .= "# If you do so, this file must be terminated with a blank line (e.g. new line)\n";
$crontab_contents .= "# " . gettext("If possible do not add items to this file manually.") . "\n";
$crontab_contents .= "# " . gettext("If you do so, this file must be terminated with a blank line (e.g. new line)") . "\n";
$crontab_contents .= "#\n\n";
}
@ -1301,7 +1763,7 @@ function upnp_start() {
return;
if($config['installedpackages']['miniupnpd']['config'][0]['enable']) {
echo "Starting UPnP service... ";
echo gettext("Starting UPnP service... ");
require_once('/usr/local/pkg/miniupnpd.inc');
sync_package_miniupnpd();
echo "done.\n";
@ -1336,15 +1798,15 @@ function install_cron_job($command, $active=false, $minute="0", $hour="*", $mont
$cron_item['command'] = $command;
if(!$is_installed) {
$config['cron']['item'][] = $cron_item;
write_config("Installed cron job for {$command}");
write_config(sprintf(gettext("Installed cron job for %s"), $command));
} else {
$config['cron']['item'][$x] = $cron_item;
write_config("Updated cron job for {$command}");
write_config(sprintf(gettext("Updated cron job for %s"), $command));
}
} else {
if(($is_installed == true) && ($x > 0)) {
unset($config['cron']['item'][$x]);
write_config("Remvoed cron job for {$command}");
write_config(sprintf(gettext("Remvoed cron job for %s"), $command));
}
}
configure_cron();

File diff suppressed because it is too large Load Diff

View File

@ -89,10 +89,10 @@ class smtp_class
{
$status=socket_get_status($this->connection);
if($status["timed_out"])
$this->error.=": data access time out";
$this->error.=gettext(": data access time out");
elseif($status["eof"])
{
$this->error.=": the server disconnected";
$this->error.=gettext(": the server disconnected");
$this->disconnected_error=1;
}
}
@ -104,13 +104,13 @@ class smtp_class
{
if(feof($this->connection))
{
$this->error="reached the end of data while reading from the SMTP server conection";
$this->error=gettext("reached the end of data while reading from the SMTP server conection");
return("");
}
if(GetType($data=@fgets($this->connection,100))!="string"
|| strlen($data)==0)
{
$this->SetDataAccessError("it was not possible to read line from the SMTP server");
$this->SetDataAccessError(gettext("it was not possible to read line from the SMTP server"));
return("");
}
$line.=$data;
@ -132,7 +132,7 @@ class smtp_class
$this->OutputDebug("C $line");
if(!@fputs($this->connection,"$line\r\n"))
{
$this->SetDataAccessError("it was not possible to send a line to the SMTP server");
$this->SetDataAccessError(gettext("it was not possible to send a line to the SMTP server"));
return(0);
}
return(1);
@ -146,7 +146,7 @@ class smtp_class
$this->OutputDebug("C $data");
if(!@fputs($this->connection,$data))
{
$this->SetDataAccessError("it was not possible to send data to the SMTP server");
$this->SetDataAccessError(gettext("it was not possible to send data to the SMTP server"));
return(0);
}
}
@ -218,10 +218,10 @@ class smtp_class
$version=explode(".",function_exists("phpversion") ? phpversion() : "3.0.7");
$php_version=intval($version[0])*1000000+intval($version[1])*1000+intval($version[2]);
if($php_version<4003000)
return("establishing SSL connections requires at least PHP version 4.3.0");
return(gettext("establishing SSL connections requires at least PHP version 4.3.0"));
if(!function_exists("extension_loaded")
|| !extension_loaded("openssl"))
return("establishing SSL connections requires the OpenSSL extension enabled");
return(gettext("establishing SSL connections requires the OpenSSL extension enabled"));
}
if(ereg('^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$',$domain))
$ip=$domain;
@ -230,30 +230,30 @@ class smtp_class
if($this->debug)
$this->OutputDebug($resolve_message);
if(!strcmp($ip=@gethostbyname($domain),$domain))
return("could not resolve host \"".$domain."\"");
return(sprintf(gettext("could not resolve host \"%s\""), $domain));
}
if(strlen($this->exclude_address)
&& !strcmp(@gethostbyname($this->exclude_address),$ip))
return("domain \"".$domain."\" resolved to an address excluded to be valid");
return(sprintf(gettext("domain \"%s\" resolved to an address excluded to be valid"), $domain));
if($this->debug)
$this->OutputDebug("Connecting to host address \"".$ip."\" port ".$port."...");
$this->OutputDebug(sprintf(gettext('Connecting to host address "%1$s" port %2$s...'), $ip, $port));
if(($this->connection=($this->timeout ? @fsockopen(($this->ssl ? "ssl://" : "").$ip,$port,$errno,$error,$this->timeout) : @fsockopen(($this->ssl ? "ssl://" : "").$ip,$port))))
return("");
$error=($this->timeout ? strval($error) : "??");
switch($error)
{
case "-3":
return("-3 socket could not be created");
return(gettext("-3 socket could not be created"));
case "-4":
return("-4 dns lookup on hostname \"".$domain."\" failed");
return(sprintf(gettext("-4 dns lookup on hostname \"%s\" failed"), $domain));
case "-5":
return("-5 connection refused or timed out");
return(gettext("-5 connection refused or timed out"));
case "-6":
return("-6 fdopen() call failed");
return(gettext("-6 fdopen() call failed"));
case "-7":
return("-7 setvbuf() call failed");
return(gettext("-7 setvbuf() call failed"));
}
return("could not connect to the host \"".$domain."\": ".$error);
return(sprintf(gettext('could not connect to the host "%1$s": %2$s'), $domain, $error));
}
Function SASLAuthenticate($mechanisms, $credentials, &$authenticated, &$mechanism)
@ -262,7 +262,7 @@ class smtp_class
if(!function_exists("class_exists")
|| !class_exists("sasl_client_class"))
{
$this->error="it is not possible to authenticate using the specified mechanism because the SASL library class is not loaded";
$this->error=gettext("it is not possible to authenticate using the specified mechanism because the SASL library class is not loaded");
return(0);
}
$sasl=new sasl_client_class;
@ -286,19 +286,19 @@ class smtp_class
case SASL_NOMECH:
if(strlen($this->authentication_mechanism))
{
$this->error="authenticated mechanism ".$this->authentication_mechanism." may not be used: ".$sasl->error;
$this->error=printf(gettext('authenticated mechanism %1$s may not be used: %2$s'), $this->authentication_mechanism, $sasl->error);
return(0);
}
break;
default:
$this->error="Could not start the SASL authentication client: ".$sasl->error;
$this->error=gettext("Could not start the SASL authentication client:") . " ".$sasl->error;
return(0);
}
if(strlen($mechanism=$sasl->mechanism))
{
if($this->PutLine("AUTH ".$sasl->mechanism.(IsSet($message) ? " ".base64_encode($message) : ""))==0)
{
$this->error="Could not send the AUTH command";
$this->error=gettext("Could not send the AUTH command");
return(0);
}
if(!$this->VerifyResultLines(array("235","334"),$responses))
@ -313,7 +313,7 @@ class smtp_class
$response=base64_decode($responses[0]);
break;
default:
$this->error="Authentication error: ".$responses[0];
$this->error=gettext("Authentication error:") . " ".$responses[0];
return(0);
}
for(;!$authenticated;)
@ -328,7 +328,7 @@ class smtp_class
case SASL_CONTINUE:
if($this->PutLine(base64_encode($message))==0)
{
$this->error="Could not send the authentication step message";
$this->error=gettext("Could not send the authentication step message");
return(0);
}
if(!$this->VerifyResultLines(array("235","334"),$responses))
@ -343,12 +343,12 @@ class smtp_class
$response=base64_decode($responses[0]);
break;
default:
$this->error="Authentication error: ".$responses[0];
$this->error=gettext("Authentication error:") . " ".$responses[0];
return(0);
}
break;
default:
$this->error="Could not process the SASL authentication step: ".$sasl->error;
$this->error=gettext("Could not process the SASL authentication step:") . " ".$sasl->error;
return(0);
}
}
@ -362,7 +362,7 @@ class smtp_class
{
if(strcmp($this->state,"Disconnected"))
{
$this->error="connection is already established";
$this->error=gettext("connection is already established");
return(0);
}
$this->disconnected_error=0;
@ -400,24 +400,24 @@ class smtp_class
$user=$this->user;
if(strlen($user)==0)
{
$this->error="it was not specified the POP3 authentication user";
$this->error=gettext("it was not specified the POP3 authentication user");
return(0);
}
$password=$this->password;
if(strlen($password)==0)
{
$this->error="it was not specified the POP3 authentication password";
$this->error=gettext("it was not specified the POP3 authentication password");
return(0);
}
$domain=$this->pop3_auth_host;
$this->error=$this->ConnectToHost($domain, $this->pop3_auth_port, "Resolving POP3 authentication host \"".$domain."\"...");
$this->error=$this->ConnectToHost($domain, $this->pop3_auth_port, sprintf(gettext("Resolving POP3 authentication host \"%s\"..."), $domain));
if(strlen($this->error))
return(0);
if(strlen($response=$this->GetLine())==0)
return(0);
if(strcmp($this->Tokenize($response," "),"+OK"))
{
$this->error="POP3 authentication server greeting was not found";
$this->error=gettext("POP3 authentication server greeting was not found");
return(0);
}
if(!$this->PutLine("USER ".$this->user)
@ -425,7 +425,7 @@ class smtp_class
return(0);
if(strcmp($this->Tokenize($response," "),"+OK"))
{
$this->error="POP3 authentication user was not accepted: ".$this->Tokenize("\r\n");
$this->error=gettext("POP3 authentication user was not accepted:") . " ".$this->Tokenize("\r\n");
return(0);
}
if(!$this->PutLine("PASS ".$password)
@ -433,7 +433,7 @@ class smtp_class
return(0);
if(strcmp($this->Tokenize($response," "),"+OK"))
{
$this->error="POP3 authentication password was not accepted: ".$this->Tokenize("\r\n");
$this->error=gettext("POP3 authentication password was not accepted:") . " ".$this->Tokenize("\r\n");
return(0);
}
fclose($this->connection);
@ -442,13 +442,13 @@ class smtp_class
}
if(count($hosts)==0)
{
$this->error="could not determine the SMTP to connect";
$this->error=gettext("could not determine the SMTP to connect");
return(0);
}
for($host=0, $error="not connected";strlen($error) && $host<count($hosts);$host++)
{
$domain=$hosts[$host];
$error=$this->ConnectToHost($domain, $this->host_port, "Resolving SMTP server domain \"$domain\"...");
$error=$this->ConnectToHost($domain, $this->host_port, sprintf(gettext("Resolving SMTP server domain \"%s\"..."), $domain));
}
if(strlen($error))
{
@ -460,7 +460,7 @@ class smtp_class
&& function_exists("socket_set_timeout"))
socket_set_timeout($this->connection,$timeout,0);
if($this->debug)
$this->OutputDebug("Connected to SMTP server \"".$domain."\".");
$this->OutputDebug(sprintf(gettext("Connected to SMTP server \"%s\"."), $domain));
if(!strcmp($localhost=$this->localhost,"")
&& !strcmp($localhost=getenv("SERVER_NAME"),"")
&& !strcmp($localhost=getenv("HOST"),""))
@ -514,7 +514,7 @@ class smtp_class
{
if(!IsSet($this->esmtp_extensions["AUTH"]))
{
$this->error="server does not require authentication";
$this->error=gettext("server does not require authentication");
$success=0;
}
else
@ -578,7 +578,7 @@ class smtp_class
if($success
&& strlen($mechanism)==0)
{
$this->error="it is not supported any of the authentication mechanisms required by the server";
$this->error=gettext("it is not supported any of the authentication mechanisms required by the server");
$success=0;
}
}
@ -610,7 +610,7 @@ class smtp_class
$sender=$this->direct_sender;
break;
default:
$this->error="direct delivery connection is already established and sender is already set";
$this->error=gettext("direct delivery connection is already established and sender is already set");
return(0);
}
}
@ -618,7 +618,7 @@ class smtp_class
{
if(strcmp($this->state,"Connected"))
{
$this->error="connection is not in the initial state";
$this->error=gettext("connection is not in the initial state");
return(0);
}
}
@ -640,7 +640,7 @@ class smtp_class
if($this->direct_delivery)
{
if(GetType($at=strrpos($recipient,"@"))!="integer")
return("it was not specified a valid direct recipient");
return(gettext("it was not specified a valid direct recipient"));
$domain=substr($recipient,$at+1);
switch($this->state)
{
@ -659,12 +659,12 @@ class smtp_class
case "RecipientSet":
if(strcmp($this->connected_domain,$domain))
{
$this->error="it is not possible to deliver directly to recipients of different domains";
$this->error=gettext("it is not possible to deliver directly to recipients of different domains");
return(0);
}
break;
default:
$this->error="connection is already established and the recipient is already set";
$this->error=gettext("connection is already established and the recipient is already set");
return(0);
}
}
@ -676,7 +676,7 @@ class smtp_class
case "RecipientSet":
break;
default:
$this->error="connection is not in the recipient setting state";
$this->error=gettext("connection is not in the recipient setting state");
return(0);
}
}
@ -705,7 +705,7 @@ class smtp_class
{
if(strcmp($this->state,"RecipientSet"))
{
$this->error="connection is not in the start sending data state";
$this->error=gettext("connection is not in the start sending data state");
return(0);
}
$this->error="";
@ -735,7 +735,7 @@ class smtp_class
{
if(strcmp($this->state,"SendingData"))
{
$this->error="connection is not in the sending data state";
$this->error=gettext("connection is not in the sending data state");
return(0);
}
$this->error="";
@ -746,7 +746,7 @@ class smtp_class
{
if(strcmp($this->state,"SendingData"))
{
$this->error="connection is not in the sending data state";
$this->error=gettext("connection is not in the sending data state");
return(0);
}
$this->error="";
@ -782,7 +782,7 @@ class smtp_class
{
if(!strcmp($this->state,"Disconnected"))
{
$this->error="it was not previously established a SMTP connection";
$this->error=gettext("it was not previously established a SMTP connection");
return(0);
}
$this->error="";
@ -840,4 +840,4 @@ class smtp_class
};
?>
?>

View File

@ -228,6 +228,8 @@ function system_hosts_generate() {
$hostscfg = $dnsmasqcfg['hosts'];
$hosts = "127.0.0.1 localhost localhost.{$syscfg['domain']}\n";
$lhosts = "";
$dhosts = "";
if ($config['interfaces']['lan']) {
$cfgip = get_interface_ip("lan");
@ -248,18 +250,23 @@ function system_hosts_generate() {
foreach ($hostscfg as $host) {
if ($host['host'])
$hosts .= "{$host['ip']} {$host['host']}.{$host['domain']} {$host['host']}\n";
$lhosts .= "{$host['ip']} {$host['host']}.{$host['domain']} {$host['host']}\n";
else
$hosts .= "{$host['ip']} {$host['domain']}\n";
$lhosts .= "{$host['ip']} {$host['domain']}\n";
}
if (isset($dnsmasqcfg['regdhcpstatic']) && is_array($config['dhcpd'])) {
foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf)
if(is_array($dhcpifconf['staticmap']) && isset($dhcpifconf['enable']))
foreach ($dhcpifconf['staticmap'] as $host)
if ($host['ipaddr'] && $host['hostname'])
$hosts .= "{$host['ipaddr']} {$host['hostname']}.{$syscfg['domain']} {$host['hostname']}\n";
$dhosts .= "{$host['ipaddr']} {$host['hostname']}.{$syscfg['domain']} {$host['hostname']}\n";
}
if (isset($dnsmasqcfg['dhcpfirst']))
$hosts .= $dhosts . $lhosts;
else
$hosts .= $lhosts . $dhosts;
/*
* Do not remove this because dhcpleases monitors with kqueue it needs to be
* killed before writing to hosts files.
@ -324,14 +331,20 @@ function system_routing_configure($interface = "") {
echo "system_routing_configure() being called $mt\n";
}
/* configure gif interfaces for ipv6 tunnels */
// interfaces_gif_configure();
$gatewayip = "";
$interfacegw = "";
$foundgw = false;
$gatewayipv6 = "";
$interfacegwv6 = "";
$foundgwv6 = false;
/* tack on all the hard defined gateways as well */
if (is_array($config['gateways']['gateway_item'])) {
mwexec("/bin/rm {$g['tmp_path']}/*_defaultgw", true);
foreach ($config['gateways']['gateway_item'] as $gateway) {
if (isset($gateway['defaultgw'])) {
if (isset($gateway['defaultgw']) && (is_ipaddrv4($gateway['gateway']))) {
if(strstr($gateway['gateway'], ":"))
break;
if ($gateway['gateway'] == "dynamic")
@ -347,6 +360,21 @@ function system_routing_configure($interface = "") {
break;
}
}
foreach ($config['gateways']['gateway_item'] as $gateway) {
if (isset($gateway['defaultgw']) && (is_ipaddrv6($gateway['gateway']))) {
if ($gateway['gateway'] == "dynamic")
$gateway['gateway'] = get_interface_gateway_v6($gateway['interface']);
$gatewayipv6 = $gateway['gateway'];
$interfacegwv6 = $gateway['interface'];
if (!empty($interfacegwv6)) {
$defaultifv6 = get_real_interface($gateway['interface']);
if ($defaultifv6)
@file_put_contents("{$g['tmp_path']}/{$defaultifv6}_defaultgwv6", $gatewayipv6);
}
$foundgwv6 = true;
break;
}
}
}
if ($foundgw == false) {
$defaultif = get_real_interface("wan");
@ -354,6 +382,12 @@ function system_routing_configure($interface = "") {
$gatewayip = get_interface_gateway("wan");
@touch("{$g['tmp_path']}/{$defaultif}_defaultgw");
}
if ($foundgwv6 == false) {
$defaultifv6 = get_real_interface("wan");
$interfacegwv6 = "wan";
$gatewayipv6 = get_interface_gateway_v6("wan");
@touch("{$g['tmp_path']}/{$defaultif}_defaultgwv6");
}
$dont_add_route = false;
/* if OLSRD is enabled, allow WAN to house DHCP. */
if($config['installedpackages']['olsrd']) {
@ -364,7 +398,7 @@ function system_routing_configure($interface = "") {
}
}
}
/* Create a array from the existing route table */
/* Create a array from the existing inet route table */
exec("/usr/bin/netstat -rnf inet", $route_str);
array_shift($route_str);
array_shift($route_str);
@ -379,7 +413,7 @@ function system_routing_configure($interface = "") {
if ($dont_add_route == false ) {
if (!empty($interface) && $interface != $interfacegw)
;
else if (($interfacegw <> "bgpd") && (is_ipaddr($gatewayip))) {
else if (($interfacegw <> "bgpd") && (is_ipaddrv4($gatewayip))) {
$action = "add";
if(isset($route_arr['default'])) {
$action = "change";
@ -389,29 +423,60 @@ function system_routing_configure($interface = "") {
}
}
/* Create a array from the existing inet6 route table */
exec("/usr/bin/netstat -rnf inet6", $routev6_str);
array_shift($routev6_str);
array_shift($routev6_str);
array_shift($routev6_str);
array_shift($routev6_str);
$routev6_arr = array();
foreach($routev6_str as $routeline) {
$items = preg_split("/[ ]+/i", $routeline);
$routev6_arr[$items[0]] = array($items[0], $items[1], $items[5]);
}
if ($dont_add_route == false ) {
if (!empty($interface) && $interface != $interfacegwv6)
;
else if (($interfacegwv6 <> "bgpd") && (is_ipaddrv6($gatewayipv6))) {
$action = "add";
if(isset($routev6_arr['default'])) {
$action = "change";
}
log_error("ROUTING: $action IPv6 default route to $gatewayipv6");
mwexec("/sbin/route {$action} -inet6 default " . escapeshellarg($gatewayipv6));
}
}
if (is_array($config['staticroutes']['route'])) {
$gateways_arr = return_gateways_array();
foreach ($config['staticroutes']['route'] as $rtent) {
$gatewayip = "";
if (empty($gateways_arr[$rtent['gateway']])) {
log_error("Static Routes: Gateway IP could not be found for {$rtent['network']}");
log_error(sprintf(gettext("Static Routes: Gateway IP could not be found for %s"), $rtent['network']));
continue;
}
$gateway = $gateways_arr[$rtent['gateway']];
if (!empty($interface) && $interface != $gateway['friendlyiface'])
continue;
$gatewayip = $gateway['gateway'];
$interfacegw = $gateway['interface'];
$action = "add";
if (isset($route_arr[$rtent['network']]))
$action = "change";
if(is_ipaddrv6($gatewayip)) {
$inetfamily = "-inet6";
} else {
$inetfamily = "-inet";
}
if (is_ipaddr($gatewayip)) {
mwexec("/sbin/route {$action} -inet " . escapeshellarg($rtent['network']) .
mwexec("/sbin/route {$action} {$inetfamily} " . escapeshellarg($rtent['network']) .
" " . escapeshellarg($gatewayip));
} else if (!empty($interfacegw)) {
mwexec("/sbin/route {$action} -inet " . escapeshellarg($rtent['network']) .
mwexec("/sbin/route {$action} {$inetfamily} " . escapeshellarg($rtent['network']) .
" -iface " . escapeshellarg($interfacegw));
}
}
@ -427,7 +492,9 @@ function system_routing_enable() {
echo "system_routing_enable() being called $mt\n";
}
return mwexec("/sbin/sysctl net.inet.ip.forwarding=1");
mwexec("/sbin/sysctl net.inet.ip.forwarding=1");
mwexec("/sbin/sysctl net.inet6.ip6.forwarding=1");
return;
}
function system_syslogd_start() {
@ -440,7 +507,7 @@ function system_syslogd_start() {
$syslogcfg = $config['syslog'];
if ($g['booting'])
echo "Starting syslog...";
echo gettext("Starting syslog...");
else
killbypid("{$g['varrun_path']}/syslog.pid");
@ -479,7 +546,7 @@ function system_syslogd_start() {
/* write syslog.conf */
$fd = fopen("{$g['varetc_path']}/syslog.conf", "w");
if (!$fd) {
printf("Error: cannot open syslog.conf in system_syslogd_start().\n");
printf(gettext("Error: cannot open syslog.conf in system_syslogd_start().%s"), "\n");
return 1;
}
$syslogconf .= "!ntpdate,!ntpd\n";
@ -631,6 +698,12 @@ EOD;
EOD;
}
if (isset($syslogcfg['zmqserver'])) {
$syslogconf .= <<<EOD
*.* ^{$syslogcfg['zmqserver']}
EOD;
}
fwrite($fd, $syslogconf);
fclose($fd);
@ -649,7 +722,7 @@ EOD;
}
if ($g['booting'])
echo "done.\n";
echo gettext("done.") . "\n";
return $retval;
}
@ -662,7 +735,7 @@ function system_pccard_start() {
}
if ($g['booting'])
echo "Initializing PCMCIA...";
echo gettext("Initializing PCMCIA...");
/* kill any running pccardd */
killbypid("{$g['varrun_path']}/pccardd.pid");
@ -672,9 +745,9 @@ function system_pccard_start() {
if ($g['booting']) {
if ($res == 0)
echo "done.\n";
echo gettext("done.") . "\n";
else
echo "failed!\n";
echo gettext("failed!") . "\n";
}
return $res;
@ -685,7 +758,7 @@ function system_webgui_start() {
global $config, $g;
if ($g['booting'])
echo "Starting webConfigurator...";
echo gettext("Starting webConfigurator...");
/* kill any running lighttpd */
killbypid("{$g['varrun_path']}/lighty-webConfigurator.pid");
@ -717,7 +790,7 @@ function system_webgui_start() {
log_error("Creating SSL Certificate for this host");
$cert = array();
$cert['refid'] = uniqid();
$cert['descr'] = "webConfigurator default";
$cert['descr'] = gettext("webConfigurator default");
mwexec("/usr/bin/openssl genrsa 1024 > {$g['tmp_path']}/ssl.key");
mwexec("/usr/bin/openssl req -new -x509 -nodes -sha1 -days 2000 -key {$g['tmp_path']}/ssl.key > {$g['tmp_path']}/ssl.crt");
$crt = file_get_contents("{$g['tmp_path']}/ssl.crt");
@ -727,7 +800,7 @@ function system_webgui_start() {
cert_import($cert, $crt, $key);
$a_cert[] = $cert;
$config['system']['webgui']['ssl-certref'] = $cert['refid'];
write_config("Importing HTTPS certificate");
write_config(gettext("Importing HTTPS certificate"));
if(!$config['system']['webgui']['port'])
$portarg = "443";
$ca = ca_chain($cert);
@ -757,9 +830,9 @@ function system_webgui_start() {
if ($g['booting']) {
if ($res == 0)
echo "done.\n";
echo gettext("done.") . "\n";
else
echo "failed!\n";
echo gettext("failed!") . "\n";
}
return $res;
@ -912,13 +985,14 @@ EOD;
## FreeBSD!
server.event-handler = "freebsd-kqueue"
server.network-backend = "writev"
#server.use-ipv6 = "enable"
## modules to load
server.modules = (
{$captive_portal_module}
"mod_access", "mod_accesslog", "mod_expire", "mod_compress", "mod_redirect",
{$module}{$captiveportal}
)
{$captive_portal_module}
"mod_access", "mod_accesslog", "mod_expire", "mod_compress", "mod_redirect",
{$module}{$captiveportal}
)
## Unused modules
# "mod_setenv",
@ -1025,7 +1099,41 @@ url.access-deny = ( "~", ".inc" )
######### Options that are good to be but not neccesary to be changed #######
## bind to port (default: 80)
server.port = {$lighty_port}
EOD;
if($captive_portal == true) {
$lighty_config .= "server.bind = \"127.0.0.1\"\n";
$lighty_config .= "server.port = {$lighty_port}\n";
$lighty_config .= "\$SERVER[\"socket\"] == \"127.0.0.1:{$lighty_port}\" { }\n";
$lighty_config .= "\$SERVER[\"socket\"] == \"[::1]:{$lighty_port}\" { \n";
if($cert <> "" and $key <> "") {
$lighty_config .= "\n";
$lighty_config .= "## ssl configuration\n";
$lighty_config .= "ssl.engine = \"enable\"\n";
$lighty_config .= "ssl.pemfile = \"{$g['varetc_path']}/{$cert_location}\"\n\n";
if($ca <> "")
$lighty_config .= "ssl.ca-file = \"{$g['varetc_path']}/{$ca_location}\"\n\n";
}
$lighty_config .= " }\n";
} else {
$lighty_config .= "server.bind = \"0.0.0.0\"\n";
$lighty_config .= "server.port = {$lighty_port}\n";
$lighty_config .= "\$SERVER[\"socket\"] == \"0.0.0.0:{$lighty_port}\" { }\n";
$lighty_config .= "\$SERVER[\"socket\"] == \"[::]:{$lighty_port}\" { \n";
if($cert <> "" and $key <> "") {
$lighty_config .= "\n";
$lighty_config .= "## ssl configuration\n";
$lighty_config .= "ssl.engine = \"enable\"\n";
$lighty_config .= "ssl.pemfile = \"{$g['varetc_path']}/{$cert_location}\"\n\n";
if($ca <> "")
$lighty_config .= "ssl.ca-file = \"{$g['varetc_path']}/{$ca_location}\"\n\n";
}
$lighty_config .= " }\n";
}
$lighty_config .= <<<EOD
## error-handler for status 404
#server.error-handler-404 = "/error-handler.html"
@ -1074,7 +1182,7 @@ EOD;
if($cert <> "" and $key <> "") {
$fd = fopen("{$g['varetc_path']}/{$cert_location}", "w");
if (!$fd) {
printf("Error: cannot open cert.pem in system_webgui_start().\n");
printf(gettext("Error: cannot open cert.pem in system_webgui_start().%s"), "\n");
return 1;
}
chmod("{$g['varetc_path']}/{$cert_location}", 0600);
@ -1085,7 +1193,7 @@ EOD;
if(!(empty($ca) || (strlen(trim($ca)) == 0))) {
$fd = fopen("{$g['varetc_path']}/{$ca_location}", "w");
if (!$fd) {
printf("Error: cannot open ca.pem in system_webgui_start().\n");
printf(gettext("Error: cannot open ca.pem in system_webgui_start().%s"), "\n");
return 1;
}
chmod("{$g['varetc_path']}/{$ca_location}", 0600);
@ -1093,7 +1201,7 @@ EOD;
fclose($fd);
}
$lighty_config .= "\n";
$lighty_config .= "## ssl configuration\n";
$lighty_config .= "## " . gettext("ssl configuration") . "\n";
$lighty_config .= "ssl.engine = \"enable\"\n";
$lighty_config .= "ssl.pemfile = \"{$g['varetc_path']}/{$cert_location}\"\n\n";
@ -1120,7 +1228,7 @@ EOD;
$fd = fopen("{$filename}", "w");
if (!$fd) {
printf("Error: cannot open {$filename} in system_generate_lighty_config().\n");
printf(gettext("Error: cannot open %s in system_generate_lighty_config().%s"), $filename, "\n");
return 1;
}
fwrite($fd, $lighty_config);
@ -1140,7 +1248,7 @@ function system_timezone_configure() {
$syscfg = $config['system'];
if ($g['booting'])
echo "Setting timezone...";
echo gettext("Setting timezone...");
/* extract appropriate timezone file */
$timezone = $syscfg['timezone'];
@ -1156,7 +1264,7 @@ function system_timezone_configure() {
conf_mount_ro();
if ($g['booting'])
echo "done.\n";
echo gettext("done.") . "\n";
}
function system_ntp_configure() {
@ -1226,7 +1334,7 @@ function sync_system_time() {
global $config, $g;
if ($g['booting'])
echo "Syncing system time before startup...";
echo gettext("Syncing system time before startup...");
/* foreach through servers and write out to ntpd.conf */
foreach (explode(' ', $config['system']['timeservers']) as $ts) {
@ -1234,7 +1342,7 @@ function sync_system_time() {
}
if ($g['booting'])
echo "done.\n";
echo gettext("done.") . "\n";
}
@ -1332,7 +1440,7 @@ function system_dmesg_save() {
$fd = fopen("{$g['varlog_path']}/dmesg.boot", "w");
if (!$fd) {
printf("Error: cannot open dmesg.boot in system_dmesg_save().\n");
printf(gettext("Error: cannot open dmesg.boot in system_dmesg_save().%s"), "\n");
return 1;
}
@ -1353,7 +1461,7 @@ function system_set_harddisk_standby() {
if (isset($config['system']['harddiskstandby'])) {
if ($g['booting']) {
echo 'Setting hard disk standby... ';
echo gettext('Setting hard disk standby... ');
}
$standby = $config['system']['harddiskstandby'];
@ -1365,13 +1473,13 @@ function system_set_harddisk_standby() {
// Reinitialize ATA-drives
mwexec('/usr/local/sbin/atareinit');
if ($g['booting']) {
echo "done.\n";
echo gettext("done.") . "\n";
}
} else if ($g['booting']) {
echo "failed!\n";
echo gettext("failed!") . "\n";
}
} else if ($g['booting']) {
echo "failed!\n";
echo gettext("failed!") . "\n";
}
}
}
@ -1470,10 +1578,10 @@ function system_identify_specific_platform() {
global $g;
if ($g['platform'] == 'generic-pc')
return array('name' => 'generic-pc', 'descr' => "Generic PC");
return array('name' => 'generic-pc', 'descr' => gettext("Generic PC"));
if ($g['platform'] == 'generic-pc-cdrom')
return array('name' => 'generic-pc-cdrom', 'descr' => "Generic PC (CD-ROM)");
return array('name' => 'generic-pc-cdrom', 'descr' => gettext("Generic PC (CD-ROM)"));
/* the rest of the code only deals with 'embedded' platforms */
if ($g['platform'] != 'nanobsd')
@ -1482,10 +1590,10 @@ function system_identify_specific_platform() {
$dmesg = system_get_dmesg_boot();
if (strpos($dmesg, "PC Engines WRAP") !== false)
return array('name' => 'wrap', 'descr' => 'PC Engines WRAP');
return array('name' => 'wrap', 'descr' => gettext('PC Engines WRAP'));
if (strpos($dmesg, "PC Engines ALIX") !== false)
return array('name' => 'alix', 'descr' => 'PC Engines ALIX');
return array('name' => 'alix', 'descr' => gettext('PC Engines ALIX'));
if (preg_match("/Soekris net45../", $dmesg, $matches))
return array('name' => 'net45xx', 'descr' => $matches[0]);
@ -1497,7 +1605,7 @@ function system_identify_specific_platform() {
return array('name' => 'net55xx', 'descr' => $matches[0]);
/* unknown embedded platform */
return array('name' => 'embedded', 'descr' => 'embedded (unknown)');
return array('name' => 'embedded', 'descr' => gettext('embedded (unknown)'));
}
function system_get_dmesg_boot() {

View File

@ -110,8 +110,8 @@ function upgrade_010_to_011() {
$fr['interface'] = $ifmap[$fr['interface']];
else {
/* remove the rule */
echo "\nWarning: filter rule removed " .
"(interface '{$fr['interface']}' does not exist anymore).";
printf(gettext("%sWarning: filter rule removed " .
"(interface '%s' does not exist anymore)."), "\n", $fr['interface']);
unset($config['filter']['rule'][$i]);
continue;
}
@ -122,8 +122,8 @@ function upgrade_010_to_011() {
$fr['source']['network'] = $ifmap[$fr['source']['network']];
else {
/* remove the rule */
echo "\nWarning: filter rule removed " .
"(source network '{$fr['source']['network']}' does not exist anymore).";
printf(gettext("%sWarning: filter rule removed " .
"(source network '%s' does not exist anymore)."), "\n", $fr['source']['network']);
unset($config['filter']['rule'][$i]);
continue;
}
@ -135,8 +135,8 @@ function upgrade_010_to_011() {
$fr['destination']['network'] = $ifmap[$fr['destination']['network']];
else {
/* remove the rule */
echo "\nWarning: filter rule removed " .
"(destination network '{$fr['destination']['network']}' does not exist anymore).";
printf(gettext("%sWarning: filter rule removed " .
"(destination network '%s' does not exist anymore)."), "\n", $fr['destination']['network']);
unset($config['filter']['rule'][$i]);
continue;
}
@ -155,8 +155,8 @@ function upgrade_010_to_011() {
$fr['interface'] = $ifmap[$fr['interface']];
else {
/* remove the rule */
echo "\nWarning: traffic shaper rule removed " .
"(interface '{$fr['interface']}' does not exist anymore).";
printf(gettext("%sWarning: traffic shaper rule removed " .
"(interface '%s' does not exist anymore)."), "\n", $fr['interface']);
unset($config['pfqueueing']['rule'][$i]);
continue;
}
@ -167,8 +167,8 @@ function upgrade_010_to_011() {
$fr['source']['network'] = $ifmap[$fr['source']['network']];
else {
/* remove the rule */
echo "\nWarning: traffic shaper rule removed " .
"(source network '{$fr['source']['network']}' does not exist anymore).";
printf(gettext("%sWarning: traffic shaper rule removed " .
"(source network '%s' does not exist anymore)."), "\n", $fr['source']['network']);
unset($config['pfqueueing']['rule'][$i]);
continue;
}
@ -180,8 +180,8 @@ function upgrade_010_to_011() {
$fr['destination']['network'] = $ifmap[$fr['destination']['network']];
else {
/* remove the rule */
echo "\nWarning: traffic shaper rule removed " .
"(destination network '{$fr['destination']['network']}' does not exist anymore).";
printf(gettext("%sWarning: traffic shaper rule removed " .
"(destination network '%s' does not exist anymore)."), "\n", $fr['destination']['network']);
unset($config['pfqueueing']['rule'][$i]);
continue;
}
@ -330,7 +330,7 @@ function upgrade_017_to_018() {
$vip = array();
$vip['mode'] = "carp";
$vip['interface'] = "AUTO";
$vip['descr'] = "CARP vhid {$carpent['vhid']}";
$vip['descr'] = sprintf(gettext("CARP vhid %s"), $carpent['vhid']);
$vip['type'] = "single";
$vip['vhid'] = $carpent['vhid'];
$vip['advskew'] = $carpent['advskew'];
@ -507,7 +507,7 @@ function upgrade_028_to_029() {
$rule_item['type'] = "pass";
$rule_item['source']['any'] = true;
$rule_item['destination']['any'] = true;
$rule_item['descr'] = "Permit IPsec traffic.";
$rule_item['descr'] = gettext("Permit IPsec traffic.");
$rule_item['statetype'] = "keep state";
$a_filter[] = $rule_item;
}
@ -582,7 +582,7 @@ function upgrade_039_to_040() {
if (isset ($config['system']['username'])) {
$config['system']['group'] = array();
$config['system']['group'][0]['name'] = "admins";
$config['system']['group'][0]['description'] = "System Administrators";
$config['system']['group'][0]['description'] = gettext("System Administrators");
$config['system']['group'][0]['scope'] = "system";
$config['system']['group'][0]['priv'] = "page-all";
$config['system']['group'][0]['home'] = "index.php";
@ -601,19 +601,19 @@ function upgrade_039_to_040() {
$config['system']['user'][0]['priv'] = array();
$config['system']['user'][0]['priv'][0]['id'] = "lockwc";
$config['system']['user'][0]['priv'][0]['name'] = "Lock webConfigurator";
$config['system']['user'][0]['priv'][0]['descr'] = "Indicates whether this user will lock access to the webConfigurator for other users.";
$config['system']['user'][0]['priv'][0]['descr'] = gettext("Indicates whether this user will lock access to the webConfigurator for other users.");
$config['system']['user'][0]['priv'][1]['id'] = "lock-ipages";
$config['system']['user'][0]['priv'][1]['name'] = "Lock individual pages";
$config['system']['user'][0]['priv'][1]['descr'] = "Indicates whether this user will lock individual HTML pages after having accessed a particular page (the lock will be freed if the user leaves or saves the page form).";
$config['system']['user'][0]['priv'][1]['descr'] = gettext("Indicates whether this user will lock individual HTML pages after having accessed a particular page (the lock will be freed if the user leaves or saves the page form).");
$config['system']['user'][0]['priv'][2]['id'] = "hasshell";
$config['system']['user'][0]['priv'][2]['name'] = "Has shell access";
$config['system']['user'][0]['priv'][2]['descr'] = "Indicates whether this user is able to login for example via SSH.";
$config['system']['user'][0]['priv'][2]['descr'] = gettext("Indicates whether this user is able to login for example via SSH.");
$config['system']['user'][0]['priv'][3]['id'] = "copyfiles";
$config['system']['user'][0]['priv'][3]['name'] = "Is allowed to copy files";
$config['system']['user'][0]['priv'][3]['descr'] = "Indicates whether this user is allowed to copy files onto the {$g['product_name']} appliance via SCP/SFTP. If you are going to use this privilege, you must install scponly on the appliance (Hint: pkg_add -r scponly).";
$config['system']['user'][0]['priv'][3]['descr'] = sprintf(gettext("Indicates whether this user is allowed to copy files onto the %s appliance via SCP/SFTP. If you are going to use this privilege, you must install scponly on the appliance (Hint: pkg_add -r scponly)."), $g['product_name']);
$config['system']['user'][0]['priv'][4]['id'] = "isroot";
$config['system']['user'][0]['priv'][4]['name'] = "Is root user";
$config['system']['user'][0]['priv'][4]['descr'] = "This user is associated with the UNIX root user (you should associate this privilege only with one single user).";
$config['system']['user'][0]['priv'][4]['descr'] = gettext("This user is associated with the UNIX root user (you should associate this privilege only with one single user).");
$config['system']['nextuid'] = "111";
$config['system']['nextgid'] = "111";
@ -630,75 +630,75 @@ function upgrade_040_to_041() {
$config['sysctl']['item'] = array();
$config['sysctl']['item'][0]['tunable'] = "net.inet.tcp.blackhole";
$config['sysctl']['item'][0]['descr'] = "Drop packets to closed TCP ports without returning a RST";
$config['sysctl']['item'][0]['descr'] = gettext("Drop packets to closed TCP ports without returning a RST");
$config['sysctl']['item'][0]['value'] = "default";
$config['sysctl']['item'][1]['tunable'] = "net.inet.udp.blackhole";
$config['sysctl']['item'][1]['descr'] = "Do not send ICMP port unreachable messages for closed UDP ports";
$config['sysctl']['item'][1]['descr'] = gettext("Do not send ICMP port unreachable messages for closed UDP ports");
$config['sysctl']['item'][1]['value'] = "default";
$config['sysctl']['item'][2]['tunable'] = "net.inet.ip.random_id";
$config['sysctl']['item'][2]['descr'] = "Randomize the ID field in IP packets (default is 0: sequential IP IDs)";
$config['sysctl']['item'][2]['descr'] = gettext("Randomize the ID field in IP packets (default is 0: sequential IP IDs)");
$config['sysctl']['item'][2]['value'] = "default";
$config['sysctl']['item'][3]['tunable'] = "net.inet.tcp.drop_synfin";
$config['sysctl']['item'][3]['descr'] = "Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)";
$config['sysctl']['item'][3]['descr'] = gettext("Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)");
$config['sysctl']['item'][3]['value'] = "default";
$config['sysctl']['item'][4]['tunable'] = "net.inet.ip.redirect";
$config['sysctl']['item'][4]['descr'] = "Sending of IPv4 ICMP redirects";
$config['sysctl']['item'][4]['descr'] = gettext("Sending of IPv4 ICMP redirects");
$config['sysctl']['item'][4]['value'] = "default";
$config['sysctl']['item'][5]['tunable'] = "net.inet6.ip6.redirect";
$config['sysctl']['item'][5]['descr'] = "Sending of IPv6 ICMP redirects";
$config['sysctl']['item'][5]['descr'] = gettext("Sending of IPv6 ICMP redirects");
$config['sysctl']['item'][5]['value'] = "default";
$config['sysctl']['item'][6]['tunable'] = "net.inet.tcp.syncookies";
$config['sysctl']['item'][6]['descr'] = "Generate SYN cookies for outbound SYN-ACK packets";
$config['sysctl']['item'][6]['descr'] = gettext("Generate SYN cookies for outbound SYN-ACK packets");
$config['sysctl']['item'][6]['value'] = "default";
$config['sysctl']['item'][7]['tunable'] = "net.inet.tcp.recvspace";
$config['sysctl']['item'][7]['descr'] = "Maximum incoming TCP datagram size";
$config['sysctl']['item'][7]['descr'] = gettext("Maximum incoming TCP datagram size");
$config['sysctl']['item'][7]['value'] = "default";
$config['sysctl']['item'][8]['tunable'] = "net.inet.tcp.sendspace";
$config['sysctl']['item'][8]['descr'] = "Maximum outgoing TCP datagram size";
$config['sysctl']['item'][8]['descr'] = gettext("Maximum outgoing TCP datagram size");
$config['sysctl']['item'][8]['value'] = "default";
$config['sysctl']['item'][9]['tunable'] = "net.inet.ip.fastforwarding";
$config['sysctl']['item'][9]['descr'] = "Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-January/002534.html)";
$config['sysctl']['item'][9]['descr'] = gettext("Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-January/002534.html)");
$config['sysctl']['item'][9]['value'] = "default";
$config['sysctl']['item'][10]['tunable'] = "net.inet.tcp.delayed_ack";
$config['sysctl']['item'][10]['descr'] = "Do not delay ACK to try and piggyback it onto a data packet";
$config['sysctl']['item'][10]['descr'] = gettext("Do not delay ACK to try and piggyback it onto a data packet");
$config['sysctl']['item'][10]['value'] = "default";
$config['sysctl']['item'][11]['tunable'] = "net.inet.udp.maxdgram";
$config['sysctl']['item'][11]['descr'] = "Maximum outgoing UDP datagram size";
$config['sysctl']['item'][11]['descr'] = gettext("Maximum outgoing UDP datagram size");
$config['sysctl']['item'][11]['value'] = "default";
$config['sysctl']['item'][12]['tunable'] = "net.link.bridge.pfil_onlyip";
$config['sysctl']['item'][12]['descr'] = "Handling of non-IP packets which are not passed to pfil (see if_bridge(4))";
$config['sysctl']['item'][12]['descr'] = gettext("Handling of non-IP packets which are not passed to pfil (see if_bridge(4))");
$config['sysctl']['item'][12]['value'] = "default";
$config['sysctl']['item'][13]['tunable'] = "net.link.tap.user_open";
$config['sysctl']['item'][13]['descr'] = "Allow unprivileged access to tap(4) device nodes";
$config['sysctl']['item'][13]['descr'] = gettext("Allow unprivileged access to tap(4) device nodes");
$config['sysctl']['item'][13]['value'] = "default";
$config['sysctl']['item'][15]['tunable'] = "kern.randompid";
$config['sysctl']['item'][15]['descr'] = "Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())";
$config['sysctl']['item'][15]['descr'] = gettext("Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())");
$config['sysctl']['item'][15]['value'] = "default";
$config['sysctl']['item'][16]['tunable'] = "net.inet.tcp.inflight.enable";
$config['sysctl']['item'][16]['descr'] = "The system will attempt to calculate the bandwidth delay product for each connection and limit the amount of data queued to the network to just the amount required to maintain optimum throughput. ";
$config['sysctl']['item'][16]['descr'] = gettext("The system will attempt to calculate the bandwidth delay product for each connection and limit the amount of data queued to the network to just the amount required to maintain optimum throughput. ");
$config['sysctl']['item'][16]['value'] = "default";
$config['sysctl']['item'][17]['tunable'] = "net.inet.icmp.icmplim";
$config['sysctl']['item'][17]['descr'] = "Set ICMP Limits";
$config['sysctl']['item'][17]['descr'] = gettext("Set ICMP Limits");
$config['sysctl']['item'][17]['value'] = "default";
$config['sysctl']['item'][18]['tunable'] = "net.inet.tcp.tso";
$config['sysctl']['item'][18]['descr'] = "TCP Offload engine";
$config['sysctl']['item'][18]['descr'] = gettext("TCP Offload engine");
$config['sysctl']['item'][18]['value'] = "default";
$config['sysctl']['item'][19]['tunable'] = "net.inet.ip.portrange.first";
@ -739,10 +739,10 @@ function upgrade_042_to_043() {
$config['gateways']['gateway_item'][$i] = array();
if(is_ipaddr($config['interfaces'][$ifname]['gateway'])) {
$config['gateways']['gateway_item'][$i]['gateway'] = $config['interfaces'][$ifname]['gateway'];
$config['gateways']['gateway_item'][$i]['descr'] = "Interface $ifname Static Gateway";
$config['gateways']['gateway_item'][$i]['descr'] = sprintf(gettext("Interface %s Static Gateway"), $ifname);
} else {
$config['gateways']['gateway_item'][$i]['gateway'] = "dynamic";
$config['gateways']['gateway_item'][$i]['descr'] = "Interface $ifname Dynamic Gateway";
$config['gateways']['gateway_item'][$i]['descr'] = sprintf(gettext("Interface %s Dynamic Gateway"), $ifname);
}
$config['gateways']['gateway_item'][$i]['interface'] = $ifname;
$config['gateways']['gateway_item'][$i]['name'] = "GW_" . strtoupper($ifname);
@ -807,7 +807,7 @@ function upgrade_043_to_044() {
$gwmap[$sroute['gateway']] = $gateway['name'];
$gateway['gateway'] = $sroute['gateway'];
$gateway['interface'] = $sroute['interface'];
$gateway['descr'] = "Upgraded static route for {$sroute['network']}";
$gateway['descr'] = sprintf(gettext("Upgraded static route for %s"), $sroute['network']);
if (!is_array($config['gateways']['gateway_item']))
$config['gateways']['gateway_item'] = array();
$config['gateways']['gateway_item'][] = $gateway;
@ -904,7 +904,7 @@ function upgrade_045_to_046() {
$pool['type'] = 'server';
$pool['behaviour'] = 'balance';
$pool['name'] = "{$vs_a[$i]['name']}-sitedown";
$pool['descr'] = "Sitedown pool for VS: {$vs_a[$i]['name']}";
$pool['descr'] = sprintf(gettext("Sitedown pool for VS: %s"), $vs_a[$i]['name']);
$pool['port'] = $pools[$vs_a[$i]['pool']]['port'];
$pool['servers'] = array();
$pool['servers'][] = $vs_a[$i]['sitedown'];
@ -1057,7 +1057,7 @@ function upgrade_046_to_047() {
if (isset($tunnel['disabled']))
$ph1ent['disabled'] = $tunnel['disabled'];
$ph2ent['descr'] = "phase2 for ".$tunnel['descr'];
$ph2ent['descr'] = sprintf(gettext("phase2 for %s"), $tunnel['descr']);
$type = "lan";
if ($tunnel['local-subnet']['network'])
@ -1284,7 +1284,7 @@ function upgrade_047_to_048() {
$tempdyn['host'] = $config['dyndns'][0]['host'];
$tempdyn['mx'] = $config['dyndns'][0]['mx'];
$tempdyn['interface'] = "wan";
$tempdyn['descr'] = "Upgraded Dyndns {$tempdyn['type']}";
$tempdyn['descr'] = sprintf(gettext("Upgraded Dyndns %s"), $tempdyn['type']);
$config['dyndnses']['dyndns'][] = $tempdyn;
}
unset($config['dyndns']);
@ -1336,7 +1336,7 @@ function upgrade_048_to_049() {
/* setup new all users group */
$all = array();
$all['name'] = "all";
$all['description'] = "All Users";
$all['description'] = gettext("All Users");
$all['scope'] = "system";
$all['gid'] = 1998;
$all['member'] = array();
@ -1468,7 +1468,7 @@ function upgrade_050_to_051() {
if (isset($intf['bridge']) && $intf['bridge'] <> "") {
$nbridge = array();
$nbridge['members'] = "{$ifr},{$intf['bridge']}";
$nbridge['descr'] = "Converted bridged {$ifr}";
$nbridge['descr'] = sprintf(gettext("Converted bridged %s"), $ifr);
$nbridge['bridgeif'] = "bridge{$i}";
$config['bridges']['bridged'][] = $nbridge;
unset($intf['bridge']);
@ -1794,7 +1794,7 @@ function upgrade_051_to_052() {
$ovpnrule['destination'] = array();
$ovpnrule['source']['any'] = true;
$ovpnrule['destination']['any'] = true;
$ovpnrule['descr'] = "Auto added OpenVPN rule from config upgrade.";
$ovpnrule['descr'] = gettext("Auto added OpenVPN rule from config upgrade.");
$config['filter']['rule'][] = $ovpnrule;
}
@ -1964,7 +1964,7 @@ function upgrade_054_to_055() {
$xmldumpnew = "{$database}.new.xml";
if ($g['booting'])
echo "Migrate RRD database {$database} to new format \n";
echo "Migrate RRD database {$database} to new format for IPv6 \n";
mwexec("$rrdtool tune {$rrddbpath}{$database} -r roundtrip:delay 2>&1");
dump_rrd_to_xml("{$rrddbpath}/{$database}", "{$g['tmp_path']}/{$xmldump}");
@ -2516,8 +2516,8 @@ function upgrade_075_to_076() {
function upgrade_076_to_077() {
global $config;
foreach($config['filter']['rule'] as & $rule) {
if (isset($rule['protocol']) && !empty($rule['protocol']))
$rule['protocol'] = strtolower($rule['protocol']);
if (isset($rule['protocol']) && !empty($rule['protocol']))
$rule['protocol'] = strtolower($rule['protocol']);
}
}
@ -2538,7 +2538,6 @@ function upgrade_077_to_078() {
$config['pptpd']['radius'] = $radarr;
}
}
function upgrade_078_to_079() {
global $g;
/* Delete old and unused RRD file */
@ -2556,4 +2555,95 @@ function upgrade_079_to_080() {
}
}
function upgrade_080_to_081() {
global $config;
global $g;
/* RRD files changed for quality, traffic and packets graphs */
/* convert traffic RRD file */
global $parsedcfg, $listtags;
$listtags = array("ds", "v", "rra", "row");
$rrddbpath = "/var/db/rrd/";
$rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool";
$rrdinterval = 60;
$valid = $rrdinterval * 2;
/* Asume GigE for now */
$downstream = 125000000;
$upstream = 125000000;
/* build a list of traffic and packets databases */
$databases = array();
exec("cd $rrddbpath;/usr/bin/find *-traffic.rrd *-packets.rrd", $databases);
rsort($databases);
foreach($databases as $database) {
$databasetmp = "{$database}.tmp";
$xmldump = "{$database}.old.xml";
$xmldumptmp = "{$database}.tmp.xml";
$xmldumpnew = "{$database}.new.xml";
if ($g['booting'])
echo "Migrate RRD database {$database} to new format for IPv6.\n";
/* dump contents to xml and move database out of the way */
dump_rrd_to_xml("{$rrddbpath}/{$database}", "{$g['tmp_path']}/{$xmldump}");
/* create new rrd database file */
$rrdcreate = "$rrdtool create {$g['tmp_path']}/{$databasetmp} --step $rrdinterval ";
$rrdcreate .= "DS:inpass:COUNTER:$valid:0:$downstream ";
$rrdcreate .= "DS:outpass:COUNTER:$valid:0:$upstream ";
$rrdcreate .= "DS:inblock:COUNTER:$valid:0:$downstream ";
$rrdcreate .= "DS:outblock:COUNTER:$valid:0:$upstream ";
$rrdcreate .= "DS:inpass6:COUNTER:$valid:0:$downstream ";
$rrdcreate .= "DS:outpass6:COUNTER:$valid:0:$upstream ";
$rrdcreate .= "DS:inblock6:COUNTER:$valid:0:$downstream ";
$rrdcreate .= "DS:outblock6:COUNTER:$valid:0:$upstream ";
$rrdcreate .= "RRA:AVERAGE:0.5:1:1000 ";
$rrdcreate .= "RRA:AVERAGE:0.5:5:1000 ";
$rrdcreate .= "RRA:AVERAGE:0.5:60:1000 ";
$rrdcreate .= "RRA:AVERAGE:0.5:720:3000 ";
create_new_rrd("$rrdcreate");
/* create temporary xml from new RRD */
dump_rrd_to_xml("{$g['tmp_path']}/{$databasetmp}", "{$g['tmp_path']}/{$xmldumptmp}");
$rrdoldxml = file_get_contents("{$g['tmp_path']}/{$xmldump}");
$rrdold = xml2array($rrdoldxml, 1, "tag");
$rrdold = $rrdold['rrd'];
$rrdnewxml = file_get_contents("{$g['tmp_path']}/{$xmldumptmp}");
$rrdnew = xml2array($rrdnewxml, 1, "tag");
$rrdnew = $rrdnew['rrd'];
/* remove any MAX RRA's. Not needed for traffic. */
$i = 0;
foreach ($rrdold['rra'] as $rra) {
if(trim($rra['cf']) == "MAX") {
unset($rrdold['rra'][$i]);
}
$i++;
}
$rrdxmlarray = migrate_rrd_format($rrdold, $rrdnew);
$rrdxml = dump_xml_config_raw($rrdxmlarray, "rrd");
file_put_contents("{$g['tmp_path']}/{$xmldumpnew}", $rrdxml);
mwexec("$rrdtool restore -f {$g['tmp_path']}/{$xmldumpnew} {$rrddbpath}/{$database} 2>&1");
}
enable_rrd_graphing();
if ($g['booting'])
echo "Updating configuration...";
foreach($config['filter']['rule'] as & $rule) {
if (isset($rule['protocol']) && !empty($rule['protocol']))
$rule['protocol'] = strtolower($rule['protocol']);
}
}
function upgrade_081_to_082() {
global $config;
/* enable the allow IPv6 toggle */
$config['system']['ipv6allow'] = true;
}
?>

View File

@ -96,7 +96,7 @@ function mark_subsystem_dirty($subsystem = "") {
global $g;
if (!file_put_contents("{$g['varrun_path']}/{$subsystem}.dirty", "DIRTY"))
log_error("WARNING: Could not mark subsystem: {$subsytem} dirty");
log_error(sprintf(gettext("WARNING: Could not mark subsystem: %s dirty"), $subsystem));
}
function clear_subsystem_dirty($subsystem = "") {
@ -116,7 +116,7 @@ function config_unlock() {
function lock($lock, $op = LOCK_SH) {
global $g, $cfglckkeyconsumers;
if (!$lock)
die("WARNING: You must give a name as parameter to lock() function.");
die(gettext("WARNING: You must give a name as parameter to lock() function."));
if (!file_exists("{$g['tmp_path']}/{$lock}.lock"))
@touch("{$g['tmp_path']}/{$lock}.lock");
$cfglckkeyconsumers++;
@ -205,7 +205,7 @@ function refcount_unreference($reference) {
$shm_data = intval($shm_data) - 1;
if ($shm_data < 0) {
//debug_backtrace();
log_error("Reference {$reference} is going negative, not doing unreference.");
log_error(sprintf(gettext("Reference %s is going negative, not doing unreference."), $reference));
} else
shmop_write($shmid, $shm_data, 0);
shmop_close($shmid);
@ -225,10 +225,18 @@ function is_module_loaded($module_name) {
function gen_subnet($ipaddr, $bits) {
if (!is_ipaddr($ipaddr) || !is_numeric($bits))
return "";
return long2ip(ip2long($ipaddr) & gen_subnet_mask_long($bits));
}
/* return the subnet address given a host address and a subnet bit count */
function gen_subnetv6($ipaddr, $bits) {
if (!is_ipaddrv6($ipaddr) || !is_numeric($bits))
return "";
$address = Net_IPv6::getNetmask($ipaddr, $bits);
return $address;
}
/* return the highest (broadcast) address in the subnet given a host address and a subnet bit count */
function gen_subnet_max($ipaddr, $bits) {
if (!is_ipaddr($ipaddr) || !is_numeric($bits))
@ -237,6 +245,49 @@ function gen_subnet_max($ipaddr, $bits) {
return long2ip32(ip2long($ipaddr) | ~gen_subnet_mask_long($bits));
}
/* Generate end number for a given ipv6 subnet mask
* no, it does not perform math */
function gen_subnetv6_max($ipaddr, $bits) {
if(!is_ipaddrv6($ipaddr))
return false;
$subnetstart = gen_subnetv6($ipaddr, $bits);
/* we should have a expanded full ipv6 subnet starting at 0.
* Now split those by the semicolon so we can do 16 bit math */
$parts = explode(":", $subnetstart);
if(count($parts) <> 8)
return false;
/* reverse the array, we start with the lsb */
$parts = array_reverse($parts);
/* set the itteration count properly */
$bitsleft = 128 - $bits;
$i = 0;
foreach($parts as $part) {
/* foreach 16 bits we go to the next part */
/* no this isn't proper hex math, neither does it overflow properly */
while($bitsleft > 0) {
if($part == "0") {
$part = "f";
} else {
$part = $part . "f";
}
$bitsleft = $bitsleft - 4;
$j++;
if($j == 4) {
$parts[$i] = $part;
$j = 0;
$i++;
continue 2;
}
}
$i++;
}
$parts = array_reverse($parts);
$subnet_end = implode(":", $parts);
return $subnet_end;
}
/* returns a subnet mask (long given a bit count) */
function gen_subnet_mask_long($bits) {
$sm = 0;
@ -387,8 +438,26 @@ function is_numericint($arg) {
return (preg_match("/[^0-9]/", $arg) ? false : true);
}
/* returns true if $ipaddr is a valid dotted IPv4 address */
/* returns true if $ipaddr is a valid dotted IPv4 address or a IPv6 */
function is_ipaddr($ipaddr) {
if(is_ipaddrv4($ipaddr)) {
return true;
}
if(is_ipaddrv6($ipaddr)) {
return true;
}
return false;
}
/* returns true if $ipaddr is a valid IPv6 address */
function is_ipaddrv6($ipaddr) {
$result = Net_IPv6::checkIPv6($ipaddr);
return $result;
}
/* returns true if $ipaddr is a valid dotted IPv4 address */
function is_ipaddrv4($ipaddr) {
if (!is_string($ipaddr))
return false;
@ -843,7 +912,7 @@ function mwexec($command, $mute = false) {
$mute = false;
if(($retval <> 0) && ($mute === false)) {
$output = implode(" ", $oarr);
log_error("The command '$command' returned exit code '$retval', the output was '$output' ");
log_error(sprintf(gettext("The command '%1\$s' returned exit code '%2\$d', the output was '%3\$s' "), $command, $retval, $output));
}
return $retval;
}
@ -968,6 +1037,13 @@ function ipcmp($a, $b) {
/* return true if $addr is in $subnet, false if not */
function ip_in_subnet($addr,$subnet) {
if(is_ipaddrv6($addr)) {
$result = Net_IPv6::IsInNetmask($addr, $subnet);
if($result)
return true;
else
return false;
}
list($ip, $mask) = explode('/', $subnet);
$mask = (0xffffffff << (32 - $mask)) & 0xffffffff;
return ((ip2long($addr) & $mask) == (ip2long($ip) & $mask));
@ -1041,8 +1117,9 @@ function resolve_retry($hostname, $retries = 5) {
if (is_ipaddr($hostname))
return $hostname;
for ($i = 0; $i < $retries; $i++) {
$ip = gethostbyname($hostname);
for ($i = 0; $i < $retries; $i++) {
// FIXME: gethostbyname does not work for AAAA hostnames, boo, hiss
$ip = gethostbyname($hostname);
if ($ip && $ip != $hostname) {
/* success */

View File

@ -358,7 +358,7 @@ function voucher_auth($voucher_received, $test = 0) {
list($timestamp,$minutes) = explode(",", $active_vouchers[$roll][$voucher]);
// we have an already active voucher here.
$remaining = intval((($timestamp + (60*$minutes)) - time())/60);
$test_result[] = "$voucher ($roll/$nr) active and good for $remaining Minutes";
$test_result[] = sprintf(gettext('%1$s (%2$s/%3$s) active and good for %4$d Minutes'), $voucher, $roll, $nr, $remaining);
$total_minutes += $remaining;
} else {
// voucher not used. Check if ticket Id is on the roll (not too high)
@ -395,9 +395,9 @@ function voucher_auth($voucher_received, $test = 0) {
// if this was a test call, we're done. Return the result.
if ($test) {
if ($error) {
$test_result[] = "Access denied!";
$test_result[] = gettext("Access denied!");
} else {
$test_result[] = "Access granted for $total_minutes Minutes in total.";
$test_result[] = sprintf(gettext("Access granted for %d Minutes in total."),$total_minutes);
}
unlock($voucherlck);
@ -482,7 +482,7 @@ function voucher_configure($sync = false) {
/* write config file used by voucher binary to decode vouchers */
$fd = fopen("{$g['varetc_path']}/voucher.cfg", "w");
if (!$fd) {
printf("Error: cannot write voucher.cfg\n");
printf(gettext("Error: cannot write voucher.cfg") . "\n");
unlock($voucherlck);
return 1;
}
@ -535,7 +535,7 @@ function voucher_write_used_db($roll, $vdb) {
fwrite($fd, $vdb . "\n");
fclose($fd);
} else
voucher_log(LOG_ERR, "cant write {$g['vardb_path']}/voucher_used_$roll.db");
voucher_log(LOG_ERR, sprintf(gettext('cant write %1$s/voucher_used_%2$s.db'), $g['vardb_path'], $roll));
}
/* return assoc array of active vouchers with activation timestamp
@ -614,7 +614,7 @@ function voucher_read_used_db($roll) {
$vdb = trim(fgets($fd));
fclose($fd);
} else {
voucher_log(LOG_ERR, "cant read {$g['vardb_path']}/voucher_used_$roll.db");
voucher_log(LOG_ERR, sprintf(gettext('cant read %1$s/voucher_used_%2$s.db'), $g['vardb_path'], $roll));
}
}
return base64_decode($vdb);
@ -632,7 +632,7 @@ function voucher_log($priority, $message) {
define_syslog_variables();
$message = trim($message);
openlog("logportalauth", LOG_PID, LOG_LOCAL4);
syslog($priority, "Voucher: " . $message);
syslog($priority, gettext("Voucher: ") . $message);
closelog();
}

View File

@ -121,7 +121,7 @@ function vpn_ipsec_configure($ipchg = false)
mwexec("/sbin/sysctl net.inet.ip.ipsec_in_use=1");
if ($g['booting'])
echo "Configuring IPsec VPN... ";
echo gettext("Configuring IPsec VPN... ");
/* fastforwarding is not compatible with ipsec tunnels */
mwexec("/sbin/sysctl net.inet.ip.fastforwarding=0");
@ -138,12 +138,13 @@ function vpn_ipsec_configure($ipchg = false)
$ipsecpinghosts = "";
/* step through each phase1 entry */
$ipsecpinghosts = "";
foreach ($a_phase1 as $ph1ent) {
if (isset($ph1ent['disabled']))
continue;
$ep = ipsec_get_phase1_src($ph1ent);
if (!$ep)
if (!is_ipaddr($ep))
continue;
if(!in_array($ep,$ipmap))
@ -182,27 +183,43 @@ function vpn_ipsec_configure($ipchg = false)
if ($ikeid != $ph1ent['ikeid'])
continue;
$ph2ent['localid']['mode'] = $ph2ent['mode'];
/* add an ipsec pinghosts entry */
if ($ph2ent['pinghost']) {
$iflist = get_configured_interface_list();
foreach ($iflist as $ifent => $ifname) {
$interface_ip = get_interface_ip($ifent);
$local_subnet = ipsec_idinfo_to_cidr($ph2ent['localid'], true);
if (ip_in_subnet($interface_ip, $local_subnet)) {
$srcip = $interface_ip;
break;
if(is_ipaddrv6($ph2ent['pinghost'])) {
$interface_ip = get_interface_ipv6($ifent);
if(!is_ipaddrv6($interface_ip))
continue;
$local_subnet = ipsec_idinfo_to_cidr($ph2ent['localid'], true);
if (ip_in_subnet($interface_ip, $local_subnet)) {
$srcip = $interface_ip;
break;
}
} else {
$interface_ip = get_interface_ip($ifent);
if(!is_ipaddrv4($interface_ip))
continue;
$local_subnet = ipsec_idinfo_to_cidr($ph2ent['localid'], true);
if (ip_in_subnet($interface_ip, $local_subnet)) {
$srcip = $interface_ip;
break;
}
}
}
$dstip = $ph2ent['pinghost'];
if(is_ipaddrv6($dstip)) {
$family = "inet6";
} else {
$family = "inet";
}
if (is_ipaddr($srcip))
$ipsecpinghosts .= "{$srcip}|{$dstip}|3\n";
$ipsecpinghosts[] = "{$srcip}|{$dstip}|3|||||{$family}|\n";
}
}
$pfd = fopen("{$g['vardb_path']}/ipsecpinghosts", "w");
if ($pfd) {
fwrite($pfd, $ipsecpinghosts);
fclose($pfd);
}
file_put_contents("{$g['vardb_path']}/ipsecpinghosts", $ipsecpinghosts);
}
}
@ -211,18 +228,18 @@ function vpn_ipsec_configure($ipchg = false)
if (is_array($config['ca']) && count($config['ca'])) {
foreach ($config['ca'] as $ca) {
if (!isset($ca['crt'])) {
log_error("Error: Invalid certificate info for {$ca['descr']}");
log_error(sprintf(gettext("Error: Invalid certificate info for %s"), $ca['descr']));
continue;
}
$cert = base64_decode($ca['crt']);
$x509cert = openssl_x509_parse(openssl_x509_read($cert));
if (!is_array($x509cert) || !isset($x509cert['hash'])) {
log_error("Error: Invalid certificate hash info for {$ca['descr']}");
log_error(sprintf(gettext("Error: Invalid certificate hash info for %s"), $ca['descr']));
continue;
}
$fname = $g['varetc_path']."/".$x509cert['hash'].".0";
if (!file_put_contents($fname, $cert)) {
log_error("Error: Cannot write IPsec CA file for {$ca['descr']}");
log_error(sprintf(gettext("Error: Cannot write IPsec CA file for %s"), $ca['descr']));
continue;
}
}
@ -231,7 +248,7 @@ function vpn_ipsec_configure($ipchg = false)
/* generate psk.txt */
$fd = fopen("{$g['varetc_path']}/psk.txt", "w");
if (!$fd) {
printf("Error: cannot open psk.txt in vpn_ipsec_configure().\n");
printf(gettext("Error: cannot open psk.txt in vpn_ipsec_configure().") . "\n");
return 1;
}
@ -294,7 +311,7 @@ function vpn_ipsec_configure($ipchg = false)
$fd = fopen("{$g['varetc_path']}/racoon.conf", "w");
if (!$fd) {
printf("Error: cannot open racoon.conf in vpn_ipsec_configure().\n");
printf(gettext("Error: cannot open racoon.conf in vpn_ipsec_configure().") . "\n");
return 1;
}
@ -386,7 +403,7 @@ function vpn_ipsec_configure($ipchg = false)
$fn = "{$g['varetc_path']}/racoon.motd";
$fd1 = fopen($fn, "w");
if (!$fd1) {
printf("Error: cannot open server{$fn} in vpn.\n");
printf(gettext("Error: cannot open server %s in vpn.%s"). $fn, "\n");
return 1;
}
@ -437,7 +454,7 @@ function vpn_ipsec_configure($ipchg = false)
case "dyn_dns":
$myid_type = "address";
$myid_data = gethostbyname($ph1ent['myid_data']);
$myid_data = resolve_retry($ph1ent['myid_data']);
break;
case "address";
@ -517,7 +534,7 @@ function vpn_ipsec_configure($ipchg = false)
if (!$cert)
{
log_error("Error: Invalid phase1 certificate reference for {$ph1ent['name']}");
log_error(sprintf(gettext("Error: Invalid phase1 certificate reference for %s"), $ph1ent['name']));
continue;
}
@ -526,7 +543,7 @@ function vpn_ipsec_configure($ipchg = false)
if (!file_put_contents($certpath, base64_decode($cert['crt'])))
{
log_error("Error: Cannot write phase1 certificate file for {$ph1ent['name']}");
log_error(sprintf(gettext("Error: Cannot write phase1 certificate file for %s"), $ph1ent['name']));
continue;
}
@ -537,7 +554,7 @@ function vpn_ipsec_configure($ipchg = false)
if (!file_put_contents($keypath, base64_decode($cert['prv'])))
{
log_error("Error: Cannot write phase1 key file for {$ph1ent['name']}");
log_error(sprintf(gettext("Error: Cannot write phase1 key file for %s"), $ph1ent['name']));
continue;
}
@ -550,7 +567,7 @@ function vpn_ipsec_configure($ipchg = false)
if (!file_put_contents($capath, base64_decode($ca['crt'])))
{
log_error("Error: Cannot write phase1 CA certificate file for {$ph1ent['name']}");
log_error(sprintf(gettext("Error: Cannot write phase1 CA certificate file for %s"), $ph1ent['name']));
continue;
}
@ -637,9 +654,10 @@ EOD;
if (isset($ph2ent['mobile']) && !isset($a_client['enable']))
continue;
if ($ph2ent['mode'] == 'tunnel') {
if (($ph2ent['mode'] == 'tunnel') or ($ph2ent['mode'] == 'tunnel6')) {
$localid_type = $ph2ent['localid']['type'];
$ph2ent['localid']['mode'] = $ph2ent['mode'];
$localid_data = ipsec_idinfo_to_cidr($ph2ent['localid']);
/* Do not print localid in some cases, such as a pure-psk or psk/xauth single phase2 mobile tunnel */
if (($localid_type == "none") ||
@ -782,7 +800,7 @@ EOD;
/* generate spd.conf */
$fd = fopen("{$g['varetc_path']}/spd.conf", "w");
if (!$fd) {
printf("Error: cannot open spd.conf in vpn_ipsec_configure().\n");
printf(gettext("Error: cannot open spd.conf in vpn_ipsec_configure().") . "\n");
return 1;
}
@ -791,11 +809,18 @@ EOD;
/* Try to prevent people from locking themselves out of webgui. Just in case. */
if ($config['interfaces']['lan']) {
$lanip = get_interface_ip("lan");
if (!empty($lanip) && is_ipaddr($lanip)) {
if (!empty($lanip) && is_ipaddrv4($lanip)) {
$lansn = get_interface_subnet("lan");
$lansa = gen_subnet($lanip, $lansn);
$spdconf .= "spdadd {$lanip}/32 {$lansa}/{$lansn} any -P out none;\n";
$spdconf .= "spdadd {$lansa}/{$lansn} {$lanip}/32 any -P in none;\n";
$spdconf .= "spdadd -4 {$lanip}/32 {$lansa}/{$lansn} any -P out none;\n";
$spdconf .= "spdadd -4 {$lansa}/{$lansn} {$lanip}/32 any -P in none;\n";
}
$lanipv6 = get_interface_ipv6("lan");
if (!empty($lanipv6) && is_ipaddrv6($lanipv6)) {
$lansnv6 = get_interface_subnetv6("lan");
$lansav6 = gen_subnetv6($lanipv6, $lansnv6);
$spdconf .= "spdadd -6 {$lanipv6}/128 {$lansav6}/{$lansnv6} any -P out none;\n";
$spdconf .= "spdadd -6 {$lansav6}/{$lansnv6} {$lanipv6}/128 any -P in none;\n";
}
}
@ -821,15 +846,20 @@ EOD;
if(!is_ipaddr($rgip))
continue;
$ph2ent['localid']['mode'] = $ph2ent['mode'];
$localid = ipsec_idinfo_to_cidr($ph2ent['localid'],true);
$remoteid = ipsec_idinfo_to_cidr($ph2ent['remoteid'],true);
if($ph2ent['mode'] == "tunnel") {
if(($ph2ent['mode'] == "tunnel") or ($ph2ent['mode'] == 'tunnel6')) {
if($ph2ent['mode'] == "tunnel6")
$family = "-6";
else
$family = "-4";
$spdconf .= "spdadd {$localid} {$remoteid} any -P out ipsec " .
$spdconf .= "spdadd {$family} {$localid} {$remoteid} any -P out ipsec " .
"{$ph2ent['protocol']}/tunnel/{$ep}-{$rgip}/unique;\n";
$spdconf .= "spdadd {$remoteid} {$localid} any -P in ipsec " .
$spdconf .= "spdadd {$family} {$remoteid} {$localid} any -P in ipsec " .
"{$ph2ent['protocol']}/tunnel/{$rgip}-{$ep}/unique;\n";
} else {
@ -955,7 +985,7 @@ function vpn_ipsec_force_reload() {
/* if ipsec is enabled, start up again */
if (isset($ipseccfg['enable'])) {
log_error("Forcefully reloading IPsec racoon daemon");
log_error(gettext("Forcefully reloading IPsec racoon daemon"));
vpn_ipsec_configure();
}
@ -994,7 +1024,7 @@ function vpn_pptpd_configure() {
if (!$pptpdcfg['mode'] || ($pptpdcfg['mode'] == "off"))
return 0;
echo "Configuring PPTP VPN service... ";
echo gettext("Configuring PPTP VPN service... ");
} else {
/* kill mpd */
killbypid("{$g['varrun_path']}/pptp-vpn.pid");
@ -1004,7 +1034,7 @@ function vpn_pptpd_configure() {
if (is_process_running("mpd -b")) {
killbypid("{$g['varrun_path']}/pptp-vpn.pid");
log_error("Could not kill mpd within 3 seconds. Trying again.");
log_error(gettext("Could not kill mpd within 3 seconds. Trying again."));
}
/* remove mpd.conf, if it exists */
@ -1022,7 +1052,7 @@ function vpn_pptpd_configure() {
/* write mpd.conf */
$fd = fopen("{$g['varetc_path']}/pptp-vpn/mpd.conf", "w");
if (!$fd) {
printf("Error: cannot open mpd.conf in vpn_pptpd_configure().\n");
printf(gettext("Error: cannot open mpd.conf in vpn_pptpd_configure().") . "\n");
return 1;
}
@ -1135,7 +1165,7 @@ EOD;
/* write mpd.links */
$fd = fopen("{$g['varetc_path']}/pptp-vpn/mpd.links", "w");
if (!$fd) {
printf("Error: cannot open mpd.links in vpn_pptpd_configure().\n");
printf(gettext("Error: cannot open mpd.links in vpn_pptpd_configure().") . "\n");
return 1;
}
@ -1159,7 +1189,7 @@ EOD;
/* write mpd.secret */
$fd = fopen("{$g['varetc_path']}/pptp-vpn/mpd.secret", "w");
if (!$fd) {
printf("Error: cannot open mpd.secret in vpn_pptpd_configure().\n");
printf(gettext("Error: cannot open mpd.secret in vpn_pptpd_configure().") . "\n");
return 1;
}
@ -1213,7 +1243,7 @@ function vpn_pppoe_configure(&$pppoecfg) {
if (!$pppoecfg['mode'] || ($pppoecfg['mode'] == "off"))
return 0;
echo "Configuring PPPoE VPN service... ";
echo gettext("Configuring PPPoE VPN service... ");
} else {
/* kill mpd */
killbypid("{$g['varrun_path']}/pppoe{$pppoecfg['pppoeid']}-vpn.pid");
@ -1237,7 +1267,7 @@ function vpn_pppoe_configure(&$pppoecfg) {
/* write mpd.conf */
$fd = fopen("{$g['varetc_path']}/pppoe{$pppoecfg['pppoeid']}-vpn/mpd.conf", "w");
if (!$fd) {
printf("Error: cannot open mpd.conf in vpn_pppoe_configure().\n");
printf(gettext("Error: cannot open mpd.conf in vpn_pppoe_configure().") . "\n");
return 1;
}
$mpdconf = "\n\n";
@ -1340,7 +1370,7 @@ EOD;
/* write mpd.links */
$fd = fopen("{$g['varetc_path']}/pppoe{$pppoecfg['pppoeid']}-vpn/mpd.links", "w");
if (!$fd) {
printf("Error: cannot open mpd.links in vpn_pppoe_configure().\n");
printf(gettext("Error: cannot open mpd.links in vpn_pppoe_configure().") . "\n");
return 1;
}
@ -1366,7 +1396,7 @@ EOD;
/* write mpd.secret */
$fd = fopen("{$g['varetc_path']}/pppoe{$pppoecfg['pppoeid']}-vpn/mpd.secret", "w");
if (!$fd) {
printf("Error: cannot open mpd.secret in vpn_pppoe_configure().\n");
printf(gettext("Error: cannot open mpd.secret in vpn_pppoe_configure().") . "\n");
return 1;
}
@ -1394,7 +1424,7 @@ EOD;
}
if ($g['booting'])
echo "done\n";
echo gettext("done") . "\n";
return 0;
}
@ -1413,7 +1443,7 @@ function vpn_l2tp_configure() {
if (!$l2tpcfg['mode'] || ($l2tpcfg['mode'] == "off"))
return 0;
echo "Configuring l2tp VPN service... ";
echo gettext("Configuring l2tp VPN service... ");
} else {
/* kill mpd */
killbypid("{$g['varrun_path']}/l2tp-vpn.pid");
@ -1438,7 +1468,7 @@ function vpn_l2tp_configure() {
/* write mpd.conf */
$fd = fopen("{$g['varetc_path']}/l2tp-vpn/mpd.conf", "w");
if (!$fd) {
printf("Error: cannot open mpd.conf in vpn_l2tp_configure().\n");
printf(gettext("Error: cannot open mpd.conf in vpn_l2tp_configure().") . "\n");
return 1;
}
$mpdconf = "\n\n";
@ -1531,7 +1561,7 @@ EOD;
/* write mpd.links */
$fd = fopen("{$g['varetc_path']}/l2tp-vpn/mpd.links", "w");
if (!$fd) {
printf("Error: cannot open mpd.links in vpn_l2tp_configure().\n");
printf(gettext("Error: cannot open mpd.links in vpn_l2tp_configure().") . "\n");
return 1;
}
@ -1556,7 +1586,7 @@ EOD;
/* write mpd.secret */
$fd = fopen("{$g['varetc_path']}/l2tp-vpn/mpd.secret", "w");
if (!$fd) {
printf("Error: cannot open mpd.secret in vpn_l2tp_configure().\n");
printf(gettext("Error: cannot open mpd.secret in vpn_l2tp_configure().") . "\n");
return 1;
}
@ -1673,6 +1703,7 @@ function reload_tunnel_spd_policy($phase1, $phase2, $old_phase1, $old_phase2) {
$sad_arr = ipsec_dump_sad();
$ep = ipsec_get_phase1_src($phase1);
$phase2['localid']['mode'] = $phase2['mode'];
$local_subnet = ipsec_idinfo_to_cidr($phase2['localid']);
$remote_subnet = ipsec_idinfo_to_cidr($phase2['remoteid']);
@ -1680,6 +1711,7 @@ function reload_tunnel_spd_policy($phase1, $phase2, $old_phase1, $old_phase2) {
$old_gw = trim($old_phase1['remote-gateway']);
$old_ep = ipsec_get_phase1_src($old_phase1);
$old_phase2['localid']['mode'] = $old_phase2['mode'];
$old_local_subnet = ipsec_idinfo_to_cidr($old_phase2['localid']);
$old_remote_subnet = ipsec_idinfo_to_cidr($old_phase2['remoteid']);
@ -1701,25 +1733,30 @@ function reload_tunnel_spd_policy($phase1, $phase2, $old_phase1, $old_phase2) {
$rgip = $phase1['remote-gateway'];
}
if (!$ep) {
log_error("Could not determine VPN endpoint for '{$phase1['descr']}'");
log_error(sprintf(gettext("Could not determine VPN endpoint for '%s'"), $phase1['descr']));
return false;
}
if((!is_ipaddr($old_ep)) || (! is_ipaddr($ep))) {
log_error("IPSEC: ERROR: One of the endpoints is not a IP address. Old EP '{$old_ep}' new EP '{$ep}'");
log_error(sprintf(gettext("IPSEC: ERROR: One of the endpoints is not a IP address. Old EP '%1\$s' new EP '%2\$s'"), $old_ep, $ep));
}
if((! is_ipaddr($rgip)) || (! is_ipaddr($old_gw))) {
log_error("IPSEC: ERROR: One of the remote endpoints is not a IP address. Old RG '{$old_gw}' new RG '{$rgip}'");
log_error(sprintf(gettext("IPSEC: ERROR: One of the remote endpoints is not a IP address. Old RG '%1\$s' new RG '%2\$s'"), $old_gw, $rgip));
}
$spdconf = "";
/* Delete old SPD policies if there are changes between the old and new */
if(($phase1 != $old_phase1) || ($phase2 != $old_phase2)) {
$spdconf .= "spddelete {$old_local_subnet} " .
if($old_phase2['mode'] == "tunnel6")
$family = "-6";
else
$family = "-4";
$spdconf .= "spddelete {$family} {$old_local_subnet} " .
"{$old_remote_subnet} any -P out ipsec " .
"{$old_phase2['protocol']}/tunnel/{$old_ep}-" .
"{$old_gw}/unique;\n";
$spdconf .= "spddelete {$old_remote_subnet} " .
$spdconf .= "spddelete {$family} {$old_remote_subnet} " .
"{$old_local_subnet} any -P in ipsec " .
"{$old_phase2['protocol']}/tunnel/{$old_gw}-" .
"{$old_ep}/unique;\n";
@ -1727,35 +1764,40 @@ function reload_tunnel_spd_policy($phase1, $phase2, $old_phase1, $old_phase2) {
/* zap any existing SA entries */
foreach($sad_arr as $sad) {
if(($sad['dst'] == $old_ep) && ($sad['src'] == $old_gw)) {
$spdconf .= "delete {$old_ep} {$old_gw} {$old_phase2['protocol']} 0x{$sad['spi']};\n";
$spdconf .= "delete {$family} {$old_ep} {$old_gw} {$old_phase2['protocol']} 0x{$sad['spi']};\n";
}
if(($sad['src'] == $oldep) && ($sad['dst'] == $old_gw)) {
$spdconf .= "delete {$old_gw} {$old_ep} {$old_phase2['protocol']} 0x{$sad['spi']};\n";
$spdconf .= "delete {$family} {$old_gw} {$old_ep} {$old_phase2['protocol']} 0x{$sad['spi']};\n";
}
}
}
if($phase2['mode'] == "tunnel6")
$family = "-6";
else
$family = "-4";
/* Create new SPD entries for the new configuration */
/* zap any existing SA entries beforehand */
foreach($sad_arr as $sad) {
if(($sad['dst'] == $ep) && ($sad['src'] == $rgip)) {
$spdconf .= "delete {$rgip} {$ep} {$phase2['protocol']} 0x{$sad['spi']};\n";
$spdconf .= "delete {$family} {$rgip} {$ep} {$phase2['protocol']} 0x{$sad['spi']};\n";
}
if(($sad['src'] == $ep) && ($sad['dst'] == $rgip)) {
$spdconf .= "delete {$ep} {$rgip} {$phase2['protocol']} 0x{$sad['spi']};\n";
$spdconf .= "delete {$family} {$ep} {$rgip} {$phase2['protocol']} 0x{$sad['spi']};\n";
}
}
/* add new SPD policies to replace them */
$spdconf .= "spdadd {$local_subnet} " .
$spdconf .= "spdadd {$family} {$local_subnet} " .
"{$remote_subnet} any -P out ipsec " .
"{$phase2['protocol']}/tunnel/{$ep}-" .
"{$rgip}/unique;\n";
$spdconf .= "spdadd {$remote_subnet} " .
$spdconf .= "spdadd {$family} {$remote_subnet} " .
"{$local_subnet} any -P in ipsec " .
"{$phase2['protocol']}/tunnel/{$rgip}-" .
"{$ep}/unique;\n";
log_error("Reloading IPsec tunnel '{$phase1['descr']}'. Previous IP '{$old_gw}', current IP '{$rgip}'. Reloading policy");
log_error(sprintf(gettext("Reloading IPsec tunnel '%1\$s'. Previous IP '%2\$s', current IP '%3\$s'. Reloading policy"), $phase1['descr'], $old_gw, $rgip));
$now = time();
$spdfile = tempnam("{$g['tmp_path']}", "spd.conf.reload.{$now}.");

View File

@ -82,7 +82,7 @@ function startElement($parser, $name, $attrs) {
} else if (isset($ptr)) {
/* multiple entries not allowed for this element, bail out */
die(sprintf("XML error: %s at line %d cannot occur more than once\n",
die(sprintf(gettext('XML error: %1$s at line %2$d cannot occur more than once') . "\n",
$name,
xml_get_current_line_number($parser)));
}
@ -173,13 +173,13 @@ function parse_xml_config_raw($cffile, $rootobj, $isstring = "false") {
xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE, 1);
if (!($fp = fopen($cffile, "r"))) {
log_error("Error: could not open XML input\n");
log_error(gettext("Error: could not open XML input") . "\n");
return -1;
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
log_error(sprintf("XML error: %s at line %d in %s\n",
log_error(sprintf(gettext('XML error: %1$s at line %2$d in %3$s') . "\n",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser),
$cffile));
@ -195,7 +195,7 @@ function parse_xml_config_raw($cffile, $rootobj, $isstring = "false") {
break;
if (!$parsedcfg[$rootobj_name]) {
log_error("XML error: no $rootobj_name object found!\n");
log_error(sprintf(gettext("XML error: no %s object found!") . "\n", $rootobj));
return -1;
}

View File

@ -75,7 +75,7 @@ function startElement_attr($parser, $name, $attrs) {
} else if (isset($ptr)) {
/* multiple entries not allowed for this element, bail out */
die(sprintf("XML error: %s at line %d cannot occur more than once\n",
die(sprintf(gettext('XML error: %1$s at line %2$d cannot occur more than once') . "\n",
$name,
xml_get_current_line_number($parser)));
} else if (isset($writeattrs)) {
@ -184,7 +184,7 @@ function parse_xml_config_raw_attr($cffile, $rootobj, &$parsed_attributes, $isst
xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE, 1);
if (!($fp = fopen($cffile, "r"))) {
log_error("Error: could not open XML input\n");
log_error(gettext("Error: could not open XML input") . "\n");
if (isset($parsed_attributes)) {
$parsed_attributes = array();
unset($parsedattrs);
@ -194,7 +194,7 @@ function parse_xml_config_raw_attr($cffile, $rootobj, &$parsed_attributes, $isst
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
log_error(sprintf("XML error: %s at line %d\n",
log_error(sprintf(gettext('XML error: %1$s at line %2$d') . "\n",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
if (isset($parsed_attributes)) {
@ -207,7 +207,7 @@ function parse_xml_config_raw_attr($cffile, $rootobj, &$parsed_attributes, $isst
xml_parser_free($xml_parser);
if (!$parsedcfg[$rootobj]) {
log_error("XML error: no $rootobj object found!\n");
log_error(sprintf(gettext("XML error: no %s object found!") . "\n", $rootobj));
if (isset($parsed_attributes)) {
$parsed_attributes = array();
unset($parsedattrs);
@ -224,4 +224,4 @@ function parse_xml_config_raw_attr($cffile, $rootobj, &$parsed_attributes, $isst
return $parsedcfg[$rootobj];
}
?>
?>

View File

@ -126,7 +126,7 @@ function parse_xml_config_raw($cffile, $rootobj, $isstring = "false") {
add_elements($parsedcfg, $par);
$par->close();
} else
log_error("Error returned while trying to parse {$cffile}");
log_error(sprintf(gettext("Error returned while trying to parse %s"), $cffile));
if (!is_array($rootobj))
$rootobj = array($rootobj);

View File

@ -10,35 +10,18 @@
*
* PHP versions 4 and 5
*
* LICENSE: License is granted to use or modify this software
* ("XML-RPC for PHP") for commercial or non-commercial use provided the
* copyright of the author is preserved in any distributed or derivative work.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESSED OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category Web Services
* @package XML_RPC
* @author Edd Dumbill <edd@usefulinc.com>
* @author Stig Bakken <stig@php.net>
* @author Martin Jansen <mj@php.net>
* @author Daniel Convissor <danielc@php.net>
* @copyright 1999-2001 Edd Dumbill, 2001-2006 The PHP Group
* @version CVS: $Id$
* @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group
* @license http://www.php.net/license/3_01.txt PHP License
* @version SVN: $Id: RPC.php 300961 2010-07-03 02:17:34Z danielc $
* @link http://pear.php.net/package/XML_RPC
*/
/*
pfSense_MODULE: utils
*/
if (!function_exists('xml_parser_create')) {
include_once 'PEAR.inc';
@ -166,13 +149,13 @@ $GLOBALS['XML_RPC_err'] = array(
* @global array $GLOBALS['XML_RPC_str']
*/
$GLOBALS['XML_RPC_str'] = array(
'unknown_method' => 'Unknown method',
'invalid_return' => 'Invalid return payload: enable debugging to examine incoming payload',
'incorrect_params' => 'Incorrect parameters passed to method',
'introspect_unknown' => 'Can\'t introspect: method unknown',
'http_error' => 'Didn\'t receive 200 OK from remote server.',
'not_response_object' => 'The requested method didn\'t return an XML_RPC_Response object.',
'invalid_request' => 'Invalid request payload',
'unknown_method' => gettext("Unknown method"),
'invalid_return' => gettext("Invalid return payload: enable debugging to examine incoming payload"),
'incorrect_params' => gettext("Incorrect parameters passed to method"),
'introspect_unknown' => gettext("Can't introspect: method unknown"),
'http_error' => gettext("Didn't receive 200 OK from remote server."),
'not_response_object' => gettext("The requested method didn't return an XML_RPC_Response object."),
'invalid_request' => gettext("Invalid request payload"),
);
@ -202,27 +185,6 @@ $GLOBALS['XML_RPC_errxml'] = 100;
$GLOBALS['XML_RPC_backslash'] = chr(92) . chr(92);
/**#@+
* Which functions to use, depending on whether mbstring is enabled or not.
*/
if (function_exists('mb_ereg')) {
/** @global string $GLOBALS['XML_RPC_func_ereg'] */
$GLOBALS['XML_RPC_func_ereg'] = 'mb_eregi';
/** @global string $GLOBALS['XML_RPC_func_ereg_replace'] */
$GLOBALS['XML_RPC_func_ereg_replace'] = 'mb_eregi_replace';
/** @global string $GLOBALS['XML_RPC_func_split'] */
$GLOBALS['XML_RPC_func_split'] = 'mb_split';
} else {
/** @ignore */
$GLOBALS['XML_RPC_func_ereg'] = 'eregi';
/** @ignore */
$GLOBALS['XML_RPC_func_ereg_replace'] = 'eregi_replace';
/** @ignore */
$GLOBALS['XML_RPC_func_split'] = 'split';
}
/**#@-*/
/**
* Should we automatically base64 encode strings that contain characters
* which can cause PHP's SAX-based XML parser to break?
@ -295,15 +257,15 @@ function XML_RPC_se($parser_resource, $name, $attrs)
if (count($XML_RPC_xh[$parser]['stack']) == 0) {
if ($name != 'METHODRESPONSE' && $name != 'METHODCALL') {
$XML_RPC_xh[$parser]['isf'] = 2;
$XML_RPC_xh[$parser]['isf_reason'] = 'missing top level xmlrpc element';
$XML_RPC_xh[$parser]['isf_reason'] = gettext('missing top level xmlrpc element');
return;
}
} else {
// not top level element: see if parent is OK
if (!in_array($XML_RPC_xh[$parser]['stack'][0], $XML_RPC_valid_parents[$name])) {
$name = $GLOBALS['XML_RPC_func_ereg_replace']('[^a-zA-Z0-9._-]', '', $name);
$name = preg_replace('@[^a-zA-Z0-9._-]@', '', $name);
$XML_RPC_xh[$parser]['isf'] = 2;
$XML_RPC_xh[$parser]['isf_reason'] = "xmlrpc element $name cannot be child of {$XML_RPC_xh[$parser]['stack'][0]}";
$XML_RPC_xh[$parser]['isf_reason'] = sprintf(gettext('xmlrpc element %1$s cannot be child of %2$s'), $name, $XML_RPC_xh[$parser]['stack'][0]);
return;
}
}
@ -465,8 +427,8 @@ function XML_RPC_ee($parser_resource, $name)
} else {
// we have an I4, INT or a DOUBLE
// we must check that only 0123456789-.<space> are characters here
if (!$GLOBALS['XML_RPC_func_ereg']("^[+-]?[0123456789 \t\.]+$", $XML_RPC_xh[$parser]['ac'])) {
XML_RPC_Base::raiseError('Non-numeric value received in INT or DOUBLE',
if (!preg_match("@^[+-]?[0123456789 \t\.]+$@", $XML_RPC_xh[$parser]['ac'])) {
XML_RPC_Base::raiseError(gettext('Non-numeric value received in INT or DOUBLE'),
XML_RPC_ERROR_NON_NUMERIC_FOUND);
$XML_RPC_xh[$parser]['value'] = XML_RPC_ERROR_NON_NUMERIC_FOUND;
} else {
@ -529,7 +491,7 @@ function XML_RPC_ee($parser_resource, $name)
case 'METHODNAME':
case 'RPCMETHODNAME':
$XML_RPC_xh[$parser]['method'] = $GLOBALS['XML_RPC_func_ereg_replace']("^[\n\r\t ]+", '',
$XML_RPC_xh[$parser]['method'] = preg_replace("@^[\n\r\t ]+@", '',
$XML_RPC_xh[$parser]['ac']);
break;
}
@ -581,8 +543,9 @@ function XML_RPC_cd($parser_resource, $data)
* @author Stig Bakken <stig@php.net>
* @author Martin Jansen <mj@php.net>
* @author Daniel Convissor <danielc@php.net>
* @copyright 1999-2001 Edd Dumbill, 2001-2006 The PHP Group
* @version Release: 1.5.1
* @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group
* @license http://www.php.net/license/3_01.txt PHP License
* @version Release: @package_version@
* @link http://pear.php.net/package/XML_RPC
*/
class XML_RPC_Base {
@ -626,8 +589,9 @@ class XML_RPC_Base {
* @author Stig Bakken <stig@php.net>
* @author Martin Jansen <mj@php.net>
* @author Daniel Convissor <danielc@php.net>
* @copyright 1999-2001 Edd Dumbill, 2001-2006 The PHP Group
* @version Release: 1.5.1
* @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group
* @license http://www.php.net/license/3_01.txt PHP License
* @version Release: @package_version@
* @link http://pear.php.net/package/XML_RPC
*/
class XML_RPC_Client extends XML_RPC_Base {
@ -765,7 +729,7 @@ class XML_RPC_Client extends XML_RPC_Base {
$this->proxy_user = $proxy_user;
$this->proxy_pass = $proxy_pass;
$GLOBALS['XML_RPC_func_ereg']('^(http://|https://|ssl://)?(.*)$', $server, $match);
preg_match('@^(http://|https://|ssl://)?(.*)$@', $server, $match);
if ($match[1] == '') {
if ($port == 443) {
$this->server = $match[2];
@ -793,7 +757,7 @@ class XML_RPC_Client extends XML_RPC_Base {
}
if ($proxy) {
$GLOBALS['XML_RPC_func_ereg']('^(http://|https://|ssl://)?(.*)$', $proxy, $match);
preg_match('@^(http://|https://|ssl://)?(.*)$@', $proxy, $match);
if ($match[1] == '') {
if ($proxy_port == 443) {
$this->proxy = $match[2];
@ -889,8 +853,10 @@ class XML_RPC_Client extends XML_RPC_Base {
function send($msg, $timeout = 0)
{
if (!is_a($msg, 'XML_RPC_Message')) {
$this->errstr = 'send()\'s $msg parameter must be an'
. ' XML_RPC_Message object.';
$this->errstr = sprintf(
gettext(
"send()'s %s parameter must be an XML_RPC_Message object."
), $msg);
$this->raiseError($this->errstr, XML_RPC_ERROR_PROGRAMMING);
return 0;
}
@ -923,6 +889,26 @@ class XML_RPC_Client extends XML_RPC_Base {
function sendPayloadHTTP10($msg, $server, $port, $timeout = 0,
$username = '', $password = '')
{
// Pre-emptive BC hacks for fools calling sendPayloadHTTP10() directly
if ($username != $this->username) {
$this->setCredentials($username, $password);
}
// Only create the payload if it was not created previously
if (empty($msg->payload)) {
$msg->createPayload();
}
$this->createHeaders($msg);
$op = $this->headers . "\r\n\r\n";
$op .= $msg->payload;
if ($this->debug) {
print "\n<pre>---SENT---\n";
print $op;
print "\n---END---</pre>\n";
}
/*
* If we're using a proxy open a socket to the proxy server
* instead to the xml-rpc server
@ -960,15 +946,15 @@ class XML_RPC_Client extends XML_RPC_Base {
* but keep it here for backwards compatibility.
*/
if (!$fp && $this->proxy) {
$this->raiseError('Connection to proxy server '
$this->raiseError(gettext('Connection to proxy server ')
. $this->proxy . ':' . $this->proxy_port
. ' failed. ' . $this->errstr,
. gettext(' failed. ') . $this->errstr,
XML_RPC_ERROR_CONNECTION_FAILED);
return 0;
} elseif (!$fp) {
$this->raiseError('Connection to RPC server '
$this->raiseError(gettext('Connection to RPC server ')
. $server . ':' . $port
. ' failed. ' . $this->errstr,
. gettext(' failed. ') . $this->errstr,
XML_RPC_ERROR_CONNECTION_FAILED);
return 0;
}
@ -981,20 +967,6 @@ class XML_RPC_Client extends XML_RPC_Base {
socket_set_timeout($fp, $timeout);
}
// Pre-emptive BC hacks for fools calling sendPayloadHTTP10() directly
if ($username != $this->username) {
$this->setCredentials($username, $password);
}
// Only create the payload if it was not created previously
if (empty($msg->payload)) {
$msg->createPayload();
}
$this->createHeaders($msg);
$op = $this->headers . "\r\n\r\n";
$op .= $msg->payload;
if (!fputs($fp, $op, strlen($op))) {
$this->errstr = 'Write error';
return 0;
@ -1068,8 +1040,9 @@ class XML_RPC_Client extends XML_RPC_Base {
* @author Stig Bakken <stig@php.net>
* @author Martin Jansen <mj@php.net>
* @author Daniel Convissor <danielc@php.net>
* @copyright 1999-2001 Edd Dumbill, 2001-2006 The PHP Group
* @version Release: 1.5.1
* @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group
* @license http://www.php.net/license/3_01.txt PHP License
* @version Release: @package_version@
* @link http://pear.php.net/package/XML_RPC
*/
class XML_RPC_Response extends XML_RPC_Base
@ -1159,8 +1132,9 @@ class XML_RPC_Response extends XML_RPC_Base
* @author Stig Bakken <stig@php.net>
* @author Martin Jansen <mj@php.net>
* @author Daniel Convissor <danielc@php.net>
* @copyright 1999-2001 Edd Dumbill, 2001-2006 The PHP Group
* @version Release: 1.5.1
* @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group
* @license http://www.php.net/license/3_01.txt PHP License
* @version Release: @package_version@
* @link http://pear.php.net/package/XML_RPC
*/
class XML_RPC_Message extends XML_RPC_Base
@ -1297,9 +1271,9 @@ class XML_RPC_Message extends XML_RPC_Base
$this->payload .= "</params>\n";
$this->payload .= $this->xml_footer();
if ($this->remove_extra_lines) {
$this->payload = $GLOBALS['XML_RPC_func_ereg_replace']("[\r\n]+", "\r\n", $this->payload);
$this->payload = preg_replace("@[\r\n]+@", "\r\n", $this->payload);
} else {
$this->payload = $GLOBALS['XML_RPC_func_ereg_replace']("\r\n|\n|\r|\n\r", "\r\n", $this->payload);
$this->payload = preg_replace("@\r\n|\n|\r|\n\r@", "\r\n", $this->payload);
}
if ($this->convert_payload_encoding) {
$this->payload = mb_convert_encoding($this->payload, $this->send_encoding);
@ -1351,7 +1325,7 @@ class XML_RPC_Message extends XML_RPC_Base
if (isset($this->params[$i])) {
return $this->params[$i];
} else {
$this->raiseError('The submitted request did not contain this parameter',
$this->raiseError(gettext('The submitted request did not contain this parameter'),
XML_RPC_ERROR_INCORRECT_PARAMS);
return new XML_RPC_Response(0, $XML_RPC_err['incorrect_params'],
$XML_RPC_str['incorrect_params']);
@ -1382,7 +1356,7 @@ class XML_RPC_Message extends XML_RPC_Base
function setConvertPayloadEncoding($in)
{
if ($in && !function_exists('mb_convert_encoding')) {
return $this->raiseError('mb_convert_encoding() is not available',
return $this->raiseError(gettext('mb_convert_encoding() is not available'),
XML_RPC_ERROR_PROGRAMMING);
}
$this->convert_payload_encoding = $in;
@ -1421,7 +1395,7 @@ class XML_RPC_Message extends XML_RPC_Base
{
global $XML_RPC_defencoding;
if ($GLOBALS['XML_RPC_func_ereg']('<\?xml[^>]*[:space:]*encoding[:space:]*=[:space:]*[\'"]([^"\']*)[\'"]',
if (preg_match('@<\?xml[^>]*\s*encoding\s*=\s*[\'"]([^"\']*)[\'"]@',
$data, $match))
{
$match[1] = trim(strtoupper($match[1]));
@ -1486,12 +1460,12 @@ class XML_RPC_Message extends XML_RPC_Base
// See if response is a 200 or a 100 then a 200, else raise error.
// But only do this if we're using the HTTP protocol.
if ($GLOBALS['XML_RPC_func_ereg']('^HTTP', $data) &&
!$GLOBALS['XML_RPC_func_ereg']('^HTTP/[0-9\.]+ 200 ', $data) &&
!$GLOBALS['XML_RPC_func_ereg']('^HTTP/[0-9\.]+ 10[0-9]([A-Z ]+)?[\r\n]+HTTP/[0-9\.]+ 200', $data))
if (preg_match('@^HTTP@', $data) &&
!preg_match('@^HTTP/[0-9\.]+ 200 @', $data) &&
!preg_match('@^HTTP/[0-9\.]+ 10[0-9]([A-Z ]+)?[\r\n]+HTTP/[0-9\.]+ 200@', $data))
{
$errstr = substr($data, 0, strpos($data, "\n") - 1);
error_log('HTTP error, got response: ' . $errstr);
error_log(gettext("HTTP error, got response: ") . $errstr);
$r = new XML_RPC_Response(0, $XML_RPC_err['http_error'],
$XML_RPC_str['http_error'] . ' (' .
$errstr . ')');
@ -1517,7 +1491,7 @@ class XML_RPC_Message extends XML_RPC_Base
if (!xml_parse($parser_resource, $data, sizeof($data))) {
// thanks to Peter Kocks <peter.kocks@baygate.com>
if (xml_get_current_line_number($parser_resource) == 1) {
$errstr = 'XML error at line 1, check URL';
$errstr = gettext("XML error at line 1, check URL");
} else {
$errstr = sprintf('XML error: %s at line %d',
xml_error_string(xml_get_error_code($parser_resource)),
@ -1558,7 +1532,7 @@ class XML_RPC_Message extends XML_RPC_Base
$r = new XML_RPC_Response($v);
}
}
$r->hdrs = split("\r?\n", $XML_RPC_xh[$parser]['ha'][1]);
$r->hdrs = preg_split("@\r?\n@", $XML_RPC_xh[$parser]['ha'][1]);
return $r;
}
}
@ -1572,8 +1546,9 @@ class XML_RPC_Message extends XML_RPC_Base
* @author Stig Bakken <stig@php.net>
* @author Martin Jansen <mj@php.net>
* @author Daniel Convissor <danielc@php.net>
* @copyright 1999-2001 Edd Dumbill, 2001-2006 The PHP Group
* @version Release: 1.5.1
* @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group
* @license http://www.php.net/license/3_01.txt PHP License
* @version Release: @package_version@
* @link http://pear.php.net/package/XML_RPC
*/
class XML_RPC_Value extends XML_RPC_Base
@ -1611,14 +1586,15 @@ class XML_RPC_Value extends XML_RPC_Base
function addScalar($val, $type = 'string')
{
if ($this->mytype == 1) {
$this->raiseError('Scalar can have only one value',
$this->raiseError(gettext('Scalar can have only one value'),
XML_RPC_ERROR_INVALID_TYPE);
return 0;
}
$typeof = $GLOBALS['XML_RPC_Types'][$type];
if ($typeof != 1) {
$this->raiseError("Not a scalar type (${typeof})",
XML_RPC_ERROR_INVALID_TYPE);
$this->raiseError(
sprintf(gettext("Not a scalar type (%s)"), $typeof),
XML_RPC_ERROR_INVALID_TYPE);
return 0;
}
@ -1653,7 +1629,7 @@ class XML_RPC_Value extends XML_RPC_Base
{
if ($this->mytype != 0) {
$this->raiseError(
'Already initialized as a [' . $this->kindOf() . ']',
sprintf(gettext('Already initialized as a [%s]'), $this->kindOf()),
XML_RPC_ERROR_ALREADY_INITIALIZED);
return 0;
}
@ -1669,7 +1645,7 @@ class XML_RPC_Value extends XML_RPC_Base
{
if ($this->mytype != 0) {
$this->raiseError(
'Already initialized as a [' . $this->kindOf() . ']',
sprintf(gettext('Already initialized as a [%s]'), $this->kindOf()),
XML_RPC_ERROR_ALREADY_INITIALIZED);
return 0;
}
@ -1731,7 +1707,7 @@ class XML_RPC_Value extends XML_RPC_Base
$rs .= "<struct>\n";
reset($val);
foreach ($val as $key2 => $val2) {
$rs .= "<member><name>${key2}</name>\n";
$rs .= "<member><name>" . htmlspecialchars($key2) . "</name>\n";
$rs .= $this->serializeval($val2);
$rs .= "</member>\n";
}
@ -1741,8 +1717,8 @@ class XML_RPC_Value extends XML_RPC_Base
case 2:
// array
$rs .= "<array>\n<data>\n";
for ($i = 0; $i < sizeof($val); $i++) {
$rs .= $this->serializeval($val[$i]);
foreach ($val as $value) {
$rs .= $this->serializeval($value);
}
$rs .= "</data>\n</array>";
break;
@ -1953,7 +1929,7 @@ function XML_RPC_iso8601_encode($timet, $utc = 0)
function XML_RPC_iso8601_decode($idate, $utc = 0)
{
$t = 0;
if ($GLOBALS['XML_RPC_func_ereg']('([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})', $idate, $regs)) {
if (preg_match('@([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})@', $idate, $regs)) {
if ($utc) {
$t = gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
} else {
@ -2042,10 +2018,10 @@ function XML_RPC_encode($php_val)
case 'string':
case 'NULL':
if ($GLOBALS['XML_RPC_func_ereg']('^[0-9]{8}\T{1}[0-9]{2}\:[0-9]{2}\:[0-9]{2}$', $php_val)) {
if (preg_match('@^[0-9]{8}\T{1}[0-9]{2}\:[0-9]{2}\:[0-9]{2}$@', $php_val)) {
$XML_RPC_val->addScalar($php_val, $GLOBALS['XML_RPC_DateTime']);
} elseif ($GLOBALS['XML_RPC_auto_base64']
&& $GLOBALS['XML_RPC_func_ereg']("[^ -~\t\r\n]", $php_val))
&& preg_match("@[^ -~\t\r\n]@", $php_val))
{
// Characters other than alpha-numeric, punctuation, SP, TAB,
// LF and CR break the XML parser, encode value via Base 64.

View File

@ -10,35 +10,18 @@
*
* PHP versions 4 and 5
*
* LICENSE: License is granted to use or modify this software
* ("XML-RPC for PHP") for commercial or non-commercial use provided the
* copyright of the author is preserved in any distributed or derivative work.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESSED OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @category Web Services
* @package XML_RPC
* @author Edd Dumbill <edd@usefulinc.com>
* @author Stig Bakken <stig@php.net>
* @author Martin Jansen <mj@php.net>
* @author Daniel Convissor <danielc@php.net>
* @copyright 1999-2001 Edd Dumbill, 2001-2006 The PHP Group
* @version CVS: $Id$
* @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group
* @license http://www.php.net/license/3_01.txt PHP License
* @version SVN: $Id: Server.php 300961 2010-07-03 02:17:34Z danielc $
* @link http://pear.php.net/package/XML_RPC
*/
/*
pfSense_MODULE: utils
*/
/**
* Pull in the XML_RPC class
@ -62,8 +45,8 @@ $GLOBALS['XML_RPC_Server_listMethods_sig'] = array(
* docstring for system.listMethods
* @global string $GLOBALS['XML_RPC_Server_listMethods_doc']
*/
$GLOBALS['XML_RPC_Server_listMethods_doc'] = 'This method lists all the'
. ' methods that the XML-RPC server knows how to dispatch';
$GLOBALS['XML_RPC_Server_listMethods_doc'] = gettext('This method lists all the'
. ' methods that the XML-RPC server knows how to dispatch');
/**
* signature for system.methodSignature: return = array,
@ -80,10 +63,10 @@ $GLOBALS['XML_RPC_Server_methodSignature_sig'] = array(
* docstring for system.methodSignature
* @global string $GLOBALS['XML_RPC_Server_methodSignature_doc']
*/
$GLOBALS['XML_RPC_Server_methodSignature_doc'] = 'Returns an array of known'
$GLOBALS['XML_RPC_Server_methodSignature_doc'] = gettext('Returns an array of known'
. ' signatures (an array of arrays) for the method name passed. If'
. ' no signatures are known, returns a none-array (test for type !='
. ' array to detect missing signature)';
. ' array to detect missing signature)');
/**
* signature for system.methodHelp: return = string,
@ -100,8 +83,8 @@ $GLOBALS['XML_RPC_Server_methodHelp_sig'] = array(
* docstring for methodHelp
* @global string $GLOBALS['XML_RPC_Server_methodHelp_doc']
*/
$GLOBALS['XML_RPC_Server_methodHelp_doc'] = 'Returns help text if defined'
. ' for the method passed, otherwise returns an empty string';
$GLOBALS['XML_RPC_Server_methodHelp_doc'] = gettext('Returns help text if defined'
. ' for the method passed, otherwise returns an empty string');
/**
* dispatch map for the automatically declared XML-RPC methods.
@ -272,8 +255,9 @@ function XML_RPC_Server_debugmsg($m)
* @author Stig Bakken <stig@php.net>
* @author Martin Jansen <mj@php.net>
* @author Daniel Convissor <danielc@php.net>
* @copyright 1999-2001 Edd Dumbill, 2001-2006 The PHP Group
* @version Release: 1.5.1
* @copyright 1999-2001 Edd Dumbill, 2001-2010 The PHP Group
* @license http://www.php.net/license/3_01.txt PHP License
* @version Release: @package_version@
* @link http://pear.php.net/package/XML_RPC
*/
class XML_RPC_Server
@ -377,7 +361,7 @@ class XML_RPC_Server
if ($XML_RPC_Server_debuginfo != '') {
return "<!-- PEAR XML_RPC SERVER DEBUG INFO:\n\n"
. $GLOBALS['XML_RPC_func_ereg_replace']('--', '- - ', $XML_RPC_Server_debuginfo)
. str_replace('--', '- - ', $XML_RPC_Server_debuginfo)
. "-->\n";
} else {
return '';
@ -434,9 +418,9 @@ class XML_RPC_Server
* that someone composed a single header with multiple lines, which
* the RFCs allow.
*/
$this->server_headers = $GLOBALS['XML_RPC_func_ereg_replace']("[\r\n]+[ \t]+",
$this->server_headers = preg_replace("@[\r\n]+[ \t]+@",
' ', trim($this->server_headers));
$headers = $GLOBALS['XML_RPC_func_split']("[\r\n]+", $this->server_headers);
$headers = preg_split("@[\r\n]+@", $this->server_headers);
foreach ($headers as $header)
{
header($header);
@ -685,4 +669,4 @@ class XML_RPC_Server
* End:
*/
?>
?>

View File

@ -306,4 +306,4 @@ function get_notices_zeromq($raw_params) {
return serialize($toreturn);
}
?>
?>

View File

@ -70,15 +70,21 @@
break;
}
$ipaddr = get_interface_ip($ifname);
$subnet = get_interface_subnet($ifname);
$ipaddr6 = get_interface_ipv6($ifname);
$subnet6 = get_interface_subnetv6($ifname);
$realif = get_real_interface($ifname);
$tobanner = "{$friendly} ({$ifname})";
printf("\n %-25s -> %-10s -> %s %s",
printf("\n %-15s -> %-10s -> %s/%s\t%s/%s %s",
$tobanner,
$realif,
$ipaddr ? $ipaddr : "NONE",
$subnet ? $subnet : "NONE",
$ipaddr6 ? $ipaddr6 : "NONE",
$subnet6 ? $subnet6 : "NONE",
$class
);
}
?>
?>

View File

@ -272,7 +272,7 @@ global $g;
if (file_exists("{$g['varrun_path']}/booting") || $g['booting'])
return;
if (is_array($config['installedpackages']['carpsettings']['config'])) {
if (is_array($config['installedpackages']['carpsettings']) && is_array($config['installedpackages']['carpsettings']['config'])) {
update_filter_reload_status("Building CARP sync information");
foreach($config['installedpackages']['carpsettings']['config'] as $carp) {
if (empty($carp['synchronizetoip'])) {
@ -297,6 +297,8 @@ if (is_array($config['installedpackages']['carpsettings']['config'])) {
$port = "443";
}
if(is_ipaddrv6($carp['synchronizetoip']))
$carp['synchronizetoip'] = "[{$carp['synchronizetoip']}]";
$synchronizetoip .= $carp['synchronizetoip'];
if ($carp['synchronizerules'] != "") {
if (!is_array($config['filter']))

View File

@ -93,7 +93,7 @@ switch ($command) {
exec("fetch -1 -w15 -a -v -o /root/firmware.tgz.md5 \"$url.md5\"");
} else {
echo "\n\nWARNING.\n";
echo "\nCould not locate a MD5 file. We cannot verify the download once its done.\n\n";
echo "\nCould not locate a MD5 file. We cannot verify the download once completed.\n\n";
sleep(15);
}
if(file_exists("/root/firmware.tgz.md5")) {

156
etc/rc.newwanipv6 Executable file
View File

@ -0,0 +1,156 @@
#!/usr/local/bin/php -f
<?php
/*
rc.newwanip
Copyright (C) 2006 Scott Ullrich (sullrich@gmail.com)
part of pfSense (http://www.pfsense.com)
Originally part of m0n0wall (http://m0n0.ch)
Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
/* parse the configuration and include all functions used below */
require_once("globals.inc");
require_once("config.inc");
require_once("functions.inc");
require_once("filter.inc");
require_once("shaper.inc");
require_once("ipsec.inc");
require_once("vpn.inc");
require_once("openvpn.inc");
require_once("IPv6.inc");
// Do not process while booting
if($g['booting'])
exit;
// echo print_r($_ENV, true);
/*Array
(
[REASON] => NBI
[new_domain_name_servers] => 2001:470:20::2
[new_domain_name] => domain.nl.
)
*/
function restart_packages() {
global $oldip, $curwanipi, $g;
/* restart packages */
system_ntp_configure();
log_error("{$g['product_name']} package system has detected an ip change $oldip -> $curwanip ... Restarting packages.");
mwexec_bg("/etc/rc.start_packages");
}
log_error("rc.newwanipv6: Informational is starting.");
$curwanip = get_interface_ipv6();
$interface = "wan";
$interface_real = get_real_interface();
if(is_ipaddr(trim($_ENV['new_domain_name_servers']))) {
echo "DNS {$_ENV['new_domain_name_servers']}\n";
file_put_contents("{$g['varetc_path']}/nameserver_v6{$interface}", trim($_ENV['new_domain_name_servers']));
}
if(!empty($_ENV['new_domain_name'])) {
file_put_contents("{$g['varetc_path']}/searchdomain_v6{$interface}", $_ENV['new_domain_name']);
}
log_error("rc.newwanipv6: on (IP address: {$curwanipv6}) (interface: {$interface}) (real interface: {$interface_real}).");
if($curwanipv6 == "" || !is_ipaddrv6($curwanipv6)) {
log_error("rc.newwanipv6: Failed to update {$interface} IP, restarting...");
send_event("interface reconfigure {$interface}");
exit;
}
if (empty($interface)) {
filter_configure();
restart_packages();
exit;
}
$oldip = "";
if (file_exists("{$g['vardb_path']}/{$interface}_cacheipv6"))
$oldipv6 = file_get_contents("{$g['vardb_path']}/{$interface}_cacheipv6");
$grouptmp = link_interface_to_group($interface);
if (!empty($grouptmp))
array_walk($grouptmp, 'interface_group_add_member');
/* regenerate resolv.conf if DNS overrides are allowed */
system_resolvconf_generate(true);
/* write current WAN IP to file */
file_put_contents("{$g['vardb_path']}/{$interface}_ipv6", $curwanipv6);
/* reconfigure static routes (kernel may have deleted them) */
system_routing_configure($interface);
/* reconfigure our gateway monitor */
setup_gateways_monitor();
/* signal filter reload */
filter_configure();
if (is_ipaddr($oldipv6) && $curwanipv6 == $oldipv6) {
// Still need to sync VPNs on PPPoE and such, as even with the same IP the VPN software is unhappy with the IP disappearing.
if (in_array($config['interfaces'][$interface]['ipaddr'], array('pppoe', 'pptp', 'ppp'))) {
/* reconfigure IPsec tunnels */
vpn_ipsec_force_reload();
/* start OpenVPN server & clients */
openvpn_resync_all($interface);
}
exit;
}
file_put_contents("{$g['vardb_path']}/{$interface}_cacheipv6", $curwanipv6);
/* perform RFC 2136 DNS update */
services_dnsupdate_process($interface);
/* signal dyndns update */
services_dyndns_configure($interface);
/* reconfigure IPsec tunnels */
vpn_ipsec_force_reload();
/* start OpenVPN server & clients */
if (substr($interface_real, 0, 4) != "ovpn")
openvpn_resync_all($interface);
/* reload graphing functions */
enable_rrd_graphing();
/* reload igmpproxy */
services_igmpproxy_configure();
restart_packages();
services_rtadvd_configure();
?>

View File

@ -117,8 +117,8 @@ PHPMODULES="$PHPMODULES ssh2"
# pfSense extensions
PHPMODULES="$PHPMODULES pfSense"
PHP_ZEND_MODULES=""
PHP_ZEND_MODULES_TS=""
PHP_ZEND_MODULES="ioncube_loader_fre_5.2"
PHP_ZEND_MODULES_TS="ioncube_loader_fre_5.2_ts"
# Modules previously included.
# can be turned on by touching
@ -192,7 +192,7 @@ fi
# Read in dynamodules
if [ -d /etc/php_dynamodules ]; then
DYNA_MODULES=`/bin/ls /etc/php_dynamodules/`
DYNA_MODULES=`/bin/ls -Utr /etc/php_dynamodules/`
PHPMODULES="$PHPMODULES $DYNA_MODULES"
fi
@ -230,7 +230,7 @@ done
for EXT in $PHP_ZEND_MODULES; do
# Ensure extension exists before adding.
if [ -f "${EXTENSIONSDIR}${EXT}.so" ]; then
echo "zend_extension=${EXTENSIONSDIR}/${EXT}.so" >> /usr/local/lib/php.ini
echo "zend_extension=${EXTENSIONSDIR}${EXT}.so" >> /usr/local/lib/php.ini
fi
done

0
etc/rc.stop_packages Normal file → Executable file
View File

View File

@ -28,6 +28,15 @@ if [ ! -f /tmp/bogons ]; then
exit
fi
/usr/bin/fetch -q -o /tmp/bogonsv6 "http://files.pfsense.org/mirrors/fullbogons-ipv6.txt"
if [ ! -f /tmp/bogonsv6 ]; then
echo "Could not download http://files.pfsense.org/mirrors/fullbogons-ipv6.txt" | logger
# Relaunch and sleep
sh /etc/rc.update_bogons.sh &
exit
fi
BOGON_MD5=`/usr/bin/fetch -q -o - "http://files.pfsense.org/mirrors/bogon-bn-nonagg.txt.md5" | awk '{ print $4 }'`
ON_DISK_MD5=`md5 /tmp/bogons | awk '{ print $4 }'`
if [ "$BOGON_MD5" = "$ON_DISK_MD5" ]; then
@ -42,5 +51,19 @@ else
sh /etc/rc.update_bogons.sh &
fi
BOGON_MD5=`/usr/bin/fetch -q -o - "http://files.pfsense.org/mirrors/fullbogons-ipv6.txt.md5" | awk '{ print $4 }'`
ON_DISK_MD5=`md5 /tmp/bogonsv6 | awk '{ print $4 }'`
if [ "$BOGON_MD5" = "$ON_DISK_MD5" ]; then
egrep -v "^#" /tmp/bogonsv6 > /etc/bogonsv6
/etc/rc.conf_mount_ro
RESULT=`/sbin/pfctl -t bogonsv6 -T replace -f /etc/bogonsv6 2>&1`
rm /tmp/bogons
echo "Bogons files downloaded: $RESULT" | logger
else
echo "Could not download http://files.pfsense.org/mirrors/fullbogons-ipv6.txt.md5 (md5 mismatch)" | logger
# Relaunch and sleep
sh /etc/rc.update_bogons.sh &
fi
echo "rc.update_bogons.sh is ending the update cycle." | logger

View File

@ -1 +1 @@
HEAD
2.1-DEVELOPMENT

View File

@ -13,6 +13,7 @@
# Field 5: Script to run once service is restored
# Field 6: Ping time threshold
# Field 7: Wan ping time threshold
# Field 8: Address family
# Read in ipsec ping hosts and check the CARP status
if [ -f /var/db/ipsecpinghosts ]; then
@ -66,9 +67,15 @@ for TOPING in $PINGHOSTS ; do
SERVICERESTOREDSCRIPT=`echo $TOPING | cut -d"|" -f5`
THRESHOLD=`echo $TOPING | cut -d"|" -f6`
WANTHRESHOLD=`echo $TOPING | cut -d"|" -f7`
AF=`echo $TOPING | cut -d"|" -f8`
if [ "$AF" == "inet6" ]; then
PINGCMD=ping6
else
PINGCMD=ping
fi
echo Processing $DSTIP
# Look for a service being down
ping -c $COUNT -S $SRCIP $DSTIP
$PINGCMD -c $COUNT -S $SRCIP $DSTIP
if [ $? -eq 0 ]; then
# Host is up
# Read in previous status
@ -97,7 +104,7 @@ for TOPING in $PINGHOSTS ; do
fi
echo "Checking ping time $DSTIP"
# Look at ping values themselves
PINGTIME=`ping -c 1 -S $SRCIP $DSTIP | awk '{ print $7 }' | grep time | cut -d "=" -f2`
PINGTIME=`$PINGCMD -c 1 -S $SRCIP $DSTIP | awk '{ print $7 }' | grep time | cut -d "=" -f2`
echo "Ping returned $?"
echo $PINGTIME > /var/db/pingmsstatus/$DSTIP
if [ "$THRESHOLD" != "" ]; then

View File

@ -56,7 +56,7 @@ function RADIUS_ACCOUNTING_START($ruleno, $username, $sessionid, $radiusservers,
$retvalue = array();
$nas_mac = mac_format(get_interface_mac("wan"));
$clientmac = mac_format($clientmac);
$nas_port = $ruleno;
$nas_port = intval($ruleno);
$radiusvendor = $config['captiveportal']['radiusvendor'] ? $config['captiveportal']['radiusvendor'] : null;
switch($radiusvendor) {
@ -171,7 +171,7 @@ function RADIUS_ACCOUNTING_STOP($ruleno,$username,$sessionid,$start_time,$radius
$retvalue = array();
$nas_mac = mac_format(get_interface_mac("wan"));
$clientmac = mac_format($clientmac);
$nas_port = $ruleno;
$nas_port = intval($ruleno);
$radiusvendor = $config['captiveportal']['radiusvendor'] ? $config['captiveportal']['radiusvendor'] : null;
$stop_time = (empty($stop_time)) ? time() : $stop_time;
$session_time = $stop_time - $start_time;
@ -233,7 +233,7 @@ function RADIUS_ACCOUNTING_STOP($ruleno,$username,$sessionid,$start_time,$radius
// Default attributes
$racct->putAttribute(RADIUS_SERVICE_TYPE, RADIUS_LOGIN);
$racct->putAttribute(RADIUS_NAS_PORT_TYPE, RADIUS_ETHERNET);
$racct->putAttribute(RADIUS_NAS_PORT, $nas_port);
$racct->putAttribute(RADIUS_NAS_PORT, $nas_port, 'integer');
$racct->putAttribute(RADIUS_ACCT_SESSION_ID, $sessionid);
// Extra data to identify the client and nas

View File

@ -6,10 +6,10 @@ fi
if [ -f "/tmp/${interface}_defaultgw" ]; then
route delete default $4
fi
/sbin/pfctl -k 0.0.0.0/0 -k $3
/sbin/pfctl -k $3
pfctl -K $3
/sbin/pfctl -b 0.0.0.0/32 -b $4
/sbin/pfctl -k 0.0.0.0/0 -k $3/32
/sbin/pfctl -k $3/32
pfctl -K $3/32
/sbin/pfctl -b 0.0.0.0/32 -b $4/32
# delete the node just in case mpd cannot do that
/usr/sbin/ngctl shutdown $1:
if [ -f "/var/etc/nameserver_$1" ]; then

View File

@ -2,4 +2,4 @@
# record logout
/usr/bin/logger -p local3.info "logout,$1,$4,$5"
# /sbin/pfctl -b $3 -b $4
/sbin/pfctl -b $3/32 -b $4/32

View File

@ -150,18 +150,25 @@ include("head.inc");
<?php
$int = strtolower($filterent['interface']);
$proto = strtolower($filterent['proto']);
if(is_ipaddrv6($filterent['srcip'])) {
$ipproto = "inet6";
$filterent['srcip'] = "[{$filterent['srcip']}]";
$filterent['dstip'] = "[{$filterent['dstip']}]";
} else {
$ipproto = "inet";
}
$srcstr = $filterent['srcip'] . get_port_with_service($filterent['srcport'], $proto);
$dststr = $filterent['dstip'] . get_port_with_service($filterent['dstport'], $proto);
?>
<td class="listr" nowrap>
<a href="diag_dns.php?host=<?php echo $filterent['srcip']; ?>" title="<?=gettext("Reverse Resolve with DNS");?>"><img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_log.gif"></a>
<a href="easyrule.php?<?php echo "action=block&int={$int}&src={$filterent['srcip']}"; ?>" title="<?=gettext("Easy Rule: Add to Block List");?>" onclick="return confirm('<?=gettext("Do you really want to add this BLOCK rule?")."\n\n".gettext("Easy Rule is still experimental.")."\n".gettext("Continue at risk of your own peril.")."\n".gettext("Backups are also nice.")?>')"><img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_block_add.gif"></a>
<a href="easyrule.php?<?php echo "action=block&int={$int}&src={$filterent['srcip']}&ipproto={$ipproto}"; ?>" title="<?=gettext("Easy Rule: Add to Block List");?>" onclick="return confirm('<?=gettext("Do you really want to add this BLOCK rule?")."\n\n".gettext("Easy Rule is still experimental.")."\n".gettext("Continue at risk of your own peril.")."\n".gettext("Backups are also nice.")?>')"><img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_block_add.gif"></a>
<?php echo $srcstr;?>
</td>
<td class="listr" nowrap>
<a href="diag_dns.php?host=<?php echo $filterent['dstip']; ?>" title="<?=gettext("Reverse Resolve with DNS");?>"><img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_log.gif"></a>
<a href="easyrule.php?<?php echo "action=pass&int={$int}&proto={$proto}&src={$filterent['srcip']}&dst={$filterent['dstip']}&dstport={$filterent['dstport']}"; ?>" title="<?=gettext("Easy Rule: Pass this traffic");?>" onclick="return confirm('<?=gettext("Do you really want to add this PASS rule?")."\n\n".gettext("Easy Rule is still experimental.")."\n".gettext("Continue at risk of your own peril.")."\n".gettext("Backups are also nice.");?>')"><img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_pass_add.gif"></a>
<a href="easyrule.php?<?php echo "action=pass&int={$int}&proto={$proto}&src={$filterent['srcip']}&dst={$filterent['dstip']}&dstport={$filterent['dstport']}&ipproto={$ipproto}"; ?>" title="<?=gettext("Easy Rule: Pass this traffic");?>" onclick="return confirm('<?=gettext("Do you really want to add this PASS rule?")."\n\n".gettext("Easy Rule is still experimental.")."\n".gettext("Continue at risk of your own peril.")."\n".gettext("Backups are also nice.");?>')"><img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_pass_add.gif"></a>
<?php echo $dststr;?>
</td>
<?php

View File

@ -62,7 +62,7 @@ if(is_array($config['ipsec']['phase1']))
$replace[] = "$1<strong>[{$ph1ent['descr']}]</strong>: $2$3$4";
}
/* collect all our own ip addresses */
exec("/sbin/ifconfig | /usr/bin/awk '/inet / {print $2}'", $ip_address_list);
exec("/sbin/ifconfig | /usr/bin/awk '/inet/ {print $2}'", $ip_address_list);
foreach($ip_address_list as $address) {
$search[] = "/(racoon: )(INFO[:].*?)({$address}\[[0-9].+\])/i";
$search[] = "/(racoon: )(\[{$address}\]|{$address})(.*)/i";
@ -79,7 +79,6 @@ $replace[] = "$1 <strong>[Check Phase 1 settings, lifetime, algorithm]</strong>"
$replace[] = "$1 <strong>[Check Phase 2 settings, networks]</strong>";
$replace[] = "$1 <strong>[Check Phase 2 settings, algorithm]</strong>";
$nentries = $config['syslog']['nentries'];
if (!$nentries)
$nentries = 50;

163
usr/local/www/diag_ndp.php Executable file
View File

@ -0,0 +1,163 @@
<?php
/*
diag_ndp.php
part of the pfSense project (http://www.pfsense.org)
Copyright (C) 2004-2010 Scott Ullrich <sullrich@gmail.com>
Copyright (C) 2011 Seth Mos <seth.mos@dds.nl>
originally part of m0n0wall (http://m0n0.ch/wall)
Copyright (C) 2005 Paul Taylor (paultaylor@winndixie.com) and Manuel Kasper <mk@neon1.net>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
/*
pfSense_BUILDER_BINARIES: /bin/cat /usr/sbin/arp
pfSense_MODULE: arp
*/
##|+PRIV
##|*IDENT=page-diagnostics-ndptable
##|*NAME=Diagnostics: NDP Table page
##|*DESCR=Allow access to the 'Diagnostics: NDP Table' page.
##|*MATCH=diag_ndp.php*
##|-PRIV
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
require("guiconfig.inc");
exec("/usr/sbin/ndp -na", $rawdata);
$i = 0;
/* if list */
$ifdescrs = get_configured_interface_with_descr();
foreach ($ifdescrs as $key =>$interface) {
$hwif[$config['interfaces'][$key]['if']] = $interface;
}
/* Array ( [0] => Neighbor [1] => Linklayer [2] => Address
[3] => Netif [4] => Expire [5] => S
[6] => Flags ) */
$data = array();
array_shift($rawdata);
foreach ($rawdata as $line) {
$elements = preg_split('/[ ]+/', $line);
$ndpent = array();
$ndpent['ipv6'] = trim($elements[0]);
$ndpent['mac'] = trim($elements[1]);
$ndpent['interface'] = trim($elements[2]);
$data[] = $ndpent;
}
/* FIXME: Not ipv6 compatible dns resolving. PHP needs fixing */
function _getHostName($mac,$ip)
{
if(is_ipaddr($ip)) {
if(gethostbyaddr($ip) <> "" and gethostbyaddr($ip) <> $ip)
return gethostbyaddr($ip);
else
return "";
}
}
// Resolve hostnames and replace Z_ with "". The intention
// is to sort the list by hostnames, alpha and then the non
// resolvable addresses will appear last in the list.
foreach ($data as &$entry) {
$dns = trim(_getHostName($entry['mac'], $entry['ipv6']));
if(trim($dns))
$entry['dnsresolve'] = "$dns";
else
$entry['dnsresolve'] = "Z_ ";
}
// Sort the data alpha first
$data = msort($data, "dnsresolve");
$pgtitle = array(gettext("Diagnostics"),gettext("NDP Table"));
include("head.inc");
?>
<body link="#000000" vlink="#000000" alink="#000000">
<?php include("fbegin.inc"); ?>
<div id="loading">
<img src="/themes/<?=$g['theme'];?>/images/misc/loader.gif"><?= gettext("Loading, please wait..."); ?>
<p/>&nbsp;
</div>
<?php
// Flush buffers out to client so that they see Loading, please wait....
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
ob_implicit_flush(1);
?>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="listhdrr"><?= gettext("IPv6 address"); ?></td>
<td class="listhdrr"><?= gettext("MAC address"); ?></td>
<td class="listhdrr"><?= gettext("Hostname"); ?></td>
<td class="listhdr"><?= gettext("Interface"); ?></td>
<td class="list"></td>
</tr>
<?php foreach ($data as $entry): ?>
<tr>
<td class="listlr"><?=$entry['ipv6'];?></td>
<td class="listr"><?=$entry['mac'];?></td>
<td class="listr">
<?php
echo "&nbsp;". str_replace("Z_ ", "", $entry['dnsresolve']);
?>
</td>
<td class="listr">
<?
if(isset($hwif[$entry['interface']]))
echo $hwif[$entry['interface']];
else
echo $entry['interface'];
?>
</td>
</tr>
<?php endforeach; ?>
</table>
</td>
</tr>
</table>
<?php include("fend.inc"); ?>
<script type="text/javascript">
$('loading').innerHTML = '';
</script>

View File

@ -29,7 +29,7 @@
*/
/*
pfSense_BUILDER_BINARIES: /sbin/ping
pfSense_BUILDER_BINARIES: /sbin/ping /sbin/ping6
pfSense_MODULE: routing
*/
@ -130,6 +130,12 @@ include("head.inc"); ?>
system("/sbin/ping -S$ifaddr -c$count " . escapeshellarg($host));
else
system("/sbin/ping -c$count " . escapeshellarg($host));
$ifaddr = get_interface_ipv6($interface);
if ($ifaddr)
system("/sbin/ping6 -S$ifaddr -c$count " . escapeshellarg($host));
else
system("/sbin/ping6 -c$count " . escapeshellarg($host));
echo('</pre>');
}
?>

View File

@ -125,6 +125,7 @@ if (!isset($do_traceroute)) {
else
$useicmp = "";
system("/usr/sbin/traceroute $useicmp -w 2 -m " . escapeshellarg($ttl) . " " . escapeshellarg($host));
system("/usr/sbin/traceroute6 $useicmp -w 2 -m " . escapeshellarg($ttl) . " " . escapeshellarg($host));
echo('</pre>');
}
?>

View File

@ -45,10 +45,10 @@ if ($_GET && isset($_GET['action'])) {
switch ($_GET['action']) {
case 'block':
/* Check that we have a valid host */
easyrule_parse_block($_GET['int'], $_GET['src']);
easyrule_parse_block($_GET['int'], $_GET['src'], $_GET['ipproto']);
break;
case 'pass':
easyrule_parse_pass($_GET['int'], $_GET['proto'], $_GET['src'], $_GET['dst'], $_GET['dstport']);
easyrule_parse_pass($_GET['int'], $_GET['proto'], $_GET['src'], $_GET['dst'], $_GET['dstport'], $_GET['ipproto']);
break;
}
}

View File

@ -80,19 +80,19 @@ function output_menu($arrayitem, $target="") {
// System
$system_menu = array();
$system_menu[] = array("Advanced", "/system_advanced_admin.php");
$system_menu[] = array("Firmware", "/system_firmware.php");
$system_menu[] = array("General Setup", "/system.php");
$system_menu[] = array("Logout", "/index.php?logout");
$system_menu[] = array(gettext("Advanced"), "/system_advanced_admin.php");
$system_menu[] = array(gettext("Firmware"), "/system_firmware.php");
$system_menu[] = array(gettext("General Setup"), "/system.php");
$system_menu[] = array(gettext("Logout"), "/index.php?logout");
if ($g['platform'] == "pfSense" or $g['platform'] == "nanobsd")
$system_menu[] = array("Packages", "/pkg_mgr_installed.php");
$system_menu[] = array("Setup Wizard", "/wizard.php?xml=setup_wizard.xml");
$system_menu[] = array("Routing", "/system_gateways.php");
$system_menu[] = array("Cert Manager", "/system_camanager.php");
$system_menu[] = array(gettext("Packages"), "/pkg_mgr_installed.php");
$system_menu[] = array(gettext("Setup Wizard"), "/wizard.php?xml=setup_wizard.xml");
$system_menu[] = array(gettext("Routing"), "/system_gateways.php");
$system_menu[] = array(gettext("Cert Manager"), "/system_camanager.php");
if (!isAllowedPage("system_usermanager.php*"))
$system_menu[] = array("User Manager", "/system_usermanager_passwordmg.php");
$system_menu[] = array(gettext("User Manager"), "/system_usermanager_passwordmg.php");
else
$system_menu[] = array("User Manager", "/system_usermanager.php");
$system_menu[] = array(gettext("User Manager"), "/system_usermanager.php");
$system_menu = msort(array_merge($system_menu, return_ext_menu("System")),0);
// Interfaces
@ -107,68 +107,71 @@ $interfaces_menu = msort(array_merge($interfaces_menu, return_ext_menu("Interfac
// Firewall
$firewall_menu = array();
$firewall_menu[] = array("Aliases", "/firewall_aliases.php");
$firewall_menu[] = array("NAT", "/firewall_nat.php");
$firewall_menu[] = array("Rules", "/firewall_rules.php");
$firewall_menu[] = array("Schedules", "/firewall_schedule.php");
$firewall_menu[] = array("Traffic Shaper", "/firewall_shaper.php");
$firewall_menu[] = array("Virtual IPs", "/firewall_virtual_ip.php");
$firewall_menu[] = array(gettext("Aliases"), "/firewall_aliases.php");
$firewall_menu[] = array(gettext("NAT"), "/firewall_nat.php");
$firewall_menu[] = array(gettext("Rules"), "/firewall_rules.php");
$firewall_menu[] = array(gettext("Schedules"), "/firewall_schedule.php");
$firewall_menu[] = array(gettext("Traffic Shaper"), "/firewall_shaper.php");
$firewall_menu[] = array(gettext("Virtual IPs"), "/firewall_virtual_ip.php");
$firewall_menu = msort(array_merge($firewall_menu, return_ext_menu("Firewall")),0);
// Services
$services_menu = array();
$services_menu[] = array("Captive Portal", "/services_captiveportal.php");
$services_menu[] = array("DNS Forwarder", "/services_dnsmasq.php");
$services_menu[] = array("DHCP Relay", "/services_dhcp_relay.php");
if($g['services_dhcp_server_enable'])
$services_menu[] = array("DHCP Server", "/services_dhcp.php");
$services_menu[] = array("Dynamic DNS", "/services_dyndns.php");
$services_menu[] = array("IGMP proxy", "/services_igmpproxy.php");
$services_menu[] = array("Load Balancer", "/load_balancer_pool.php");
$services_menu[] = array("OLSR", "/pkg_edit.php?xml=olsrd.xml&id=0");
$services_menu[] = array("PPPoE Server", "/vpn_pppoe.php");
$services_menu[] = array("RIP", "/pkg_edit.php?xml=routed.xml&id=0");
$services_menu[] = array("SNMP", "/services_snmp.php");
$services_menu[] = array(gettext("Captive Portal"), "/services_captiveportal.php");
$services_menu[] = array(gettext("DNS Forwarder"), "/services_dnsmasq.php");
$services_menu[] = array(gettext("DHCP Relay"), "/services_dhcp_relay.php");
if($g['services_dhcp_server_enable']) {
$services_menu[] = array(gettext("DHCP Server"), "/services_dhcp.php");
$services_menu[] = array(gettext("DHCPv6 Server"), "/services_dhcpv6.php");
}
$services_menu[] = array(gettext("Dynamic DNS"), "/services_dyndns.php");
$services_menu[] = array(gettext("IGMP proxy"), "/services_igmpproxy.php");
$services_menu[] = array(gettext("Load Balancer"), "/load_balancer_pool.php");
$services_menu[] = array(gettext("OLSR"), "/pkg_edit.php?xml=olsrd.xml&id=0");
$services_menu[] = array(gettext("PPPoE Server"), "/vpn_pppoe.php");
$services_menu[] = array(gettext("RIP"), "/pkg_edit.php?xml=routed.xml&id=0");
$services_menu[] = array(gettext("SNMP"), "/services_snmp.php");
if(count($config['interfaces']) > 1) {
/* no use for UPnP in single-interface deployments
remove to reduce user confusion
*/
$services_menu[] = array("UPnP &amp; NAT-PMP", "/pkg_edit.php?xml=miniupnpd.xml&id=0");
$services_menu[] = array(gettext("UPnP &amp; NAT-PMP"), "/pkg_edit.php?xml=miniupnpd.xml&id=0");
}
$services_menu[] = array("OpenNTPD", "/pkg_edit.php?xml=openntpd.xml&id=0");
$services_menu[] = array("Wake on LAN", "/services_wol.php");
$services_menu[] = array(gettext("OpenNTPD"), "/pkg_edit.php?xml=openntpd.xml&id=0");
$services_menu[] = array(gettext("Wake on LAN"), "/services_wol.php");
$services_menu = msort(array_merge($services_menu, return_ext_menu("Services")),0);
// VPN
$vpn_menu = array();
$vpn_menu[] = array("IPsec", "/vpn_ipsec.php");
$vpn_menu[] = array("OpenVPN", "/vpn_openvpn_server.php");
$vpn_menu[] = array("PPTP", "/vpn_pptp.php");
$vpn_menu[] = array("L2TP", "/vpn_l2tp.php");
$vpn_menu[] = array(gettext("IPsec"), "/vpn_ipsec.php");
$vpn_menu[] = array(gettext("OpenVPN"), "/vpn_openvpn_server.php");
$vpn_menu[] = array(gettext("PPTP"), "/vpn_pptp.php");
$vpn_menu[] = array(gettext("L2TP"), "/vpn_l2tp.php");
$vpn_menu = msort(array_merge($vpn_menu, return_ext_menu("VPN")),0);
// Status
$status_menu = array();
if (isset($config['captiveportal']['enable']))
$status_menu[] = array("Captive Portal", "/status_captiveportal.php");
$status_menu[] = array("CARP (failover)", "/carp_status.php");
$status_menu[] = array("Dashboard", "/index.php");
$status_menu[] = array("Gateways", "/status_gateways.php");
$status_menu[] = array("DHCP Leases", "/status_dhcp_leases.php");
$status_menu[] = array("Filter Reload", "/status_filter_reload.php");
$status_menu[] = array("Interfaces", "/status_interfaces.php");
$status_menu[] = array("IPsec", "/diag_ipsec.php");
$status_menu[] = array("Load Balancer", "/status_lb_pool.php");
$status_menu[] = array("OpenVPN", "/status_openvpn.php");
$status_menu[] = array(gettext("Captive Portal"), "/status_captiveportal.php");
$status_menu[] = array(gettext("CARP (failover)"), "/carp_status.php");
$status_menu[] = array(gettext("Dashboard"), "/index.php");
$status_menu[] = array(gettext("Gateways"), "/status_gateways.php");
$status_menu[] = array(gettext("DHCP Leases"), "/status_dhcp_leases.php");
$status_menu[] = array(gettext("DHCPv6 Leases"), "/status_dhcpv6_leases.php");
$status_menu[] = array(gettext("Filter Reload"), "/status_filter_reload.php");
$status_menu[] = array(gettext("Interfaces"), "/status_interfaces.php");
$status_menu[] = array(gettext("IPsec"), "/diag_ipsec.php");
$status_menu[] = array(gettext("Load Balancer"), "/status_lb_pool.php");
$status_menu[] = array(gettext("OpenVPN"), "/status_openvpn.php");
if ($g['platform'] == "pfSense")
$status_menu[] = array("Package Logs", "/diag_pkglogs.php");
$status_menu[] = array("Queues", "/status_queues.php");
$status_menu[] = array("RRD Graphs", "/status_rrd_graph.php");
$status_menu[] = array("Services", "/status_services.php");
$status_menu[] = array("System Logs", "/diag_logs.php");
$status_menu[] = array("Traffic Graph", "/status_graph.php?if=wan");
$status_menu[] = array(gettext("Package Logs"), "/diag_pkglogs.php");
$status_menu[] = array(gettext("Queues"), "/status_queues.php");
$status_menu[] = array(gettext("RRD Graphs"), "/status_rrd_graph.php");
$status_menu[] = array(gettext("Services"), "/status_services.php");
$status_menu[] = array(gettext("System Logs"), "/diag_logs.php");
$status_menu[] = array(gettext("Traffic Graph"), "/status_graph.php?if=wan");
if(count($config['interfaces']) > 1)
$status_menu[] = array("UPnP &amp; NAT-PMP", "/status_upnp.php");
$status_menu[] = array(gettext("UPnP &amp; NAT-PMP"), "/status_upnp.php");
$ifentries = get_configured_interface_with_descr();
foreach ($ifentries as $ent => $entdesc) {
if (is_array($config['interfaces'][$ent]['wireless']) &&
@ -176,54 +179,55 @@ foreach ($ifentries as $ent => $entdesc) {
$wifdescrs[$ent] = $entdesc;
}
if (count($wifdescrs) > 0)
$status_menu[] = array("Wireless", "/status_wireless.php");
$status_menu[] = array(gettext("Wireless"), "/status_wireless.php");
$status_menu = msort(array_merge($status_menu, return_ext_menu("Status")),0);
// Diagnostics
$diagnostics_menu = array();
$diagnostics_menu[] = array("ARP Tables", "/diag_arp.php");
$diagnostics_menu[] = array("Authentication", "/diag_authentication.php");
$diagnostics_menu[] = array("Backup/Restore", "/diag_backup.php");
$diagnostics_menu[] = array("Command Prompt", "/exec.php");
$diagnostics_menu[] = array("DNS Lookup", "/diag_dns.php");
$diagnostics_menu[] = array("Edit File", "/edit.php");
$diagnostics_menu[] = array("Factory Defaults", "/diag_defaults.php");
$diagnostics_menu[] = array("Halt System", "/halt.php" );
$diagnostics_menu[] = array("Limiter Info", "/diag_limiter_info.php" );
$diagnostics_menu[] = array(gettext("ARP Tables"), "/diag_arp.php");
$diagnostics_menu[] = array(gettext("Authentication"), "/diag_authentication.php");
$diagnostics_menu[] = array(gettext("Backup/Restore"), "/diag_backup.php");
$diagnostics_menu[] = array(gettext("Command Prompt"), "/exec.php");
$diagnostics_menu[] = array(gettext("DNS Lookup"), "/diag_dns.php");
$diagnostics_menu[] = array(gettext("Edit File"), "/edit.php");
$diagnostics_menu[] = array(gettext("Factory Defaults"), "/diag_defaults.php");
$diagnostics_menu[] = array(gettext("Halt System"), "/halt.php" );
$diagnostics_menu[] = array(gettext("Limiter Info"), "/diag_limiter_info.php" );
$diagnostics_menu[] = array(gettext("NDP Table"), "/diag_ndp.php" );
$diagnostics_menu[] = array("Tables", "/diag_tables.php");
$diagnostics_menu[] = array("Ping", "/diag_ping.php");
$diagnostics_menu[] = array("pfInfo", "/diag_pf_info.php");
$diagnostics_menu[] = array("pfTop", "/diag_system_pftop.php");
$diagnostics_menu[] = array("Reboot", "/reboot.php");
$diagnostics_menu[] = array("Routes", "/diag_routes.php");
$diagnostics_menu[] = array("SMART Status", "/diag_smart.php");
$diagnostics_menu[] = array("States", "/diag_dump_states.php");
$diagnostics_menu[] = array("States Summary", "/diag_states_summary.php");
$diagnostics_menu[] = array("System Activity", "/diag_system_activity.php");
$diagnostics_menu[] = array("Traceroute", "/diag_traceroute.php");
$diagnostics_menu[] = array("Packet Capture", "/diag_packet_capture.php");
$diagnostics_menu[] = array(gettext("Tables"), "/diag_tables.php");
$diagnostics_menu[] = array(gettext("Ping"), "/diag_ping.php");
$diagnostics_menu[] = array(gettext("pfInfo"), "/diag_pf_info.php");
$diagnostics_menu[] = array(gettext("pfTop"), "/diag_system_pftop.php");
$diagnostics_menu[] = array(gettext("Reboot"), "/reboot.php");
$diagnostics_menu[] = array(gettext("Routes"), "/diag_routes.php");
$diagnostics_menu[] = array(gettext("SMART Status"), "/diag_smart.php");
$diagnostics_menu[] = array(gettext("States"), "/diag_dump_states.php");
$diagnostics_menu[] = array(gettext("States Summary"), "/diag_states_summary.php");
$diagnostics_menu[] = array(gettext("System Activity"), "/diag_system_activity.php");
$diagnostics_menu[] = array(gettext("Traceroute"), "/diag_traceroute.php");
$diagnostics_menu[] = array(gettext("Packet Capture"), "/diag_packet_capture.php");
if($g['platform'] == "nanobsd")
$diagnostics_menu[] = array("NanoBSD", "/diag_nanobsd.php");
$diagnostics_menu[] = array(gettext("NanoBSD"), "/diag_nanobsd.php");
if (isset($config['system']['developer'])) {
echo "<li><hr width=\"80%\"/></li>";
$diagnostics_menu[] = array("Restart HTTPD", "/restart_httpd.php");
$diagnostics_menu[] = array(gettext("Restart HTTPD"), "/restart_httpd.php");
}
$diagnostics_menu = msort(array_merge($diagnostics_menu, return_ext_menu("Diagnostics")),0);
if(! $g['disablehelpmenu']) {
$help_menu = array();
$help_menu[] = array("About this Page", $helpurl);
$help_menu[] = array(gettext("About this Page"), $helpurl);
if($g['product_name'] == "pfSense")
$help_menu[] = array("Bug Database", "http://www.pfsense.org/j.php?jumpto=redmine");
$help_menu[] = array("User Forum", "http://www.pfsense.org/j.php?jumpto=forum");
$help_menu[] = array("Documentation", "http://www.pfsense.org/j.php?jumpto=doc");
$help_menu[] = array("Developers Wiki", "http://www.pfsense.org/j.php?jumpto=devwiki");
$help_menu[] = array("Paid Support", "http://www.pfsense.org/j.php?jumpto=portal");
$help_menu[] = array("pfSense Book", "http://www.pfsense.org/j.php?jumpto=book");
$help_menu[] = array("Search portal", "http://www.pfsense.org/j.php?jumpto=searchportal");
$help_menu[] = array("FreeBSD Handbook", "http://www.pfsense.org/j.php?jumpto=fbsdhandbook");
$help_menu[] = array(gettext("Bug Database"), "http://www.pfsense.org/j.php?jumpto=redmine");
$help_menu[] = array(gettext("User Forum"), "http://www.pfsense.org/j.php?jumpto=forum");
$help_menu[] = array(gettext("Documentation"), "http://www.pfsense.org/j.php?jumpto=doc");
$help_menu[] = array(gettext("Developers Wiki"), "http://www.pfsense.org/j.php?jumpto=devwiki");
$help_menu[] = array(gettext("Paid Support"), "http://www.pfsense.org/j.php?jumpto=portal");
$help_menu[] = array(gettext("pfSense Book"), "http://www.pfsense.org/j.php?jumpto=book");
$help_menu[] = array(gettext("Search portal"), "http://www.pfsense.org/j.php?jumpto=searchportal");
$help_menu[] = array(gettext("FreeBSD Handbook"), "http://www.pfsense.org/j.php?jumpto=fbsdhandbook");
$help_menu = msort(array_merge($help_menu, return_ext_menu("Help")),0);
}
@ -311,7 +315,7 @@ if ($_REQUEST['noticeaction'] == 'acknowledge') {
<div id="navigation" style="z-index:1000">
<ul id="menu">
<li class="firstdrop">
<div>System</div>
<div><?php echo gettext("System"); ?></div>
<ul class="subdrop">
<?php
output_menu($system_menu);
@ -319,7 +323,7 @@ if ($_REQUEST['noticeaction'] == 'acknowledge') {
</ul>
</li>
<li class="drop">
<div>Interfaces</div>
<div><?php echo gettext("Interfaces"); ?></div>
<ul class="subdrop">
<?php
output_menu($interfaces_menu);
@ -327,7 +331,7 @@ if ($_REQUEST['noticeaction'] == 'acknowledge') {
</ul>
</li>
<li class="drop">
<div>Firewall</div>
<div><?php echo gettext("Firewall"); ?></div>
<ul class="subdrop">
<?php
output_menu($firewall_menu);
@ -335,7 +339,7 @@ if ($_REQUEST['noticeaction'] == 'acknowledge') {
</ul>
</li>
<li class="drop">
<div>Services</div>
<div><?php echo gettext("Services"); ?></div>
<ul class="subdrop">
<?
output_menu($services_menu);
@ -343,7 +347,7 @@ if ($_REQUEST['noticeaction'] == 'acknowledge') {
</ul>
</li>
<li class="drop">
<div>VPN</div>
<div><?php echo gettext("VPN"); ?></div>
<ul class="subdrop">
<?php
output_menu($vpn_menu);
@ -351,7 +355,7 @@ if ($_REQUEST['noticeaction'] == 'acknowledge') {
</ul>
</li>
<li class="drop">
<div>Status</div>
<div><?php echo gettext("Status"); ?></div>
<ul class="subdrop">
<?php
output_menu($status_menu);
@ -359,7 +363,7 @@ if ($_REQUEST['noticeaction'] == 'acknowledge') {
</ul>
</li>
<li class="drop">
<div>Diagnostics</div>
<div><?php echo gettext("Diagnostics"); ?></div>
<ul id="diag" class="subdrop">
<?
output_menu($diagnostics_menu);
@ -368,7 +372,7 @@ if ($_REQUEST['noticeaction'] == 'acknowledge') {
</li>
<?php if(! $g['disablehelpmenu']): ?>
<li class="lastdrop">
<div>Help</div>
<div><?php echo gettext("Help"); ?></div>
<ul id="help" class="subdrop">
<?
output_menu($help_menu, "_new");
@ -417,13 +421,13 @@ function add_to_menu($url, $name) {
<span class="pgtitle"><a href="<?= $_SERVER['SCRIPT_NAME'] ?>"><?=genhtmltitle($pgtitle);?></a></span>
<span style="float:right; margin: 0 0 20px 20px;">
<?php if(! empty($statusurl)): ?>
<a href="<?php echo $statusurl; ?>" target="_new" title="Status of items on this page."><img src="/themes/<?php echo $g['theme']; ?>/images/status.png" border="0"></a>
<a href="<?php echo $statusurl; ?>" target="_new" title="<?php echo gettext("Status of items on this page."); ?>"><img src="/themes/<?php echo $g['theme']; ?>/images/status.png" border="0"></a>
<?php endif; ?>
<?php if(! empty($logurl)): ?>
<a href="<?php echo $logurl; ?>" target="_new" title="Log entries for items on this page."><img src="/themes/<?php echo $g['theme']; ?>/images/log.png" border="0"></a>
<a href="<?php echo $logurl; ?>" target="_new" title="<?php echo gettext("Log entries for items on this page."); ?>"><img src="/themes/<?php echo $g['theme']; ?>/images/log.png" border="0"></a>
<?php endif; ?>
<?php if(! $g['disablehelpicon']): ?>
<a href="<?php echo $helpurl; ?>" target="_new" title="Help for items on this page."><img src="/themes/<?php echo $g['theme']; ?>/images/help.png" border="0"></a>
<a href="<?php echo $helpurl; ?>" target="_new" title="<?php echo gettext("Help for items on this page."); ?>"><img src="/themes/<?php echo $g['theme']; ?>/images/help.png" border="0"></a>
<?php endif; ?>
</span>
</div>

View File

@ -399,7 +399,7 @@ function typesel_change() {
for(i=0; i<newrows; i++) {
comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
eval(comd);
comd = 'document.iform.address_subnet' + i + '.value = "32";';
comd = 'document.iform.address_subnet' + i + '.value = "128";';
eval(comd);
}
break;
@ -456,7 +456,7 @@ $url_str = gettext("URL");
$urltable_str = gettext("URL Table");
$update_freq_str = gettext("Update Freq.");
$networks_help = gettext("Networks are specified in CIDR format. Select the CIDR mask that pertains to each entry. /32 specifies a single host, /24 specifies 255.255.255.0, etc. Hostnames (FQDNs) may also be specified, using a /32 mask. You may also enter an IP range such as 192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to fill the range.");
$networks_help = gettext("Networks are specified in CIDR format. Select the CIDR mask that pertains to each entry. /32 specifies a single IPv4 host, /128 specifies a single IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 or /128 for IPv6. You may also enter an IP range such as 192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to fill the range.");
$hosts_help = gettext("Enter as many hosts as you would like. Hosts must be specified by their IP address.");
$ports_help = gettext("Enter as many ports as you wish. Port ranges can be expressed by seperating with a colon.");
$url_help = sprintf(gettext("Enter as many URLs as you wish. After saving %s will download the URL and import the items into the alias. Use only with small sets of IP addresses (less than 3000)."), $g['product_name']);
@ -646,7 +646,7 @@ EOD;
<td>
<select name="address_subnet<?php echo $tracker; ?>" class="formselect" id="address_subnet<?php echo $tracker; ?>">
<option></option>
<?php for ($i = 32; $i >= 1; $i--): ?>
<?php for ($i = 128; $i >= 1; $i--): ?>
<option value="<?=$i;?>" <?php if (($i == $address_subnet) || ($i == $pconfig['updatefreq'])) echo "selected"; ?>><?=$i;?></option>
<?php endfor; ?>
</select>

View File

@ -179,6 +179,7 @@ echo "<script type=\"text/javascript\" language=\"javascript\" src=\"/javascript
$tab_array[] = array(gettext("Port Forward"), true, "firewall_nat.php");
$tab_array[] = array(gettext("1:1"), false, "firewall_nat_1to1.php");
$tab_array[] = array(gettext("Outbound"), false, "firewall_nat_out.php");
$tab_array[] = array(gettext("NPt"), false, "firewall_nat_npt.php");
display_top_tabs($tab_array);
?>
</td></tr>

View File

@ -92,6 +92,7 @@ include("head.inc");
$tab_array[] = array(gettext("Port Forward"), false, "firewall_nat.php");
$tab_array[] = array(gettext("1:1"), true, "firewall_nat_1to1.php");
$tab_array[] = array(gettext("Outbound"), false, "firewall_nat_out.php");
$tab_array[] = array(gettext("NPt"), false, "firewall_nat_npt.php");
display_top_tabs($tab_array);
?>
</td></tr>

View File

@ -0,0 +1,183 @@
<?php
/* $Id$ */
/*
firewall_nat_npt.php
part of pfSense (http://pfsense.org)
Copyright (C) 2011 Seth Mos <seth.mos@dds.nl>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
/*
pfSense_MODULE: nat
*/
##|+PRIV
##|*IDENT=page-firewall-nat-npt
##|*NAME=Firewall: NAT: NPT page
##|*DESCR=Allow access to the 'Firewall: NAT: NPT' page.
##|*MATCH=firewall_nat_npt.php*
##|-PRIV
require("guiconfig.inc");
require_once("functions.inc");
require_once("filter.inc");
require_once("shaper.inc");
if (!is_array($config['nat']['npt'])) {
$config['nat']['npt'] = array();
}
$a_npt = &$config['nat']['npt'];
if ($_POST) {
$pconfig = $_POST;
if ($_POST['apply']) {
$retval = 0;
$retval |= filter_configure();
$savemsg = get_std_save_message($retval);
if ($retval == 0) {
clear_subsystem_dirty('natconf');
clear_subsystem_dirty('filter');
}
}
}
if ($_GET['act'] == "del") {
if ($a_npt[$_GET['id']]) {
unset($a_npt[$_GET['id']]);
write_config();
mark_subsystem_dirty('natconf');
header("Location: firewall_nat_npt.php");
exit;
}
}
$pgtitle = array(gettext("Firewall"),gettext("NAT"),gettext("NPt"));
include("head.inc");
?>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
<?php include("fbegin.inc"); ?>
<form action="firewall_nat_npt.php" method="post">
<?php if ($savemsg) print_info_box($savemsg); ?>
<?php if (is_subsystem_dirty('natconf')): ?><p>
<?php print_info_box_np(gettext("The NAT configuration has been changed") . ".<br>" . gettext("You must apply the changes in order for them to take effect."));?><br>
<?php endif; ?>
<table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr><td>
<?php
$tab_array = array();
$tab_array[] = array(gettext("Port Forward"), false, "firewall_nat.php");
$tab_array[] = array(gettext("1:1"), false, "firewall_nat_1to1.php");
$tab_array[] = array(gettext("Outbound"), false, "firewall_nat_out.php");
$tab_array[] = array(gettext("NPt"), true, "firewall_nat_npt.php");
display_top_tabs($tab_array);
?>
</td></tr>
<tr>
<td>
<div id="mainarea">
<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="10%" class="listhdrr"><?=gettext("Interface"); ?></td>
<td width="20%" class="listhdrr"><?=gettext("External Prefix"); ?></td>
<td width="15%" class="listhdrr"><?=gettext("Internal prefix"); ?></td>
<td width="30%" class="listhdr"><?=gettext("Description"); ?></td>
<td width="10%" class="list">
<table border="0" cellspacing="0" cellpadding="1">
<tr>
<td width="17"></td>
<td valign="middle"><a href="firewall_nat_npt_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add rule"); ?>"></a></td>
</tr>
</table>
</td>
</tr>
<?php
$textse = "</span>";
$i = 0; foreach ($a_npt as $natent):
if (isset($natent['disabled']))
$textss = "<span class=\"gray\">";
else
$textss = "<span>"; ?>
<tr>
<td class="listlr" ondblclick="document.location='firewall_nat_npt_edit.php?id=<?=$i;?>';">
<?php
echo $textss;
if (!$natent['interface'])
echo htmlspecialchars(convert_friendly_interface_to_friendly_descr("wan"));
else
echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($natent['interface']));
echo $textse;
?>
</td>
<?php
$source_net = pprint_address($natent['source']);
$source_cidr = strstr($source_net, '/');
$destination_net = pprint_address($natent['destination']);
$destination_cidr = strstr($destination_net, '/');
?>
<td class="listr" ondblclick="document.location='firewall_nat_npt_edit.php?id=<?=$i;?>';">
<?php echo $textss . $destination_net . $textse; ?>
</td>
<td class="listr" ondblclick="document.location='firewall_nat_npt_edit.php?id=<?=$i;?>';">
<?php echo $textss . $source_net . $textse; ?>
</td>
<td class="listbg" ondblclick="document.location='firewall_nat_npt_edit.php?id=<?=$i;?>';">
<?=$textss;?>
<?=htmlspecialchars($natent['descr']);?>&nbsp;
<?=$textse;?>
</td>
<td class="list" nowrap>
<table border="0" cellspacing="0" cellpadding="1">
<tr>
<td valign="middle"><a href="firewall_nat_npt_edit.php?id=<?=$i;?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0" title="<?=gettext("edit rule"); ?>"></a></td>
<td valign="middle"><a href="firewall_nat_npt.php?act=del&id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" title="<?=gettext("delete rule"); ?>"></a></td>
</tr>
</table>
</td>
</tr>
<?php $i++; endforeach; ?>
<tr>
<td class="list" colspan="4"></td>
<td class="list">
<table border="0" cellspacing="0" cellpadding="1">
<tr>
<td width="17"></td>
<td valign="middle"><a href="firewall_nat_npt_edit.php"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" title="<?=gettext("add rule"); ?>"></a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</form>
<?php include("fend.inc"); ?>
</body>
</html>

View File

@ -0,0 +1,280 @@
<?php
/* $Id$ */
/*
firewall_nat_npt_edit.php
part of pfSense (http://pfsense.org)
Copyright (C) 2011 Seth Mos <seth.mos@dds.nl>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
/*
pfSense_MODULE: nat
*/
##|+PRIV
##|*IDENT=page-firewall-nat-npt-edit
##|*NAME=Firewall: NAT: NPt: Edit page
##|*DESCR=Allow access to the 'Firewall: NAT: NPt: Edit' page.
##|*MATCH=firewall_nat_npt_edit.php*
##|-PRIV
function natnptcmp($a, $b) {
return ipcmp($a['external'], $b['external']);
}
function nat_npt_rules_sort() {
global $g, $config;
if (!is_array($config['nat']['npt']))
return;
usort($config['nat']['npt'], "natnptcmp");
}
require("guiconfig.inc");
require_once("interfaces.inc");
require("filter.inc");
require("shaper.inc");
$ifdisp = get_configured_interface_with_descr();
foreach ($ifdisp as $kif => $kdescr) {
$specialsrcdst[] = "{$kif}";
$specialsrcdst[] = "{$kif}ip";
}
if (!is_array($config['nat']['npt'])) {
$config['nat']['npt'] = array();
}
$a_npt = &$config['nat']['npt'];
$id = $_GET['id'];
if (isset($_POST['id']))
$id = $_POST['id'];
if (isset($id) && $a_npt[$id]) {
$pconfig['disabled'] = isset($a_npt[$id]['disabled']);
address_to_pconfig($a_npt[$id]['source'], $pconfig['src'],
$pconfig['srcmask'], $pconfig['srcnot'],
$pconfig['srcbeginport'], $pconfig['srcendport']);
address_to_pconfig($a_npt[$id]['destination'], $pconfig['dst'],
$pconfig['dstmask'], $pconfig['dstnot'],
$pconfig['dstbeginport'], $pconfig['dstendport']);
$pconfig['interface'] = $a_npt[$id]['interface'];
if (!$pconfig['interface'])
$pconfig['interface'] = "wan";
$pconfig['external'] = $a_npt[$id]['external'];
$pconfig['descr'] = $a_npt[$id]['descr'];
} else
$pconfig['interface'] = "wan";
if ($_POST) {
unset($input_errors);
$pconfig = $_POST;
/* input validation */
$reqdfields = explode(" ", "interface");
$reqdfieldsn = array(gettext("Interface"));
$reqdfields[] = "src";
$reqdfieldsn[] = gettext("Source prefix");
$reqdfields[] = "dst";
$reqdfieldsn[] = gettext("Destination prefix");
do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
if (!$input_errors) {
$natent = array();
$natent['disabled'] = isset($_POST['disabled']) ? true:false;
$natent['descr'] = $_POST['descr'];
$natent['interface'] = $_POST['interface'];
pconfig_to_address($natent['source'], $_POST['src'],
$_POST['srcmask'], $_POST['srcnot']);
pconfig_to_address($natent['destination'], $_POST['dst'],
$_POST['dstmask'], $_POST['dstnot']);
if (isset($id) && $a_npt[$id])
$a_npt[$id] = $natent;
else
$a_npt[] = $natent;
nat_npt_rules_sort();
mark_subsystem_dirty('natconf');
write_config();
header("Location: firewall_nat_npt.php");
exit;
}
}
$pgtitle = array(gettext("Firewall"),gettext("NAT"),gettext("NPt"),gettext("Edit"));
include("head.inc");
?>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
<script type="text/javascript" src="/javascript/suggestions.js">
</script>
<script type="text/javascript" src="/javascript/autosuggest.js">
</script>
<?php include("fbegin.inc"); ?>
<?php if ($input_errors) print_input_errors($input_errors); ?>
<form action="firewall_nat_npt_edit.php" method="post" name="iform" id="iform">
<table width="100%" border="0" cellpadding="6" cellspacing="0">
<tr>
<td colspan="2" valign="top" class="listtopic"><?=gettext("Edit NAT NPt entry"); ?></td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Disabled"); ?></td>
<td width="78%" class="vtable">
<input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked"; ?>>
<strong><?=gettext("Disable this rule"); ?></strong><br />
<span class="vexpl"><?=gettext("Set this option to disable this rule without removing it from the list."); ?></span>
</td>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Interface"); ?></td>
<td width="78%" class="vtable">
<select name="interface" class="formselect">
<?php
foreach ($ifdisp as $if => $ifdesc)
if(have_ruleint_access($if))
$interfaces[$if] = $ifdesc;
if ($config['l2tp']['mode'] == "server")
if(have_ruleint_access("l2tp"))
$interfaces['l2tp'] = "L2TP VPN";
if ($config['pptpd']['mode'] == "server")
if(have_ruleint_access("pptp"))
$interfaces['pptp'] = "PPTP VPN";
if ($config['pppoe']['mode'] == "server")
if(have_ruleint_access("pppoe"))
$interfaces['pppoe'] = "PPPoE VPN";
/* add ipsec interfaces */
if (isset($config['ipsec']['enable']) || isset($config['ipsec']['mobileclients']['enable']))
if(have_ruleint_access("enc0"))
$interfaces["enc0"] = "IPsec";
/* add openvpn/tun interfaces */
if ($config['openvpn']["openvpn-server"] || $config['openvpn']["openvpn-client"])
$interfaces["openvpn"] = "OpenVPN";
foreach ($interfaces as $iface => $ifacename):
?>
<option value="<?=$iface;?>" <?php if ($iface == $pconfig['interface']) echo "selected"; ?>>
<?=htmlspecialchars($ifacename);?>
</option>
<?php endforeach; ?>
</select><br>
<span class="vexpl"><?=gettext("Choose which interface this rule applies to"); ?>.<br>
<?=gettext("Hint: in most cases, you'll want to use WAN here"); ?>.</span></td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Internal IPv6 Prefix"); ?></td>
<td width="78%" class="vtable">
<input name="srcnot" type="checkbox" id="srcnot" value="yes" <?php if ($pconfig['srcnot']) echo "checked"; ?>>
<strong><?=gettext("not"); ?></strong>
<br />
<?=gettext("Use this option to invert the sense of the match."); ?>
<br />
<br />
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
<td>
<input name="src" type="text" class="formfldalias" id="src" size="20" value="<?php if (!is_specialnet($pconfig['src'])) echo htmlspecialchars($pconfig['src']);?>"> /
<select name="srcmask" class="formselect" id="srcmask">
<?php for ($i = 128; $i > 0; $i--): ?>
<option value="<?=$i;?>" <?php if ($i == $pconfig['srcmask']) echo "selected"; ?>><?=$i;?></option>
<?php endfor; ?>
</select>
</td>
</tr>
</table>
<br/>
<span class="vexpl"><?=gettext("Enter the internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. The prefix size specified for the internal IPv6 prefix will be applied to the
external prefix.");
?></span>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Destination IPv6 Prefix"); ?></td>
<td width="78%" class="vtable">
<input name="dstnot" type="checkbox" id="dstnot" value="yes" <?php if ($pconfig['dstnot']) echo "checked"; ?>>
<strong><?=gettext("not"); ?></strong>
<br />
<?=gettext("Use this option to invert the sense of the match."); ?>
<br />
<br />
<table border="0" cellspacing="0" cellpadding="0">
</tr>
<td><?=gettext("Address:"); ?>&nbsp;&nbsp;</td>
<td>
<input name="dst" type="text" class="formfldalias" id="dst" size="20" value="<?php if (!is_specialnet($pconfig['dst'])) echo htmlspecialchars($pconfig['dst']);?>">
/
<select name="dstmask" class="formselect" id="dstmask">
<?php
for ($i = 128; $i > 0; $i--): ?>
<option value="<?=$i;?>" <?php if ($i == $pconfig['dstmask']) echo "selected"; ?>><?=$i;?></option>
<?php endfor; ?>
</select>
</td>
</tr>
</table>
<br/>
<span class="vexpl"><?=gettext("Enter the Global Unicast routable IPv6 prefix here"); ?><br></span>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
<td width="78%" class="vtable">
<input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
<br/> <span class="vexpl"><?=gettext("You may enter a description here " .
"for your reference (not parsed)."); ?></span></td>
</tr>
<tr>
<td width="22%" valign="top">&nbsp;</td>
<td width="78%">
<input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>"> <input type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" onclick="history.back()">
<?php if (isset($id) && $a_npt[$id]): ?>
<input name="id" type="hidden" value="<?=htmlspecialchars($id);?>">
<?php endif; ?>
</td>
</tr>
</table>
</form>
<?php include("fend.inc"); ?>
</body>
</html>

View File

@ -298,6 +298,7 @@ include("head.inc");
$tab_array[] = array(gettext("Port Forward"), false, "firewall_nat.php");
$tab_array[] = array(gettext("1:1"), false, "firewall_nat_1to1.php");
$tab_array[] = array(gettext("Outbound"), true, "firewall_nat_out.php");
$tab_array[] = array(gettext("NPt"), false, "firewall_nat_npt.php");
display_top_tabs($tab_array);
?>
</td></tr>

View File

@ -687,6 +687,18 @@ if($_REQUEST['undodrag']) {
</td>
<td class="listr" onClick="fr_toggle(<?=$nrules;?>)" id="frd<?=$nrules;?>" ondblclick="document.location='firewall_rules_edit.php?id=<?=$i;?>';">
<?=$textss;?><?php
if (isset($filterent['ipprotocol'])) {
switch($filterent['ipprotocol']) {
case "inet":
echo "IPv4 ";
break;
case "inet6":
echo "IPv6 ";
break;
}
} else {
echo "IPv4 ";
}
if (isset($filterent['protocol'])) {
echo strtoupper($filterent['protocol']);
if (strtoupper($filterent['protocol']) == "ICMP" && !empty($filterent['icmptype'])) {

View File

@ -95,6 +95,9 @@ if (isset($id) && $a_filter[$id]) {
if (isset($a_filter[$id]['direction']))
$pconfig['direction'] = $a_filter[$id]['direction'];
if (isset($a_filter[$id]['ipprotocol']))
$pconfig['ipprotocol'] = $a_filter[$id]['ipprotocol'];
if (isset($a_filter[$id]['protocol']))
$pconfig['proto'] = $a_filter[$id]['protocol'];
else
@ -418,6 +421,9 @@ if ($_POST) {
if (isset($_POST['interface'] ))
$filterent['interface'] = $_POST['interface'];
if (isset($_POST['ipprotocol'] ))
$filterent['ipprotocol'] = $_POST['ipprotocol'];
if ($_POST['tcpflags_any']) {
$filterent['tcpflags_any'] = true;
} else {
@ -549,6 +555,7 @@ if ($_POST) {
$filterent['icmptype'] = $a_filter[$id]['icmptype'];
else if (isset($filterent['icmptype']))
unset($filterent['icmptype']);
$filterent['source'] = $a_filter[$id]['source'];
$filterent['destination'] = $a_filter[$id]['destination'];
$filterent['associated-rule-id'] = $a_filter[$id]['associated-rule-id'];
@ -697,8 +704,10 @@ include("head.inc");
if (have_ruleint_access($ifgen['ifname']))
$interfaces[$ifgen['ifname']] = $ifgen['ifname'];
$ifdescs = get_configured_interface_with_descr();
// Allow extending of the firewall edit page and include custom input validation
pfSense_handle_custom_code("/usr/local/pkg/firewall_rules/pre_interfaces_edit");
foreach ($ifdescs as $ifent => $ifdesc)
if(have_ruleint_access($ifent))
if(have_ruleint_access($ifent))
$interfaces[$ifent] = $ifdesc;
if ($config['l2tp']['mode'] == "server")
if(have_ruleint_access("l2tp"))
@ -745,6 +754,22 @@ include("head.inc");
</td>
<tr>
<?php endif; ?>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("TCP/IP Version");?></td>
<td width="78%" class="vtable">
<select name="ipprotocol" class="formselect">
<?php $ipproto = array('inet' => 'IPv4','inet6' => 'IPv6');
foreach ($ipproto as $proto => $name): ?>
<option value="<?=$proto;?>"
<?php if ($proto == $pconfig['ipprotocol']): ?>
selected="selected"
<?php endif; ?>
><?=$name;?></option>
<?php endforeach; ?>
</select>
<strong><?=gettext("Select the Internet Protocol version this rule applies to");?></strong><br />
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
<td width="78%" class="vtable">
@ -837,7 +862,7 @@ include("head.inc");
<td>
<input <?=$edit_disabled;?> autocomplete='off' name="src" type="text" class="formfldalias" id="src" size="20" value="<?php if (!is_specialnet($pconfig['src'])) echo htmlspecialchars($pconfig['src']);?>"> /
<select <?=$edit_disabled;?> name="srcmask" class="formselect" id="srcmask">
<?php for ($i = 31; $i > 0; $i--): ?>
<?php for ($i = 127; $i > 0; $i--): ?>
<option value="<?=$i;?>" <?php if ($i == $pconfig['srcmask']) echo "selected"; ?>><?=$i;?></option>
<?php endfor; ?>
</select>
@ -932,7 +957,8 @@ include("head.inc");
/
<select <?=$edit_disabled;?> name="dstmask" class="formselect" id="dstmask">
<?php
for ($i = 31; $i > 0; $i--): ?>
for ($i = 127; $i > 0;
$i--): ?>
<option value="<?=$i;?>" <?php if ($i == $pconfig['dstmask']) echo "selected"; ?>><?=$i;?></option>
<?php endfor; ?>
</select>

View File

@ -112,15 +112,20 @@ if ($_POST) {
$natiflist = get_configured_interface_with_descr();
foreach ($natiflist as $natif => $natdescr) {
if ($_POST['interface'] == $natif && empty($config['interfaces'][$natif]['ipaddr']))
$input_errors[] = gettext("The interface chosen for the VIP has no ip configured so it cannot be used as a parent for the VIP.");
if ($_POST['interface'] == $natif && (empty($config['interfaces'][$natif]['ipaddr']) && empty($config['interfaces'][$natif]['ipaddrv6'])))
$input_errors[] = gettext("The interface chosen for the VIP has no IPv4 or IPv6 address configured so it cannot be used as a parent for the VIP.");
if ($_POST['subnet'] == get_interface_ip($natif))
$input_errors[] = sprintf(gettext("The %s IP address may not be used in a virtual entry."),$natdescr);
}
if($_POST['subnet_bits'] == "32" and $_POST['type'] == "carp")
$input_errors[] = gettext("The /32 subnet mask is invalid for CARP IPs.");
if(is_ipaddrv4($_POST['subnet'])) {
if($_POST['subnet_bits'] == "32" and $_POST['type'] == "carp")
$input_errors[] = gettext("The /32 subnet mask is invalid for CARP IPs.");
}
if(is_ipaddrv6($_POST['subnet'])) {
if($_POST['subnet_bits'] == "128" and $_POST['type'] == "carp")
$input_errors[] = gettext("The /128 subnet mask is invalid for CARP IPs.");
}
/* check for overlaps with other virtual IP */
foreach ($a_vip as $vipent) {
if (isset($id) && ($a_vip[$id]) && ($a_vip[$id] === $vipent))
@ -148,11 +153,22 @@ if ($_POST) {
if($_POST['password'] == "")
$input_errors[] = gettext("You must specify a CARP password that is shared between the two VHID members.");
$parent_ip = get_interface_ip($_POST['interface']);
$parent_sn = get_interface_subnet($_POST['interface']);
if (!ip_in_subnet($_POST['subnet'], gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn) && !ip_in_interface_alias_subnet($_POST['interface'], $_POST['subnet'])) {
$cannot_find = $_POST['subnet'] . "/" . $_POST['subnet_bits'] ;
$input_errors[] = sprintf(gettext("Sorry, we could not locate an interface with a matching subnet for %s. Please add an IP alias in this subnet on this interface."),$cannot_find);
if(is_ipaddrv4($_POST['subnet'])) {
$parent_ip = get_interface_ip($_POST['interface']);
$parent_sn = get_interface_subnet($_POST['interface']);
if (!ip_in_subnet($_POST['subnet'], gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn) && !ip_in_interface_alias_subnet($_POST['interface'], $_POST['subnet'])) {
$cannot_find = $_POST['subnet'] . "/" . $_POST['subnet_bits'] ;
$input_errors[] = sprintf(gettext("Sorry, we could not locate an interface with a matching subnet for %s. Please add an IP alias in this subnet on this interface."),$cannot_find);
}
}
if(is_ipaddrv6($_POST['subnet'])) {
$parent_ip = get_interface_ipv6($_POST['interface']);
$parent_sn = get_interface_subnetv6($_POST['interface']);
$subnet = gen_subnetv6($parent_ip, $parent_sn);
if (!ip_in_subnet($_POST['subnet'], gen_subnetv6($parent_ip, $parent_sn) . "/" . $parent_sn) && !ip_in_interface_alias_subnet($_POST['interface'], $_POST['subnet'])) {
$cannot_find = $_POST['subnet'] . "/" . $_POST['subnet_bits'] ;
$input_errors[] = sprintf(gettext("Sorry, we could not locate an interface with a matching subnet for %s. Please add an IP alias in this subnet on this interface."),$cannot_find);
}
}
if (substr($_POST['interface'], 0, 3) == "vip")
$input_errors[] = gettext("For this type of vip a carp parent is not allowed.");
@ -448,9 +464,9 @@ function typesel_change() {
</tr>
<tr>
<td><?=gettext("Address:");?>&nbsp;&nbsp;</td>
<td><input name="subnet" type="text" class="formfld unknown" id="subnet" size="20" value="<?=htmlspecialchars($pconfig['subnet']);?>">
<td><input name="subnet" type="text" class="formfld unknown" id="subnet" size="28" value="<?=htmlspecialchars($pconfig['subnet']);?>">
/<select name="subnet_bits" class="formselect" id="select">
<?php for ($i = 32; $i >= 1; $i--): ?>
<?php for ($i = 128; $i >= 1; $i--): ?>
<option value="<?=$i;?>" <?php if (($i == $pconfig['subnet_bits']) || (!isset($pconfig['subnet']) && $i == 32)) echo "selected"; ?>>
<?=$i;?>
</option>
@ -468,9 +484,9 @@ function typesel_change() {
/*
<tr>
<td>Range:&nbsp;&nbsp;</td>
<td><input name="range_from" type="text" class="formfld unknown" id="range_from" size="20" value="<?=htmlspecialchars($pconfig['range']['from']);?>">
<td><input name="range_from" type="text" class="formfld unknown" id="range_from" size="28" value="<?=htmlspecialchars($pconfig['range']['from']);?>">
-
<input name="range_to" type="text" class="formfld unknown" id="range_to" size="20" value="<?=htmlspecialchars($pconfig['range']['to']);?>">
<input name="range_to" type="text" class="formfld unknown" id="range_to" size="28" value="<?=htmlspecialchars($pconfig['range']['to']);?>">
</td>
</tr>
*/

View File

@ -292,7 +292,7 @@ function print_info_box_np($msg, $name="apply",$value="Apply changes") {
if($nifty_background == "")
$nifty_background = "#FFF";
if(stristr($msg, "apply") != false || stristr($msg, "save") != false || stristr($msg, "create") != false) {
if(stristr($msg, gettext("apply")) != false || stristr($msg, gettext("save")) != false || stristr($msg, gettext("create")) != false) {
$savebutton = "<td class='infoboxsave'>";
$savebutton .= "<input name=\"{$name}\" type=\"submit\" class=\"formbtn\" id=\"${name}\" value=\"{$value}\">";
if($_POST['if'])
@ -1092,4 +1092,4 @@ function rule_popup($src,$srcport,$dst,$dstport){
}
}
?>
?>

View File

@ -85,6 +85,7 @@ if (!is_array($config['gateways']['gateway_item']))
$a_gateways = &$config['gateways']['gateway_item'];
$wancfg = &$config['interfaces'][$if];
$old_wancfg = $wancfg;
// Populate page descr if it does not exist.
if ($if == "wan" && !$wancfg['descr'])
$wancfg['descr'] = "WAN";
@ -189,9 +190,17 @@ if (is_array($config['aliases']['alias'])) {
switch($wancfg['ipaddr']) {
case "dhcp":
$pconfig['dhcp6-duid'] = $wancfg['dhcp6-duid'];
if($wancfg['dhcp6-ia-pd-len'] == "")
$wancfg['dhcp6-ia-pd-len'] = "none";
$pconfig['dhcp6-ia-pd-len'] = $wancfg['dhcp6-ia-pd-len'];
$pconfig['type'] = "dhcp";
break;
case "carpdev-dhcp":
$pconfig['dhcp6-duid'] = $wancfg['dhcp6-duid'];
if($wancfg['dhcp6-ia-pd-len'] == "")
$wancfg['dhcp6-ia-pd-len'] = "none";
$pconfig['dhcp6-ia-pd-len'] = $wancfg['dhcp6-ia-pd-len'];
$pconfig['type'] = "carpdev-dhcp";
$pconfig['ipaddr'] = "";
break;
@ -203,15 +212,36 @@ switch($wancfg['ipaddr']) {
break;
default:
if(is_ipaddr($wancfg['ipaddr'])) {
$pconfig['type'] = "static";
$pconfig['type'] = "staticv4";
$pconfig['ipaddr'] = $wancfg['ipaddr'];
$pconfig['subnet'] = $wancfg['subnet'];
$pconfig['gateway'] = $wancfg['gateway'];
if((is_ipaddr($wancfg['ipaddrv6'])) && (is_ipaddr($wancfg['ipaddr']))) {
$pconfig['type'] = "staticv4v6";
}
} else
$pconfig['type'] = "none";
break;
}
switch($wancfg['ipaddrv6']) {
default:
/* if we have dual stack we need a combined type */
if(is_ipaddrv6($wancfg['ipaddrv6'])) {
$pconfig['type'] = "staticv6";
$pconfig['ipaddrv6'] = $wancfg['ipaddrv6'];
$pconfig['subnetv6'] = $wancfg['subnetv6'];
$pconfig['gatewayv6'] = $wancfg['gatewayv6'];
$pconfig['dhcp6-pd-sla-id'] = $wancfg['dhcp6-pd-sla-id'];
if((is_ipaddrv6($wancfg['ipaddrv6'])) && (is_ipaddr($wancfg['ipaddr']))) {
$pconfig['type'] = "staticv4v6";
}
}
break;
}
// print_r($pconfig);
$pconfig['blockpriv'] = isset($wancfg['blockpriv']);
$pconfig['blockbogons'] = isset($wancfg['blockbogons']);
$pconfig['spoofmac'] = $wancfg['spoofmac'];
@ -308,11 +338,18 @@ if ($_POST['apply']) {
if (file_exists("{$g['tmp_path']}/.interfaces.apply")) {
$toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply"));
foreach ($toapplylist as $ifapply) {
if (isset($config['interfaces'][$ifapply]['enable']))
foreach ($toapplylist as $ifapply => $values) {
if (isset($config['interfaces'][$ifapply]['enable'])) {
/* check if any old addresses need purging */
if(is_ipaddrv6($values['ipaddrv6'])) {
$realif = get_real_interface("$ifapply");
log_error("removing old v6 address {$values['ipaddrv6']} on {$realif}");
mwexec("/sbin/ifconfig {$realif} inet6 {$values['ipaddrv6']} -alias");
}
interface_reconfigure($ifapply, true);
else
} else {
interface_bring_down($ifapply);
}
}
}
/* restart snmp so that it binds to correct address */
@ -336,11 +373,16 @@ if ($_POST['apply']) {
interface_sync_wireless_clones($wancfg, false);
write_config("Interface {$_POST['descr']}({$if}) is now disabled.");
mark_subsystem_dirty('interfaces');
if (file_exists("{$g['tmp_path']}/.interfaces.apply"))
if (file_exists("{$g['tmp_path']}/.interfaces.apply")) {
$toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply"));
else
} else {
$toapplylist = array();
$toapplylist[$if] = $if;
}
$toapplylist[$if] = array();
/* we need to be able remove IP aliases for IPv6 */
if(($old_wancfg['ipaddrv6'] != $wancfg['ipaddrv6']) && (is_ipaddrv6($old_wancfg['ipaddrv6']))) {
$toapplylist[$if]['ipaddrv6'] = "{$old_wancfg['ipaddrv6']}";
}
file_put_contents("{$g['tmp_path']}/.interfaces.apply", serialize($toapplylist));
header("Location: interfaces.php?if={$if}");
exit;
@ -374,13 +416,30 @@ if ($_POST['apply']) {
}
}
/* input validation */
if (isset($config['dhcpd']) && isset($config['dhcpd'][$if]['enable']) && $_POST['type'] != "static")
if (isset($config['dhcpd']) && isset($config['dhcpd'][$if]['enable']) && (! preg_match("/^static/", $_POST['type'])))
$input_errors[] = gettext("The DHCP Server is active on this interface and it can be used only with a static IP configuration. Please disable the DHCP Server service on this interface first, then change the interface configuration.");
switch(strtolower($_POST['type'])) {
case "static":
case "staticv4":
$reqdfields = explode(" ", "ipaddr subnet gateway");
$reqdfieldsn = array(gettext("IP address"),gettext("Subnet bit count"),gettext("Gateway"));
$reqdfieldsn = array(gettext("IPv4 address"),gettext("Subnet bit count"),gettext("Gateway"));
do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
break;
case "staticv6":
$reqdfields = explode(" ", "ipaddrv6 subnetv6 gatewayv6 dhcp6-pd-sla-id");
$reqdfieldsn = array(gettext("IPv6 address"),gettext("Subnet bit count"),gettext("Gateway"));
do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
break;
case "staticv4v6":
/* if the saved v6 address is empty we just lookup the link-local address */
/* dhcp-pd will override the LAN address and we will setup a router advertisment in the background */
if(empty($_POST['ipaddrv6'])) {
exec("/sbin/ifconfig {$wancfg['if']} inet6 | awk '/fe80:/ {print $2}' | awk -F% '{print $1}'", $output);
$_POST['ipaddrv6'] = trim($output[0]);
$_POST['subnetv6'] = "64";
}
$reqdfields = explode(" ", "ipaddr subnet gateway ipaddrv6 subnetv6 gatewayv6 dhcp6-pd-sla-id");
$reqdfieldsn = array(gettext("IPv4 address"),gettext("Subnet bit count"),gettext("Gateway"),gettext("IPv6 address"),gettext("Subnet bit count"),gettext("Gateway"));
do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
break;
case "none":
@ -391,6 +450,10 @@ if ($_POST['apply']) {
}
}
case "dhcp":
if (in_array($wancfg['ipaddr'], array("ppp", "pppoe", "pptp", "l2tp")))
$input_errors[] = gettext("You have to reassign the interface to be able to configure as {$_POST['type']}.");
if (in_array($wancfg['ipaddrv6'], array("ppp", "pppoe", "pptp", "l2tp")))
$input_errors[] = gettext("You have to reassign the interface to be able to configure as {$_POST['type']}.");
break;
case "ppp":
$reqdfields = explode(" ", "port phone");
@ -432,20 +495,29 @@ if ($_POST['apply']) {
/* normalize MAC addresses - lowercase and convert Windows-ized hyphenated MACs to colon delimited */
$_POST['spoofmac'] = strtolower(str_replace("-", ":", $_POST['spoofmac']));
if (($_POST['ipaddr'] && !is_ipaddr($_POST['ipaddr'])))
$input_errors[] = gettext("A valid IP address must be specified.");
$input_errors[] = gettext("A valid IPv4 address must be specified.");
if (($_POST['ipaddrv6'] && !is_ipaddr($_POST['ipaddrv6'])))
$input_errors[] = gettext("A valid IPv6 address must be specified.");
if (($_POST['subnet'] && !is_numeric($_POST['subnet'])))
$input_errors[] = gettext("A valid subnet bit count must be specified.");
if (($_POST['subnetv6'] && !is_numeric($_POST['subnetv6'])))
$input_errors[] = gettext("A valid subnet bit count must be specified.");
if (($_POST['alias-address'] && !is_ipaddr($_POST['alias-address'])))
$input_errors[] = gettext("A valid alias IP address must be specified.");
if (($_POST['alias-subnet'] && !is_numeric($_POST['alias-subnet'])))
$input_errors[] = gettext("A valid alias subnet bit count must be specified.");
if ($_POST['gateway'] != "none") {
if (($_POST['gateway'] != "none") || ($_POST['gatewayv6'] != "none")) {
$match = false;
foreach($a_gateways as $gateway) {
if(in_array($_POST['gateway'], $gateway)) {
$match = true;
}
}
foreach($a_gateways as $gateway) {
if(in_array($_POST['gatewayv6'], $gateway)) {
$match = true;
}
}
if(!$match) {
$input_errors[] = gettext("A valid gateway must be specified.");
}
@ -539,9 +611,16 @@ if ($_POST['apply']) {
$ppp = array();
if ($wancfg['ipaddr'] != "ppp")
unset($wancfg['ipaddr']);
if ($wancfg['ipaddrv6'] != "ppp")
unset($wancfg['ipaddrv6']);
unset($wancfg['subnet']);
unset($wancfg['gateway']);
unset($wancfg['subnetv6']);
unset($wancfg['gatewayv6']);
unset($wancfg['dhcphostname']);
unset($wancfg['dhcp6-pd-sla-id']);
unset($wancfg['dhcp6-duid']);
unset($wancfg['dhcp6-ia-pd-len']);
unset($wancfg['pppoe_username']);
unset($wancfg['pppoe_password']);
unset($wancfg['pptp_username']);
@ -552,7 +631,6 @@ if ($_POST['apply']) {
if (isset($wancfg['pppoe']['pppoe-reset-type']))
unset($wancfg['pppoe']['pppoe-reset-type']);
unset($wancfg['local']);
unset($wancfg['subnet']);
unset($wancfg['remote']);
unset($a_ppps[$pppid]['apn']);
unset($a_ppps[$pppid]['phone']);
@ -578,7 +656,7 @@ if ($_POST['apply']) {
}
}
if($skip == false) {
$gateway_item['gateway'] = gettext("dynamic");
$gateway_item['gateway'] = "dynamic";
$gateway_item['descr'] = gettext("Interface") . $if . gettext("dynamic gateway");
$gateway_item['name'] = "GW_" . strtoupper($if);
$gateway_item['interface'] = "{$if}";
@ -588,18 +666,41 @@ if ($_POST['apply']) {
}
switch($_POST['type']) {
case "static":
case "staticv4":
$wancfg['ipaddr'] = $_POST['ipaddr'];
$wancfg['subnet'] = $_POST['subnet'];
if ($_POST['gateway'] != "none") {
$wancfg['gateway'] = $_POST['gateway'];
}
break;
case "staticv6":
$wancfg['ipaddrv6'] = $_POST['ipaddrv6'];
$wancfg['subnetv6'] = $_POST['subnetv6'];
$wancfg['dhcp6-pd-sla-id'] = $_POST['dhcp6-pd-sla-id'];
if ($_POST['gatewayv6'] != "none") {
$wancfg['gatewayv6'] = $_POST['gatewayv6'];
}
break;
case "staticv4v6":
$wancfg['ipaddr'] = $_POST['ipaddr'];
$wancfg['subnet'] = $_POST['subnet'];
if ($_POST['gateway'] != "none") {
$wancfg['gateway'] = $_POST['gateway'];
}
$wancfg['ipaddrv6'] = $_POST['ipaddrv6'];
$wancfg['subnetv6'] = $_POST['subnetv6'];
$wancfg['dhcp6-pd-sla-id'] = $_POST['dhcp6-pd-sla-id'];
if ($_POST['gatewayv6'] != "none") {
$wancfg['gatewayv6'] = $_POST['gatewayv6'];
}
break;
case "dhcp":
$wancfg['ipaddr'] = "dhcp";
$wancfg['dhcphostname'] = $_POST['dhcphostname'];
$wancfg['alias-address'] = $_POST['alias-address'];
$wancfg['alias-subnet'] = $_POST['alias-subnet'];
$wancfg['dhcp6-duid'] = $_POST['dhcp6-duid'];
$wancfg['dhcp6-ia-pd-len'] = $_POST['dhcp6-ia-pd-len'];
$wancfg['dhcp_plus'] = $_POST['dhcp_plus'] == "yes" ? true : false;
if($gateway_item) {
$a_gateways[] = $gateway_item;
@ -610,6 +711,8 @@ if ($_POST['apply']) {
$wancfg['dhcphostname'] = $_POST['dhcphostname'];
$wancfg['alias-address'] = $_POST['alias-address'];
$wancfg['alias-subnet'] = $_POST['alias-subnet'];
$wancfg['dhcp6-duid'] = $_POST['dhcp6-duid'];
$wancfg['dhcp6-ia-pd-len'] = $_POST['dhcp6-ia-pd-len'];
if($gateway_item) {
$a_gateways[] = $gateway_item;
}
@ -727,11 +830,17 @@ if ($_POST['apply']) {
conf_mount_ro();
write_config();
if (file_exists("{$g['tmp_path']}/.interfaces.apply"))
if (file_exists("{$g['tmp_path']}/.interfaces.apply")) {
$toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.interfaces.apply"));
else
} else {
$toapplylist = array();
$toapplylist[$if] = $if;
}
$toapplylist[$if] = array();
/* we need to be able remove IP aliases for IPv6 */
if(($old_wancfg['ipaddrv6'] != $wancfg['ipaddrv6']) && (is_ipaddrv6($old_wancfg['ipaddrv6']))) {
$toapplylist[$if]['ipaddrv6'] = $old_wancfg['ipaddrv6'];
}
file_put_contents("{$g['tmp_path']}/.interfaces.apply", serialize($toapplylist));
mark_subsystem_dirty('interfaces');
@ -926,7 +1035,7 @@ $statusurl = "status_interfaces.php";
$closehead = false;
include("head.inc");
$types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp" => gettext("DHCP"), "ppp" => gettext("PPP"), "pppoe" => gettext("PPPoE"), "pptp" => gettext("PPTP"), "l2tp" => gettext("L2TP") /* , "carpdev-dhcp" => "CarpDev"*/);
$types = array("none" => gettext("None"), "staticv4" => gettext("Static IPv4"), "staticv6" => gettext("Static IPv6"), "staticv4v6" => gettext("Static IPv4 + IPv6"), "dhcp" => gettext("DHCP"), "ppp" => gettext("PPP"), "pppoe" => gettext("PPPoE"), "pptp" => gettext("PPTP"), "l2tp" => gettext("L2TP") /* , "carpdev-dhcp" => "CarpDev"*/);
?>
@ -939,29 +1048,39 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
function updateType(t) {
switch(t) {
case "none": {
$('static','dhcp','pppoe','pptp', 'ppp').invoke('hide');
$('staticv4', 'staticv6', 'dhcp', 'pppoe','pptp', 'ppp').invoke('hide');
break;
}
case "static": {
$('none','dhcp','pppoe','pptp', 'ppp').invoke('hide');
case "staticv4": {
$('none', 'staticv6', 'dhcp', 'pppoe', 'pptp', 'ppp').invoke('hide');
break;
}
case "staticv6": {
$('none', 'staticv4', 'dhcp', 'pppoe','pptp', 'ppp').invoke('hide');
break;
}
case "staticv4v6": {
$('none', 'dhcp', 'pppoe', 'pptp', 'ppp').invoke('hide');
$('staticv4').show();
$('staticv6').show();
break;
}
case "dhcp": {
$('none','static','pppoe','pptp', 'ppp').invoke('hide');
$('none', 'staticv4', 'staticv6', 'pppoe', 'pptp', 'ppp').invoke('hide');
break;
}
case "ppp": {
$('none','static','dhcp','pptp', 'pppoe').invoke('hide');
$('none', 'staticv4', 'staticv6', 'dhcp', 'pptp', 'pppoe').invoke('hide');
country_list();
break;
}
case "pppoe": {
$('none','static','dhcp','pptp', 'ppp').invoke('hide');
$('none', 'staticv4', 'staticv6', 'dhcp', 'pptp', 'ppp').invoke('hide');
break;
}
case "l2tp":
case "pptp": {
$('none','static','dhcp','pppoe', 'ppp').invoke('hide');
$('none', 'staticv4', 'staticv6', 'dhcp', 'pppoe', 'ppp').invoke('hide');
$('pptp').show();
break;
}
@ -1212,14 +1331,14 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
</tr>
<tr style="display:none;" name="none" id="none">
</tr>
<tr style="display:none;" name="static" id="static">
<tr style="display:none;" name="staticv4" id="staticv4">
<td colspan="2" style="padding:0px;">
<table width="100%" border="0" cellpadding="6" cellspacing="0">
<tr>
<td colspan="2" valign="top" class="listtopic"><?=gettext("Static IP configuration"); ?></td>
<td colspan="2" valign="top" class="listtopic"><?=gettext("Static IPv4 configuration"); ?></td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("IP address"); ?></td>
<td width="22%" valign="top" class="vncellreq"><?=gettext("IPv4 address"); ?></td>
<td width="78%" class="vtable">
<input name="ipaddr" type="text" class="formfld unknown" id="ipaddr" size="20" value="<?=htmlspecialchars($pconfig['ipaddr']);?>">
/
@ -1237,14 +1356,14 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Gateway"); ?></td>
<td width="22%" valign="top" class="vncell"><?=gettext("Gateway"); ?></td>
<td width="78%" class="vtable">
<select name="gateway" class="formselect" id="gateway">
<option value="none" selected><?=gettext("None"); ?></option>
<?php
if(count($a_gateways) > 0) {
foreach ($a_gateways as $gateway) {
if($gateway['interface'] == $if) {
if(($gateway['interface'] == $if) && (is_ipaddrv4($gateway['gateway']))) {
?>
<option value="<?=$gateway['name'];?>" <?php if ($gateway['name'] == $pconfig['gateway']) echo "selected"; ?>>
<?=htmlspecialchars($gateway['name']) . " - " . htmlspecialchars($gateway['gateway']);?>
@ -1254,7 +1373,8 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
}
}
?>
</select> -or- <a OnClick="show_add_gateway();" href="#"><?=gettext("add a new one."); ?></a>
</select>
- or <strong><a OnClick="show_add_gateway();" href="#"><?=gettext("add a new one."); ?></a></strong>
<br/>
<div id='addgwbox'>
<?=gettext("If this interface is an Internet connection, select an existing Gateway from the list or add one using the link above"); ?>
@ -1285,7 +1405,7 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
<td align="right"><font color="white"><?=gettext("Gateway Name:"); ?></td><td><input id="name" name="name" value="<?=$wancfg['descr'] . "GW"?>"></td>
</tr>
<tr>
<td align="right"><font color="white"><?=gettext("Gateway IP:"); ?></td><td><input id="gatewayip" name="gatewayip"></td>
<td align="right"><font color="white"><?=gettext("Gateway IPv4:"); ?></td><td><input id="gatewayip" name="gatewayip"></td>
</tr>
<tr>
<td align="right"><font color="white"><?=gettext("Description:"); ?></td><td><input id="gatewaydescr" name="gatewaydescr"></td>
@ -1296,7 +1416,6 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
<td>
<center>
<div id='savebuttondiv'>
<input type="hidden" name="addrtype" id="addrtype" value="IPv4" />
<input id="gwsave" type="Button" value="<?=gettext("Save Gateway"); ?>" onClick='hide_add_gatewaysave();'>
<input id="gwcancel" type="Button" value="<?=gettext("Cancel"); ?>" onClick='hide_add_gateway();'>
</div>
@ -1315,6 +1434,133 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
</table>
</td>
</tr>
<tr style="display:none;" name="staticv6" id="staticv6">
<td colspan="2" style="padding:0px;">
<table width="100%" border="0" cellpadding="6" cellspacing="0">
<tr>
<td colspan="2" valign="top">&nbsp;</td>
</tr>
<tr>
<td colspan="2" valign="top" class="listtopic"><?=gettext("Static IPv6 configuration"); ?></td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("IPv6 address"); ?></td>
<td width="78%" class="vtable">
<input name="ipaddrv6" type="text" class="formfld unknown" id="ipaddrv6" size="28" value="<?=htmlspecialchars($pconfig['ipaddrv6']);?>">
/
<select name="subnetv6" class="formselect" id="subnetv6">
<?php
for ($i = 128; $i > 0; $i--) {
if($i <> 127) {
echo "<option value=\"{$i}\" ";
if ($i == $pconfig['subnetv6']) echo "selected";
echo ">" . $i . "</option>";
}
}
?>
</select>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("DHCPv6 Prefix Delegation ID"); ?></td>
<td width="78%" class="vtable">
<select name="dhcp6-pd-sla-id" class="formselect" id="dhcp6-pd-sla-id">
<option value="none" selected><?=gettext("None"); ?></option>
<?php
// FIXME: Needs to calculate from prefix length from dhcp-pd
// Needs to check if the ID is not used on another interface
for ($i = 16; $i > 0; $i--) {
if($i <> 15) {
echo "<option value=\"{$i}\" ";
if ($i == $pconfig['dhcp6-pd-sla-id']) echo "selected";
echo ">" . $i . "</option>";
}
}
?>
</select>
<?=gettext("This ID sets the delegated DHCP-PD prefix number which will be used to setup the interface.");?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Gateway IPv6"); ?></td>
<td width="78%" class="vtable">
<select name="gatewayv6" class="formselect" id="gatewayv6">
<option value="none" selected><?=gettext("None"); ?></option>
<?php
if(count($a_gateways) > 0) {
foreach ($a_gateways as $gateway) {
if(($gateway['interface'] == $if) && (is_ipaddrv6($gateway['gateway']))) {
?>
<option value="<?=$gateway['name'];?>" <?php if ($gateway['name'] == $pconfig['gatewayv6']) echo "selected"; ?>>
<?=htmlspecialchars($gateway['name']) . " - " . htmlspecialchars($gateway['gateway']);?>
</option>
<?php
}
}
}
?>
</select>
- or <strong><a OnClick="show_add_gateway_v6();" href="#"><?=gettext("add a new one."); ?></a></strong>
<br/>
<div id='addgwboxv6'>
<?=gettext("If this interface is an Internet connection, select an existing Gateway from the list or add a new one using the link above"); ?>
</div>
<div id='noteboxv6'>
</div>
<div id="statusv6">
</div>
<div style="display:none" id="addgatewayv6" name="addgatewayv6">
<p>
<table border="1" style="background:#990000; border-style: none none none none; width:225px;">
<tr>
<td>
<table bgcolor="#990000" cellpadding="1" cellspacing="1">
<tr><td>&nbsp;</td>
<tr>
<td colspan="2"><center><b><font color="white"><?=gettext("Add new v6 gateway:"); ?></font></b></center></td>
</tr>
<tr><td>&nbsp;</td>
<?php
if($if == "wan" || $if == "WAN")
$checked = " CHECKED";
?>
<tr>
<td width="45%" align="right"><font color="white"><?=gettext("Default v6 gateway:"); ?></td><td><input type="checkbox" id="defaultgwv6" name="defaultgwv6"<?=$checked?>></td>
</tr>
<tr>
<td align="right"><font color="white"><?=gettext("Gateway Name IPv6:"); ?></td><td><input id="namev6" name="namev6" value="<?=$wancfg['descr'] . "GWv6"?>"></td>
</tr>
<tr>
<td align="right"><font color="white"><?=gettext("Gateway IPv6:"); ?></td><td><input id="gatewayipv6" name="gatewayipv6"></td>
</tr>
<tr>
<td align="right"><font color="white"><?=gettext("Description:"); ?></td><td><input id="gatewaydescrv6" name="gatewaydescrv6"></td>
</tr>
<tr><td>&nbsp;</td>
<tr>
<td>&nbsp;</td>
<td>
<center>
<div id='savebuttondivv6'>
<input id="gwsavev6" type="Button" value="<?=gettext("Save Gateway"); ?>" onClick='hide_add_gatewaysave_v6();'>
<input id="gwcancelv6" type="Button" value="<?=gettext("Cancel"); ?>" onClick='hide_add_gateway_v6();'>
</div>
</center>
</td>
</tr>
<tr><td>&nbsp;</td></tr>
</table>
</td>
</tr>
</table>
<p/>
</div>
</td>
</tr>
</table>
</td>
</tr>
<tr style="display:none;" name="dhcp" id="dhcp">
<td colspan="2" style="padding: 0px;">
<table width="100%" border="0" cellpadding="6" cellspacing="0">
@ -1343,7 +1589,7 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Alias IP address"); ?></td>
<td width="22%" valign="top" class="vncell"><?=gettext("Alias IPv4 address"); ?></td>
<td width="78%" class="vtable">
<input name="alias-address" type="text" class="formfld unknown" id="alias-address" size="20" value="<?=htmlspecialchars($pconfig['alias-address']);?>">
<select name="alias-subnet" class="formselect" id="alias-subnet">
@ -1357,10 +1603,42 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
}
?>
</select>
<?=gettext("The value in this field is used as a fixed alias IP address by the " .
<?=gettext("The value in this field is used as a fixed alias IPv4 address by the " .
"DHCP client."); ?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("DHCPv6 Unique Identifier (DUID)"); ?></td>
<td width="78%" class="vtable">
<input name="dhcp6-duid" type="text" class="formfld unknown" id="dhcp6-duid" size="40" value="<?=htmlspecialchars($pconfig['dhcp6-duid']);?>">
<br>
<?=gettext("The value in this field is sent as the DHCPv6 client identifier " .
"when requesting a DHCPv6 lease."); ?><br />
<?php if(is_readable("/var/db/dhcp6c_duid")) {
// $current_duid = file_get_contents("/var/db/dhcp6c_duid");
}
echo gettext("The current DUID is: '") . $current_duid ."'";
?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("DHCPv6 Prefix Delegation size"); ?></td>
<td width="78%" class="vtable">
<select name="dhcp6-ia-pd-len" class="formselect" id="dhcp6-ia-pd-len">
<?php
$sizes = array("none" => "None", 16 => "48", 12 => "52", 8 => "56", 4 => "60", 2 => "62", 1 => "63", 0 => "64");
foreach($sizes as $bits => $length) {
echo "<option value=\"{$bits}\" ";
if (is_numeric($pconfig['dhcp6-ia-pd-len']) && ($bits == $pconfig['dhcp6-ia-pd-len'])) echo "selected";
echo ">" . $length . "</option>";
}
?>
</select>
<br>
<?=gettext("The value in this field is the delegated prefix length provided by the DHCPv6 server. Normally specified by the ISP."); ?>
</td>
</tr>
</table>
</td>
@ -2145,6 +2423,8 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
<script type="text/javascript">
var gatewayip;
var name;
var gatewayipv6;
var namev6;
function show_add_gateway() {
document.getElementById("addgateway").style.display = '';
document.getElementById("addgwbox").style.display = 'none';
@ -2155,6 +2435,16 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
document.getElementById("gwcancel").style.display = '';
$('notebox').innerHTML="";
}
function show_add_gateway_v6() {
document.getElementById("addgatewayv6").style.display = '';
document.getElementById("addgwboxv6").style.display = 'none';
document.getElementById("gatewayv6").style.display = 'none';
document.getElementById("save").style.display = 'none';
document.getElementById("cancel").style.display = 'none';
document.getElementById("gwsave").style.display = '';
document.getElementById("gwcancel").style.display = '';
$('noteboxv6').innerHTML="";
}
function hide_add_gateway() {
document.getElementById("addgateway").style.display = 'none';
document.getElementById("addgwbox").style.display = '';
@ -2164,6 +2454,15 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
document.getElementById("gwsave").style.display = '';
document.getElementById("gwcancel").style.display = '';
}
function hide_add_gateway_v6() {
document.getElementById("addgatewayv6").style.display = 'none';
document.getElementById("addgwboxv6").style.display = '';
document.getElementById("gatewayv6").style.display = '';
document.getElementById("save").style.display = '';
document.getElementById("cancel").style.display = '';
document.getElementById("gwsave").style.display = '';
document.getElementById("gwcancel").style.display = '';
}
function hide_add_gatewaysave() {
document.getElementById("addgateway").style.display = 'none';
$('status').innerHTML = '<img src="/themes/metallic/images/misc/loader.gif"> One moment please...';
@ -2171,10 +2470,9 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
name = $('name').getValue();
var descr = $('gatewaydescr').getValue();
gatewayip = $('gatewayip').getValue();
addrtype = $('addrtype').getValue();
var defaultgw = $('defaultgw').getValue();
var url = "system_gateways_edit.php";
var pars = 'isAjax=true&defaultgw=' + escape(defaultgw) + '&interface=' + escape(iface) + '&name=' + escape(name) + '&descr=' + escape(descr) + '&gateway=' + escape(gatewayip) + '&type=' + escape(addrtype);
var pars = 'isAjax=true&defaultgw=' + escape(defaultgw) + '&interface=' + escape(iface) + '&name=' + escape(name) + '&descr=' + escape(descr) + '&gateway=' + escape(gatewayip);
var myAjax = new Ajax.Request(
url,
{
@ -2184,6 +2482,25 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
onComplete: save_callback
});
}
function hide_add_gatewaysave_v6() {
document.getElementById("addgatewayv6").style.display = 'none';
$('statusv6').innerHTML = '<img src="/themes/metallic/images/misc/loader.gif"> One moment please...';
var iface = $F('if');
name = $('namev6').getValue();
var descr = $('gatewaydescrv6').getValue();
gatewayip = $('gatewayipv6').getValue();
var defaultgw = $('defaultgwv6').getValue();
var url_v6 = "system_gateways_edit.php";
var pars_v6 = 'isAjax=true&defaultgw=' + escape(defaultgw) + '&interface=' + escape(iface) + '&name=' + escape(name) + '&descr=' + escape(descr) + '&gateway=' + escape(gatewayip);
var myAjax_v6 = new Ajax.Request(
url_v6,
{
method: 'post',
parameters: pars_v6,
onFailure: report_failure_v6,
onComplete: save_callback_v6
});
}
function addOption(selectbox,text,value)
{
var optn = document.createElement("OPTION");
@ -2193,17 +2510,31 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
selectbox.selectedIndex = (selectbox.options.length-1);
$('notebox').innerHTML="<p/><strong><?=gettext("NOTE:"); ?></strong> <?=gettext("You can manage Gateways"); ?> <a target='_new' href='system_gateways.php'><?=gettext("here"); ?></a>.";
}
function addOption_v6(selectbox,text,value)
{
var optn = document.createElement("OPTION");
optn.text = text;
optn.value = value;
selectbox.options.add(optn);
selectbox.selectedIndex = (selectbox.options.length-1);
$('noteboxv6').innerHTML="<p/><strong><?=gettext("NOTE:"); ?></strong> <?=gettext("You can manage Gateways"); ?> <a target='_new' href='system_gateways.php'><?=gettext("here"); ?></a>.";
}
function report_failure() {
alert("Sorry, we could not create your gateway at this time.");
alert("Sorry, we could not create your IPv4 gateway at this time.");
hide_add_gateway();
}
function report_failure_v6() {
alert("Sorry, we could not create your IPv6 gateway at this time.");
hide_add_gateway_v6();
}
function save_callback(transport) {
var response = transport.responseText;
if(response) {
document.getElementById("addgateway").style.display = 'none';
hide_add_gateway();
$('status').innerHTML = '';
addOption($('gateway'), name, name);
var gwtext = escape(name) + " - " + gatewayip;
addOption($('gateway'), gwtext, name);
// Auto submit form?
//document.iform.submit();
//$('status').innerHTML = '<img src="/themes/metallic/images/misc/loader.gif">';
@ -2216,6 +2547,21 @@ $types = array("none" => gettext("None"), "static" => gettext("Static"), "dhcp"
aodiv = document.getElementById('showmediaadv');
aodiv.style.display = "block";
}
function save_callback_v6(transport) {
var response_v6 = transport.responseText;
if(response_v6) {
document.getElementById("addgatewayv6").style.display = 'none';
hide_add_gateway_v6();
$('statusv6').innerHTML = '';
var gwtext_v6 = escape(name) + " - " + gatewayip;
addOption_v6($('gatewayv6'), gwtext_v6, name);
// Auto submit form?
//document.iform.submit();
//$('statusv6').innerHTML = '<img src="/themes/metallic/images/misc/loader.gif">';
} else {
report_failure_v6();
}
}
<?php
echo "show_allcfg(document.iform.enable);";
echo "updateType('{$pconfig['type']}');\n";

View File

@ -82,8 +82,9 @@ if ($_POST) {
if (isset($id) && ($a_gifs[$id]) && ($a_gifs[$id] === $gif))
continue;
if (($gif['if'] == $_POST['if']) && ($gif['tunnel-remote-net'] == $_POST['tunnel-remote-net'])) {
$input_errors[] = sprintf(gettext("A gif with the network %s is already defined."), $gif['remote-network']);
/* FIXME: needs to perform proper subnet checks in the feature */
if (($gif['if'] == $_POST['if']) && ($gif['tunnel-remote-addr'] == $_POST['tunnel-remote-addr'])) {
$input_errors[] = sprintf(gettext("A gif with the network %s is already defined."), $gif['tunnel-remote-addr']);
break;
}
}
@ -157,24 +158,24 @@ include("head.inc");
<tr>
<td valign="top" class="vncellreq"><?=gettext("gif remote address"); ?></td>
<td class="vtable">
<input name="remote-addr" type="text" class="formfld unknown" id="remote-addr" size="16" value="<?=htmlspecialchars($pconfig['remote-addr']);?>">
<input name="remote-addr" type="text" class="formfld unknown" id="remote-addr" size="24" value="<?=htmlspecialchars($pconfig['remote-addr']);?>">
<br>
<span class="vexpl"><?=gettext("Peer address where encapsulated gif packets will be sent. "); ?></span></td>
</tr>
<tr>
<td valign="top" class="vncellreq"><?=gettext("gif tunnel local address"); ?></td>
<td class="vtable">
<input name="tunnel-local-addr" type="text" class="formfld unknown" id="tunnel-local-addr" size="16" value="<?=htmlspecialchars($pconfig['tunnel-local-addr']);?>">
<input name="tunnel-local-addr" type="text" class="formfld unknown" id="tunnel-local-addr" size="24" value="<?=htmlspecialchars($pconfig['tunnel-local-addr']);?>">
<br>
<span class="vexpl"><?=gettext("Local gif tunnel endpoint"); ?></span></td>
</tr>
<tr>
<td valign="top" class="vncellreq"><?=gettext("gif tunnel remote address "); ?></td>
<td class="vtable">
<input name="tunnel-remote-addr" type="text" class="formfld unknown" id="tunnel-remote-addr" size="16" value="<?=htmlspecialchars($pconfig['tunnel-remote-addr']);?>">
<input name="tunnel-remote-addr" type="text" class="formfld unknown" id="tunnel-remote-addr" size="24" value="<?=htmlspecialchars($pconfig['tunnel-remote-addr']);?>">
<select name="tunnel-remote-net" class="formselect" id="tunnel-remote-net">
<?php
for ($i = 32; $i > 0; $i--) {
for ($i = 128; $i > 0; $i--) {
if($i <> 31) {
echo "<option value=\"{$i}\" ";
if ($i == $pconfig['tunnel-remote-net']) echo "selected";
@ -184,7 +185,7 @@ include("head.inc");
?>
</select>
<br/>
<span class="vexpl"><?=gettext("Remote gif address endpoint. The subnet part is used for the determinig the network that is tunneled."); ?></span></td>
<span class="vexpl"><?=gettext("Remote gif address endpoint. The subnet part is used for determining the network that is tunnelled."); ?></span></td>
</tr>
<tr>
<td valign="top" class="vncell"><?=gettext("Route caching "); ?></td>

View File

@ -31,9 +31,19 @@ var addRowTo = (function() {
} else if(rowtype[i] == 'password') {
td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><input type='password' size='" + rowsize[i] + "' class='formfld pwd' name='" + rowname[i] + totalrows + "' id='" + rowname[i] + totalrows + "'></input> ";
} else if(rowtype[i] == 'select') {
td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><select size='1' name='" + rowname[i] + totalrows + "'><option value=\"32\" selected>32</option><option value=\"31\" >31</option><option value=\"30\" >30</option><option value=\"29\" >29</option><option value=\"28\" >28</option><option value=\"27\" >27</option><option value=\"26\" >26</option><option value=\"25\" >25</option><option value=\"24\" >24</option><option value=\"23\" >23</option><option value=\"22\" >22</option><option value=\"21\" >21</option><option value=\"20\" >20</option><option value=\"19\" >19</option><option value=\"18\" >18</option><option value=\"17\" >17</option><option value=\"16\" >16</option><option value=\"15\" >15</option><option value=\"14\" >14</option><option value=\"13\" >13</option><option value=\"12\" >12</option><option value=\"11\" >11</option><option value=\"10\" >10</option><option value=\"9\" >9</option><option value=\"8\" >8</option><option value=\"7\" >7</option><option value=\"6\" >6</option><option value=\"5\" >5</option><option value=\"4\" >4</option><option value=\"3\" >3</option><option value=\"2\" >2</option><option value=\"1\" >1</option></select> ";
var cidr;
var str;
for (cidr = 128; cidr>= 1; cidr--) {
str=str + "<option value=\"" + cidr + "\" >" + cidr + "</option>";
}
td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><select size='1' name='" + rowname[i] + totalrows + "'>" + str + "</select> ";
} else if(rowtype[i] == 'select_source') {
td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><select size='1' name='" + rowname[i] + totalrows + "'><option value=\"32\" selected>32</option><option value=\"31\" >31</option><option value=\"30\" >30</option><option value=\"29\" >29</option><option value=\"28\" >28</option><option value=\"27\" >27</option><option value=\"26\" >26</option><option value=\"25\" >25</option><option value=\"24\" >24</option><option value=\"23\" >23</option><option value=\"22\" >22</option><option value=\"21\" >21</option><option value=\"20\" >20</option><option value=\"19\" >19</option><option value=\"18\" >18</option><option value=\"17\" >17</option><option value=\"16\" >16</option><option value=\"15\" >15</option><option value=\"14\" >14</option><option value=\"13\" >13</option><option value=\"12\" >12</option><option value=\"11\" >11</option><option value=\"10\" >10</option><option value=\"9\" >9</option><option value=\"8\" >8</option><option value=\"7\" >7</option><option value=\"6\" >6</option><option value=\"5\" >5</option><option value=\"4\" >4</option><option value=\"3\" >3</option><option value=\"2\" >2</option><option value=\"1\" >1</option></select> ";
var cidr;
var str;
for (cidr = 128; cidr>= 1; cidr--) {
str=str + "<option value=\"" + cidr + "\" >" + cidr + "</option>";
}
td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><select size='1' name='" + rowname[i] + totalrows + "'>" + str + "</select> ";
} else {
td.innerHTML="<INPUT type='hidden' value='" + totalrows +"' name='" + rowname[i] + "_row-" + totalrows + "'></input><input type='checkbox' name='" + rowname[i] + totalrows + "'></input> ";
}

View File

@ -116,8 +116,8 @@ $iflist = get_configured_interface_with_descr();
if (!$if || !isset($iflist[$if])) {
foreach ($iflist as $ifent => $ifname) {
$oc = $config['interfaces'][$ifent];
if ((is_array($config['dhcpd'][$ifent]) && !isset($config['dhcpd'][$ifent]['enable']) && (!is_ipaddr($oc['ipaddr']))) ||
(!is_array($config['dhcpd'][$ifent]) && (!is_ipaddr($oc['ipaddr']))))
if ((is_array($config['dhcpd'][$ifent]) && !isset($config['dhcpd'][$ifent]['enable']) && (!is_ipaddrv4($oc['ipaddr']))) ||
(!is_array($config['dhcpd'][$ifent]) && (!is_ipaddrv4($oc['ipaddr']))))
continue;
$if = $ifent;
break;
@ -208,22 +208,21 @@ if ($_POST) {
do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
if (($_POST['range_from'] && !is_ipaddr($_POST['range_from'])))
if (($_POST['range_from'] && !is_ipaddrv4($_POST['range_from'])))
$input_errors[] = gettext("A valid range must be specified.");
if (($_POST['range_to'] && !is_ipaddr($_POST['range_to'])))
if (($_POST['range_to'] && !is_ipaddrv4($_POST['range_to'])))
$input_errors[] = gettext("A valid range must be specified.");
if (($_POST['gateway'] && !is_ipaddr($_POST['gateway'])))
if (($_POST['gateway'] && !is_ipaddrv4($_POST['gateway'])))
$input_errors[] = gettext("A valid IP address must be specified for the gateway.");
if (($_POST['wins1'] && !is_ipaddr($_POST['wins1'])) || ($_POST['wins2'] && !is_ipaddr($_POST['wins2'])))
if (($_POST['wins1'] && !is_ipaddrv4($_POST['wins1'])) || ($_POST['wins2'] && !is_ipaddrv4($_POST['wins2'])))
$input_errors[] = gettext("A valid IP address must be specified for the primary/secondary WINS servers.");
$parent_ip = get_interface_ip($_POST['if']);
if (is_ipaddr($parent_ip)) {
if (is_ipaddrv4($parent_ip) && $_POST['gateway']) {
$parent_sn = get_interface_subnet($_POST['if']);
if(!ip_in_subnet($_POST['gateway'], gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn) && !ip_in_interface_alias_subnet($_POST['if'], $_POST['gateway'])) {
if(!ip_in_subnet($_POST['gateway'], gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn) && !ip_in_interface_alias_subnet($_POST['if'], $_POST['gateway']))
$input_errors[] = sprintf(gettext("The gateway address %s does not lie within the chosen interface's subnet."), $_POST['gateway']);
}
}
if (($_POST['dns1'] && !is_ipaddr($_POST['dns1'])) || ($_POST['dns2'] && !is_ipaddr($_POST['dns2'])))
if (($_POST['dns1'] && !is_ipaddrv4($_POST['dns1'])) || ($_POST['dns2'] && !is_ipaddrv4($_POST['dns2'])))
$input_errors[] = gettext("A valid IP address must be specified for the primary/secondary DNS servers.");
if ($_POST['deftime'] && (!is_numeric($_POST['deftime']) || ($_POST['deftime'] < 60)))
@ -232,13 +231,13 @@ if ($_POST) {
$input_errors[] = gettext("The maximum lease time must be at least 60 seconds and higher than the default lease time.");
if (($_POST['ddnsdomain'] && !is_domain($_POST['ddnsdomain'])))
$input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration.");
if (($_POST['ntp1'] && !is_ipaddr($_POST['ntp1'])) || ($_POST['ntp2'] && !is_ipaddr($_POST['ntp2'])))
if (($_POST['ntp1'] && !is_ipaddrv4($_POST['ntp1'])) || ($_POST['ntp2'] && !is_ipaddrv4($_POST['ntp2'])))
$input_errors[] = gettext("A valid IP address must be specified for the primary/secondary NTP servers.");
if (($_POST['domain'] && !is_domain($_POST['domain'])))
$input_errors[] = gettext("A valid domain name must be specified for the DNS domain.");
if ($_POST['tftp'] && !is_ipaddr($_POST['tftp']) && !is_domain($_POST['tftp']) && !is_URL($_POST['tftp']))
if ($_POST['tftp'] && !is_ipaddrv4($_POST['tftp']) && !is_domain($_POST['tftp']) && !is_URL($_POST['tftp']))
$input_errors[] = gettext("A valid IP address or hostname must be specified for the TFTP server.");
if (($_POST['nextserver'] && !is_ipaddr($_POST['nextserver'])))
if (($_POST['nextserver'] && !is_ipaddrv4($_POST['nextserver'])))
$input_errors[] = gettext("A valid IP address must be specified for the network boot server.");
if(gen_subnet($ifcfgip, $ifcfgsn) == $_POST['range_from'])
@ -283,7 +282,7 @@ if ($_POST) {
$input_errors[] = gettext("Signed 16-bit integer type must be a number in the range -32768 to 32767.");
else if ( $numberoption['type'] == 'signed integer 32' && (!is_numeric($numberoption['value']) || $numberoption['value'] < -2147483648 || $numberoption['value'] > 2147483647) )
$input_errors[] = gettext("Signed 32-bit integer type must be a number in the range -2147483648 to 2147483647.");
else if ( $numberoption['type'] == 'ip-address' && !is_ipaddr($numberoption['value']) && !is_hostname($numberoption['value']) )
else if ( $numberoption['type'] == 'ip-address' && !is_ipaddrv4($numberoption['value']) && !is_hostname($numberoption['value']) )
$input_errors[] = gettext("IP address or host type must be an IP address or host name.");
}
}
@ -545,8 +544,8 @@ include("head.inc");
$i = 0;
foreach ($iflist as $ifent => $ifname) {
$oc = $config['interfaces'][$ifent];
if ((is_array($config['dhcpd'][$ifent]) && !isset($config['dhcpd'][$ifent]['enable']) && (!is_ipaddr($oc['ipaddr']))) ||
(!is_array($config['dhcpd'][$ifent]) && (!is_ipaddr($oc['ipaddr']))))
if ((is_array($config['dhcpd'][$ifent]) && !isset($config['dhcpd'][$ifent]['enable']) && (!is_ipaddrv4($oc['ipaddr']))) ||
(!is_array($config['dhcpd'][$ifent]) && (!is_ipaddrv4($oc['ipaddr']))))
continue;
if ($ifent == $if)
$active = true;

View File

@ -180,7 +180,7 @@ function enable_change(enable_over) {
<td width="78%" class="vtable">
<input name="server" type="text" class="formfld unknown" id="server" size="20" value="<?=htmlspecialchars($pconfig['server']);?>">
<br>
<?=gettext("This is the IP address of the server to which the DHCP packet is relayed. You can enter multiple ip address server entries separated by commas. Select \"Proxy requests to DHCP server on WAN subnet\" to relay DHCP packets to the server that was used on the WAN interface.");?>
<?=gettext("This is the IP address of the server to which DHCP requests are relayed. You can enter multiple server IP addresses, separated by commas. Select \"Proxy requests to DHCP server on WAN subnet\" to relay DHCP packets to the server that was used on the WAN interface.");?>
</td>
</tr>
<tr>

View File

@ -0,0 +1,866 @@
<?php
/* $Id$ */
/*
services_dhcpv6.php
parts of m0n0wall (http://m0n0.ch/wall)
Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
All rights reserved.
part of pfSense (http://www.pfsense.org)
Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
/*
pfSense_BUILDER_BINARIES: /bin/rm
pfSense_MODULE: interfaces
*/
##|+PRIV
##|*IDENT=page-services-dhcpv6server
##|*NAME=Services: DHCPv6 server page
##|*DESCR=Allow access to the 'Services: DHCPv6 server' page.
##|*MATCH=services_dhcpv6.php*
##|-PRIV
require("guiconfig.inc");
if(!$g['services_dhcp_server_enable']) {
Header("Location: /");
exit;
}
/* Fix failover DHCP problem
* http://article.gmane.org/gmane.comp.security.firewalls.pfsense.support/18749
*/
ini_set("memory_limit","64M");
$if = $_GET['if'];
if ($_POST['if'])
$if = $_POST['if'];
/* if OLSRD is enabled, allow WAN to house DHCP. */
if($config['installedpackages']['olsrd']) {
foreach($config['installedpackages']['olsrd']['config'] as $olsrd) {
if($olsrd['enable']) {
$is_olsr_enabled = true;
break;
}
}
}
if (!$_GET['if'])
$savemsg = "<b>" . gettext("The DHCPv6 Server can only be enabled on interfaces configured with static IP addresses") . ".<p>" . gettext("Only interfaces configured with a static IP will be shown") . ".</p></b>";
$iflist = get_configured_interface_with_descr();
/* set the starting interface */
if (!$if || !isset($iflist[$if])) {
foreach ($iflist as $ifent => $ifname) {
$oc = $config['interfaces'][$ifent];
if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && (!is_ipaddrv6($oc['ipaddrv6']))) ||
(!is_array($config['dhcpdv6'][$ifent]) && (!is_ipaddrv6($oc['ipaddrv6']))))
continue;
$if = $ifent;
break;
}
}
if (is_array($config['dhcpdv6'][$if])){
if (is_array($config['dhcpdv6'][$if]['range'])) {
$pconfig['range_from'] = $config['dhcpdv6'][$if]['range']['from'];
$pconfig['range_to'] = $config['dhcpdv6'][$if]['range']['to'];
}
if (is_array($config['dhcpdv6'][$if]['prefixrange'])) {
$pconfig['prefixrange_from'] = $config['dhcpdv6'][$if]['prefixrange']['from'];
$pconfig['prefixrange_to'] = $config['dhcpdv6'][$if]['prefixrange']['to'];
$pconfig['prefixrange_length'] = $config['dhcpdv6'][$if]['prefixrange']['prefixlength'];
}
$pconfig['mode'] = $config['dhcpdv6'][$if]['mode'];
$pconfig['deftime'] = $config['dhcpdv6'][$if]['defaultleasetime'];
$pconfig['maxtime'] = $config['dhcpdv6'][$if]['maxleasetime'];
$pconfig['gateway'] = $config['dhcpdv6'][$if]['gateway'];
$pconfig['domain'] = $config['dhcpdv6'][$if]['domain'];
$pconfig['domainsearchlist'] = $config['dhcpdv6'][$if]['domainsearchlist'];
list($pconfig['wins1'],$pconfig['wins2']) = $config['dhcpdv6'][$if]['winsserver'];
list($pconfig['dns1'],$pconfig['dns2']) = $config['dhcpdv6'][$if]['dnsserver'];
$pconfig['enable'] = isset($config['dhcpdv6'][$if]['enable']);
$pconfig['denyunknown'] = isset($config['dhcpdv6'][$if]['denyunknown']);
$pconfig['ddnsdomain'] = $config['dhcpdv6'][$if]['ddnsdomain'];
$pconfig['ddnsupdate'] = isset($config['dhcpdv6'][$if]['ddnsupdate']);
list($pconfig['ntp1'],$pconfig['ntp2']) = $config['dhcpdv6'][$if]['ntpserver'];
$pconfig['tftp'] = $config['dhcpdv6'][$if]['tftp'];
$pconfig['ldap'] = $config['dhcpdv6'][$if]['ldap'];
$pconfig['netboot'] = isset($config['dhcpdv6'][$if]['netboot']);
$pconfig['nextserver'] = $config['dhcpdv6'][$if]['next-server'];
$pconfig['filename'] = $config['dhcpdv6'][$if]['filename'];
$pconfig['rootpath'] = $config['dhcpdv6'][$if]['rootpath'];
$pconfig['failover_peerip'] = $config['dhcpdv6'][$if]['failover_peerip'];
$pconfig['netmask'] = $config['dhcpdv6'][$if]['netmask'];
$pconfig['numberoptions'] = $config['dhcpdv6'][$if]['numberoptions'];
if (!is_array($config['dhcpdv6'][$if]['staticmap']))
$config['dhcpdv6'][$if]['staticmap'] = array();
$a_maps = &$config['dhcpdv6'][$if]['staticmap'];
}
$ifcfgip = get_interface_ipv6($if);
$ifcfgsn = get_interface_subnetv6($if);
/* set the enabled flag which will tell us if DHCP relay is enabled
* on any interface. We will use this to disable DHCP server since
* the two are not compatible with each other.
*/
$dhcrelay_enabled = false;
$dhcrelaycfg = $config['dhcrelay'];
if(is_array($dhcrelaycfg)) {
foreach ($dhcrelaycfg as $dhcrelayif => $dhcrelayifconf) {
if (isset($dhcrelayifconf['enable']) && isset($iflist[$dhcrelayif]) &&
(!link_interface_to_bridge($dhcrelayif)))
$dhcrelay_enabled = true;
}
}
/* FIXME needs v6 code, use in subnet v6? */
function is_inrange($test, $start, $end) {
if ( (ip2ulong($test) < ip2ulong($end)) && (ip2ulong($test) > ip2ulong($start)) )
return true;
else
return false;
}
$advertise_modes = array("disabled" => "Disabled", "unmanaged" => "Unmanaged", "managed" => "Managed", "assist" => "Assisted");
if ($_POST) {
unset($input_errors);
$pconfig = $_POST;
$numberoptions = array();
for($x=0; $x<99; $x++) {
if(isset($_POST["number{$x}"]) && ctype_digit($_POST["number{$x}"])) {
$numbervalue = array();
$numbervalue['number'] = htmlspecialchars($_POST["number{$x}"]);
$numbervalue['value'] = htmlspecialchars($_POST["value{$x}"]);
$numberoptions['item'][] = $numbervalue;
}
}
// Reload the new pconfig variable that the forum uses.
$pconfig['numberoptions'] = $numberoptions;
/* input validation */
if ($_POST['enable']) {
$reqdfields = explode(" ", "range_from range_to");
$reqdfieldsn = array(gettext("Range begin"),gettext("Range end"));
do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
if (($_POST['prefixrange_from'] && !is_ipaddrv6($_POST['prefixrange_from'])))
$input_errors[] = gettext("A valid range must be specified.");
if (($_POST['prefixrange_to'] && !is_ipaddrv6($_POST['prefixrange_to'])))
$input_errors[] = gettext("A valid prefix range must be specified.");
if (($_POST['range_from'] && !is_ipaddrv6($_POST['range_from'])))
$input_errors[] = gettext("A valid range must be specified.");
if (($_POST['range_to'] && !is_ipaddrv6($_POST['range_to'])))
$input_errors[] = gettext("A valid range must be specified.");
if (($_POST['gateway'] && !is_ipaddrv6($_POST['gateway'])))
$input_errors[] = gettext("A valid IPv6 address must be specified for the gateway.");
if (($_POST['dns1'] && !is_ipaddrv6($_POST['dns1'])) || ($_POST['dns2'] && !is_ipaddrv6($_POST['dns2'])))
$input_errors[] = gettext("A valid IPv6 address must be specified for the primary/secondary DNS servers.");
if ($_POST['deftime'] && (!is_numeric($_POST['deftime']) || ($_POST['deftime'] < 60)))
$input_errors[] = gettext("The default lease time must be at least 60 seconds.");
if ($_POST['maxtime'] && (!is_numeric($_POST['maxtime']) || ($_POST['maxtime'] < 60) || ($_POST['maxtime'] <= $_POST['deftime'])))
$input_errors[] = gettext("The maximum lease time must be at least 60 seconds and higher than the default lease time.");
if (($_POST['ddnsdomain'] && !is_domain($_POST['ddnsdomain'])))
$input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration.");
if (($_POST['ntp1'] && !is_ipaddrv6($_POST['ntp1'])) || ($_POST['ntp2'] && !is_ipaddrv6($_POST['ntp2'])))
$input_errors[] = gettext("A valid IPv6 address must be specified for the primary/secondary NTP servers.");
if (($_POST['domain'] && !is_domain($_POST['domain'])))
$input_errors[] = gettext("A valid domain name must be specified for the DNS domain.");
if ($_POST['tftp'] && !is_ipaddr($_POST['tftp']) && !is_domain($_POST['tftp']) && !is_URL($_POST['tftp']))
$input_errors[] = gettext("A valid IPv6 address or hostname must be specified for the TFTP server.");
if (($_POST['nextserver'] && !is_ipaddrv6($_POST['nextserver'])))
$input_errors[] = gettext("A valid IPv6 address must be specified for the network boot server.");
// Disallow a range that includes the virtualip
if (is_array($config['virtualip']['vip'])) {
foreach($config['virtualip']['vip'] as $vip) {
if($vip['interface'] == $if)
if($vip['subnetv6'] && is_inrange($vip['subnetv6'], $_POST['range_from'], $_POST['range_to']))
$input_errors[] = sprintf(gettext("The subnet range cannot overlap with virtual IPv6 address %s."),$vip['subnetv6']);
}
}
$noip = false;
if(is_array($a_maps))
foreach ($a_maps as $map)
if (empty($map['ipaddrv6']))
$noip = true;
if (!$input_errors) {
/* make sure the range lies within the current subnet */
/* FIXME change for ipv6 subnet */
$subnet_start = gen_subnetv6($ifcfgip, $ifcfgsn);
$subnet_end = gen_subnetv6_max($ifcfgip, $ifcfgsn);
if((! ip_in_subnet($_POST['range_from'], $subnet_start)) || (! ip_in_subnet($_POST['range_to'], $subnet_start))) {
$input_errors[] = gettext("The specified range lies outside of the current subnet.");
}
/* no idea how to do this yet
if (ip2ulong($_POST['range_from']) > ip2ulong($_POST['range_to']))
$input_errors[] = gettext("The range is invalid (first element higher than second element).");
*/
/* make sure that the DHCP Relay isn't enabled on this interface */
if (isset($config['dhcrelay'][$if]['enable']))
$input_errors[] = sprintf(gettext("You must disable the DHCP relay on the %s interface before enabling the DHCP server."),$iflist[$if]);
// $dynsubnet_start = ip2ulong($_POST['range_from']);
// $dynsubnet_end = ip2ulong($_POST['range_to']);
/* FIX later. Also applies to prefix delegation
if(is_array($a_maps)) {
foreach ($a_maps as $map) {
if (empty($map['ipaddrv6']))
continue;
if ((ip2ulong($map['ipaddrv6']) > $dynsubnet_start) &&
(ip2ulong($map['ipaddr']) < $dynsubnet_end)) {
$input_errors[] = sprintf(gettext("The DHCP range cannot overlap any static DHCP mappings."));
break;
}
}
}
*/
}
}
if (!$input_errors) {
if (!is_array($config['dhcpdv6'][$if]))
$config['dhcpdv6'][$if] = array();
if (!is_array($config['dhcpdv6'][$if]['range']))
$config['dhcpdv6'][$if]['range'] = array();
if (!is_array($config['dhcpdv6'][$if]['prefixrange']))
$config['dhcpdv6'][$if]['prefixrange'] = array();
$config['dhcpdv6'][$if]['mode'] = $_POST['mode'];
$config['dhcpdv6'][$if]['range']['from'] = $_POST['range_from'];
$config['dhcpdv6'][$if]['range']['to'] = $_POST['range_to'];
$config['dhcpdv6'][$if]['prefixrange']['from'] = $_POST['prefixrange_from'];
$config['dhcpdv6'][$if]['prefixrange']['to'] = $_POST['prefixrange_to'];
$config['dhcpdv6'][$if]['prefixrange']['prefixlength'] = $_POST['prefixrange_length'];
$config['dhcpdv6'][$if]['defaultleasetime'] = $_POST['deftime'];
$config['dhcpdv6'][$if]['maxleasetime'] = $_POST['maxtime'];
$config['dhcpdv6'][$if]['netmask'] = $_POST['netmask'];
$previous = $config['dhcpdv6'][$if]['failover_peerip'];
if($previous <> $_POST['failover_peerip'])
mwexec("/bin/rm -rf /var/dhcpd/var/db/*");
$config['dhcpdv6'][$if]['failover_peerip'] = $_POST['failover_peerip'];
unset($config['dhcpdv6'][$if]['winsserver']);
unset($config['dhcpdv6'][$if]['dnsserver']);
if ($_POST['dns1'])
$config['dhcpdv6'][$if]['dnsserver'][] = $_POST['dns1'];
if ($_POST['dns2'])
$config['dhcpdv6'][$if]['dnsserver'][] = $_POST['dns2'];
$config['dhcpdv6'][$if]['gateway'] = $_POST['gateway'];
$config['dhcpdv6'][$if]['domain'] = $_POST['domain'];
$config['dhcpdv6'][$if]['domainsearchlist'] = $_POST['domainsearchlist'];
$config['dhcpdv6'][$if]['denyunknown'] = ($_POST['denyunknown']) ? true : false;
$config['dhcpdv6'][$if]['enable'] = ($_POST['enable']) ? true : false;
$config['dhcpdv6'][$if]['ddnsdomain'] = $_POST['ddnsdomain'];
$config['dhcpdv6'][$if]['ddnsupdate'] = ($_POST['ddnsupdate']) ? true : false;
unset($config['dhcpdv6'][$if]['ntpserver']);
if ($_POST['ntp1'])
$config['dhcpdv6'][$if]['ntpserver'][] = $_POST['ntp1'];
if ($_POST['ntp2'])
$config['dhcpdv6'][$if]['ntpserver'][] = $_POST['ntp2'];
$config['dhcpdv6'][$if]['tftp'] = $_POST['tftp'];
$config['dhcpdv6'][$if]['ldap'] = $_POST['ldap'];
$config['dhcpdv6'][$if]['netboot'] = ($_POST['netboot']) ? true : false;
$config['dhcpdv6'][$if]['next-server'] = $_POST['nextserver'];
$config['dhcpdv6'][$if]['filename'] = $_POST['filename'];
$config['dhcpdv6'][$if]['rootpath'] = $_POST['rootpath'];
// Handle the custom options rowhelper
if(isset($config['dhcpdv6'][$if]['numberoptions']['item']))
unset($config['dhcpdv6'][$if]['numberoptions']['item']);
$config['dhcpdv6'][$if]['numberoptions'] = $numberoptions;
write_config();
$retval = 0;
$retvaldhcp = 0;
$retvaldns = 0;
/* Stop DHCPv6 so we can cleanup leases */
killbyname("dhcpd -6");
// dhcp_clean_leases();
/* dnsmasq_configure calls dhcpd_configure */
/* no need to restart dhcpd twice */
if (isset($config['dnsmasq']['regdhcpstatic'])) {
$retvaldns = services_dnsmasq_configure();
if ($retvaldns == 0) {
clear_subsystem_dirty('hosts');
clear_subsystem_dirty('staticmaps');
}
} else {
$retvaldhcp = services_dhcpd_configure();
if ($retvaldhcp == 0)
clear_subsystem_dirty('staticmaps');
}
if($retvaldhcp == 1 || $retvaldns == 1)
$retval = 1;
$savemsg = get_std_save_message($retval);
}
}
if ($_GET['act'] == "del") {
if ($a_maps[$_GET['id']]) {
unset($a_maps[$_GET['id']]);
write_config();
if(isset($config['dhcpdv6'][$if]['enable'])) {
mark_subsystem_dirty('staticmapsv6');
if (isset($config['dnsmasq']['regdhcpstaticv6']))
mark_subsystem_dirty('hosts');
}
header("Location: services_dhcpv6.php?if={$if}");
exit;
}
}
$pgtitle = array(gettext("Services"),gettext("DHCPv6 server"));
$statusurl = "status_dhcpv6_leases.php";
$logurl = "diag_logs_dhcp.php";
include("head.inc");
?>
<script type="text/javascript" src="/javascript/row_helper.js">
</script>
<script type="text/javascript">
rowname[0] = "number";
rowtype[0] = "textbox";
rowsize[0] = "10";
rowname[1] = "value";
rowtype[1] = "textbox";
rowsize[1] = "55";
</script>
<script type="text/javascript" language="JavaScript">
function enable_change(enable_over) {
var endis;
endis = !(document.iform.enable.checked || enable_over);
document.iform.range_from.disabled = endis;
document.iform.range_to.disabled = endis;
document.iform.prefixrange_from.disabled = endis;
document.iform.prefixrange_to.disabled = endis;
document.iform.prefixrange_length.disabled = endis;
document.iform.dns1.disabled = endis;
document.iform.dns2.disabled = endis;
document.iform.deftime.disabled = endis;
document.iform.maxtime.disabled = endis;
document.iform.gateway.disabled = endis;
document.iform.failover_peerip.disabled = endis;
document.iform.domain.disabled = endis;
document.iform.domainsearchlist.disabled = endis;
document.iform.ddnsdomain.disabled = endis;
document.iform.ddnsupdate.disabled = endis;
document.iform.ntp1.disabled = endis;
document.iform.ntp2.disabled = endis;
document.iform.tftp.disabled = endis;
document.iform.ldap.disabled = endis;
document.iform.netboot.disabled = endis;
document.iform.nextserver.disabled = endis;
document.iform.filename.disabled = endis;
document.iform.rootpath.disabled = endis;
document.iform.denyunknown.disabled = endis;
}
function show_shownumbervalue() {
document.getElementById("shownumbervaluebox").innerHTML='';
aodiv = document.getElementById('shownumbervalue');
aodiv.style.display = "block";
}
function show_ddns_config() {
document.getElementById("showddnsbox").innerHTML='';
aodiv = document.getElementById('showddns');
aodiv.style.display = "block";
}
function show_ntp_config() {
document.getElementById("showntpbox").innerHTML='';
aodiv = document.getElementById('showntp');
aodiv.style.display = "block";
}
function show_tftp_config() {
document.getElementById("showtftpbox").innerHTML='';
aodiv = document.getElementById('showtftp');
aodiv.style.display = "block";
}
function show_ldap_config() {
document.getElementById("showldapbox").innerHTML='';
aodiv = document.getElementById('showldap');
aodiv.style.display = "block";
}
function show_netboot_config() {
document.getElementById("shownetbootbox").innerHTML='';
aodiv = document.getElementById('shownetboot');
aodiv.style.display = "block";
}
</script>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
<?php include("fbegin.inc"); ?>
<form action="services_dhcpv6.php" method="post" name="iform" id="iform">
<?php if ($input_errors) print_input_errors($input_errors); ?>
<?php if ($savemsg) print_info_box($savemsg); ?>
<?php
if ($dhcrelay_enabled) {
echo gettext("DHCP Relay is currently enabled. Cannot enable the DHCP Server service while the DHCP Relay is enabled on any interface.");
include("fend.inc");
echo "</body>";
echo "</html>";
exit;
}
?>
<?php if (is_subsystem_dirty('staticmaps')): ?><p>
<?php print_info_box_np(gettext("The static mapping configuration has been changed") . ".<br>" . gettext("You must apply the changes in order for them to take effect."));?><br>
<?php endif; ?>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td>
<?php
/* active tabs */
$tab_array = array();
$tabscounter = 0;
$i = 0;
foreach ($iflist as $ifent => $ifname) {
$oc = $config['interfaces'][$ifent];
if ((is_array($config['dhcpdv6'][$ifent]) && !isset($config['dhcpdv6'][$ifent]['enable']) && (!is_ipaddrv6($oc['ipaddrv6']))) ||
(!is_array($config['dhcpdv6'][$ifent]) && (!is_ipaddrv6($oc['ipaddrv6']))))
continue;
if ($ifent == $if)
$active = true;
else
$active = false;
$tab_array[] = array($ifname, $active, "services_dhcpv6.php?if={$ifent}");
$tabscounter++;
}
if ($tabscounter == 0) {
echo "</td></tr></table></form>";
include("fend.inc");
echo "</body>";
echo "</html>";
exit;
}
display_top_tabs($tab_array);
?>
</td></tr>
<tr>
<td>
<div id="mainarea">
<table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0">
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Router Advertisements");?></td>
<td width="78%" class="vtable">
<select name="mode" id="mode">
<?php foreach($advertise_modes as $name => $value) { ?>
<option value="<?=$name ?>" <?php if ($pconfig['mode'] == $name) echo "selected"; ?> > <?=$value ?></option>
<?php } ?>
</select><br />
<strong><?php printf(gettext("Select the Operating Mode. Use Unmanaged for Router Advertising only, Managed for DHCPv6 only, Assisted for Combined"));?></strong></td>
</tr>
<tr>
<td width="22%" valign="top" class="vtable">&nbsp;</td>
<td width="78%" class="vtable">
<input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked"; ?> onClick="enable_change(false);">
<strong><?php printf(gettext("Enable DHCPv6 server on " .
"%s " .
"interface"),htmlspecialchars($iflist[$if]));?></strong></td>
</tr>
<tr>
<td width="22%" valign="top" class="vtable">&nbsp;</td>
<td width="78%" class="vtable">
<input name="denyunknown" id="denyunknown" type="checkbox" value="yes" <?php if ($pconfig['denyunknown']) echo "checked"; ?>>
<strong><?=gettext("Deny unknown clients");?></strong><br>
<?=gettext("If this is checked, only the clients defined below will get DHCP leases from this server. ");?></td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet");?></td>
<td width="78%" class="vtable">
<?=gen_subnetv6($ifcfgip, $ifcfgsn);?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet mask");?></td>
<td width="78%" class="vtable">
<?=$ifcfgsn;?> bits
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Available range");?></td>
<td width="78%" class="vtable">
<?php
$range_from = gen_subnetv6($ifcfgip, $ifcfgsn);
$range_from++;
echo $range_from;
?>
-
<?php
/* FIXME end of subnet calculation here */
$range_to = gen_subnetv6_max($ifcfgip, $ifcfgsn);;
echo $range_to;
?>
</td>
</tr>
<?php if($is_olsr_enabled): ?>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Subnet Mask");?></td>
<td width="78%" class="vtable">
<select name="netmask" class="formselect" id="netmask">
<?php
for ($i = 128; $i > 0; $i--) {
if($i <> 127) {
echo "<option value=\"{$i}\" ";
if ($i == $pconfig['netmask']) echo "selected";
echo ">" . $i . "</option>";
}
}
?>
</select>
</td>
</tr>
<?php endif; ?>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Range");?></td>
<td width="78%" class="vtable">
<input name="range_from" type="text" class="formfld unknown" id="range_from" size="28" value="<?=htmlspecialchars($pconfig['range_from']);?>">
&nbsp;<?=gettext("to"); ?>&nbsp; <input name="range_to" type="text" class="formfld unknown" id="range_to" size="28" value="<?=htmlspecialchars($pconfig['range_to']);?>">
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Prefix Delegation Range");?></td>
<td width="78%" class="vtable">
<input name="prefixrange_from" type="text" class="formfld unknown" id="prefixrange_from" size="28" value="<?=htmlspecialchars($pconfig['prefixrange_from']);?>">
&nbsp;<?=gettext("to"); ?>&nbsp; <input name="prefixrange_to" type="text" class="formfld unknown" id="prefixrange_to" size="28" value="<?=htmlspecialchars($pconfig['prefixrange_to']);?>">
&nbsp;<?=gettext("prefix length"); ?>&nbsp; <select name="prefixrange_length" class="formselect" id="prefixrange_length">
<option value="48" <?php if($pconfig['prefixrange_length'] == 48) echo "selected"; ?>>48</option>
<option value="56" <?php if($pconfig['prefixrange_length'] == 56) echo "selected"; ?>>56</option>
<option value="60" <?php if($pconfig['prefixrange_length'] == 60) echo "selected"; ?>>60</option>
</select> <br/>
<?php echo gettext("You can define a Prefix range here for DHCP Prefix Delegation. This allows for
assigning networks to subrouters"); ?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("DNS servers");?></td>
<td width="78%" class="vtable">
<input name="dns1" type="text" class="formfld unknown" id="dns1" size="28" value="<?=htmlspecialchars($pconfig['dns1']);?>"><br>
<input name="dns2" type="text" class="formfld unknown" id="dns2" size="28" value="<?=htmlspecialchars($pconfig['dns2']);?>"><br>
<?=gettext("NOTE: leave blank to use the system default DNS servers - this interface's IP if DNS forwarder is enabled, otherwise the servers configured on the General page.");?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Gateway");?></td>
<td width="78%" class="vtable">
<input name="gateway" type="text" class="formfld host" id="gateway" size="28" value="<?=htmlspecialchars($pconfig['gateway']);?>"><br>
<?=gettext("The default is to use the IP on this interface of the firewall as the gateway. Specify an alternate gateway here if this is not the correct gateway for your network.");?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Domain name");?></td>
<td width="78%" class="vtable">
<input name="domain" type="text" class="formfld unknown" id="domain" size="28" value="<?=htmlspecialchars($pconfig['domain']);?>"><br>
<?=gettext("The default is to use the domain name of this system as the default domain name provided by DHCP. You may specify an alternate domain name here.");?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Domain search list");?></td>
<td width="78%" class="vtable">
<input name="domainsearchlist" type="text" class="formfld unknown" id="domainsearchlist" size="28" value="<?=htmlspecialchars($pconfig['domainsearchlist']);?>"><br>
<?=gettext("The DHCP server can optionally provide a domain search list.");?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Default lease time");?></td>
<td width="78%" class="vtable">
<input name="deftime" type="text" class="formfld unknown" id="deftime" size="10" value="<?=htmlspecialchars($pconfig['deftime']);?>">
<?=gettext("seconds");?><br>
<?=gettext("This is used for clients that do not ask for a specific " .
"expiration time."); ?><br>
<?=gettext("The default is 7200 seconds.");?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Maximum lease time");?></td>
<td width="78%" class="vtable">
<input name="maxtime" type="text" class="formfld unknown" id="maxtime" size="10" value="<?=htmlspecialchars($pconfig['maxtime']);?>">
<?=gettext("seconds");?><br>
<?=gettext("This is the maximum lease time for clients that ask".
" for a specific expiration time."); ?><br>
<?=gettext("The default is 86400 seconds.");?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Failover peer IP:");?></td>
<td width="78%" class="vtable">
<input name="failover_peerip" type="text" class="formfld host" id="failover_peerip" size="28" value="<?=htmlspecialchars($pconfig['failover_peerip']);?>"><br>
<?=gettext("Leave blank to disable. Enter the interface IP address of the other machine. Machines must be using CARP.");?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Dynamic DNS");?></td>
<td width="78%" class="vtable">
<div id="showddnsbox">
<input type="button" onClick="show_ddns_config()" value="<?=gettext("Advanced");?>"></input> - <?=gettext("Show Dynamic DNS");?></a>
</div>
<div id="showddns" style="display:none">
<input valign="middle" type="checkbox" value="yes" name="ddnsupdate" id="ddnsupdate" <?php if($pconfig['ddnsupdate']) echo " checked"; ?>>&nbsp;
<b><?=gettext("Enable registration of DHCP client names in DNS.");?></b><br />
<p>
<input name="ddnsdomain" type="text" class="formfld unknown" id="ddnsdomain" size="28" value="<?=htmlspecialchars($pconfig['ddnsdomain']);?>"><br />
<?=gettext("Note: Leave blank to disable dynamic DNS registration.");?><br />
<?=gettext("Enter the dynamic DNS domain which will be used to register client names in the DNS server.");?>
</div>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("NTP servers");?></td>
<td width="78%" class="vtable">
<div id="showntpbox">
<input type="button" onClick="show_ntp_config()" value="<?=gettext("Advanced");?>"></input> - <?=gettext("Show NTP configuration");?></a>
</div>
<div id="showntp" style="display:none">
<input name="ntp1" type="text" class="formfld unknown" id="ntp1" size="28" value="<?=htmlspecialchars($pconfig['ntp1']);?>"><br>
<input name="ntp2" type="text" class="formfld unknown" id="ntp2" size="28" value="<?=htmlspecialchars($pconfig['ntp2']);?>">
</div>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("TFTP server");?></td>
<td width="78%" class="vtable">
<div id="showtftpbox">
<input type="button" onClick="show_tftp_config()" value="<?=gettext("Advanced");?>"></input> - <?=gettext("Show TFTP configuration");?></a>
</div>
<div id="showtftp" style="display:none">
<input name="tftp" type="text" class="formfld unknown" id="tftp" size="50" value="<?=htmlspecialchars($pconfig['tftp']);?>"><br>
<?=gettext("Leave blank to disable. Enter a full hostname or IP for the TFTP server.");?>
</div>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("LDAP URI");?></td>
<td width="78%" class="vtable">
<div id="showldapbox">
<input type="button" onClick="show_ldap_config()" value="<?=gettext("Advanced");?>"></input> - <?=gettext("Show LDAP configuration");?></a>
</div>
<div id="showldap" style="display:none">
<input name="ldap" type="text" class="formfld unknown" id="ldap" size="80" value="<?=htmlspecialchars($pconfig['ldap']);?>"><br>
<?=gettext("Leave blank to disable. Enter a full URI for the LDAP server in the form ldap://ldap.example.com/dc=example,dc=com");?>
</div>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Enable network booting");?></td>
<td width="78%" class="vtable">
<div id="shownetbootbox">
<input type="button" onClick="show_netboot_config()" value="<?=gettext("Advanced");?>"></input> - <?=gettext("Show Network booting");?></a>
</div>
<div id="shownetboot" style="display:none">
<input valign="middle" type="checkbox" value="yes" name="netboot" id="netboot" <?php if($pconfig['netboot']) echo " checked"; ?>>&nbsp;
<b><?=gettext("Enables network booting.");?></b>
<p>
<?=gettext("Enter the IP of the"); ?> <b><?=gettext("next-server"); ?></b>
<input name="nextserver" type="text" class="formfld unknown" id="nextserver" size="28" value="<?=htmlspecialchars($pconfig['nextserver']);?>">
<?=gettext("and the filename");?>
<input name="filename" type="text" class="formfld unknown" id="filename" size="28" value="<?=htmlspecialchars($pconfig['filename']);?>"><br>
<?=gettext("Note: You need both a filename and a boot server configured for this to work!");?>
<p>
<?=gettext("Enter the"); ?> <b><?=gettext("root-path"); ?></b>-<?=gettext("string");?>
<input name="rootpath" type="text" class="formfld unknown" id="rootpath" size="90" value="<?=htmlspecialchars($pconfig['rootpath']);?>"><br>
<?=gettext("Note: string-format: iscsi:(servername):(protocol):(port):(LUN):targetname");?>
</div>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Additional BOOTP/DHCP Options");?></td>
<td width="78%" class="vtable">
<div id="shownumbervaluebox">
<input type="button" onClick="show_shownumbervalue()" value="<?=gettext("Advanced");?>"></input> - <?=gettext("Show Additional BOOTP/DHCP Options");?></a>
</div>
<div id="shownumbervalue" style="display:none">
<table id="maintable">
<tbody>
<tr>
<td colspan="3">
<div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp">
<?=gettext("Enter the DHCP option number and the value for each item you would like to include in the DHCP lease information. For a list of available options please visit this"); ?> <a href="http://www.iana.org/assignments/bootp-dhcp-parameters/" target="_new"><?=gettext("URL"); ?></a>
</div>
</td>
</tr>
<tr>
<td><div id="onecolumn"><?=gettext("Number");?></div></td>
<td><div id="twocolumn"><?=gettext("Value");?></div></td>
</tr>
<?php $counter = 0; ?>
<?php
if($pconfig['numberoptions'])
foreach($pconfig['numberoptions']['item'] as $item):
?>
<?php
$number = $item['number'];
$value = $item['value'];
?>
<tr>
<td>
<input autocomplete="off" name="number<?php echo $counter; ?>" type="text" class="formfld" id="number<?php echo $counter; ?>" size="10" value="<?=htmlspecialchars($number);?>" />
</td>
<td>
<input autocomplete="off" name="value<?php echo $counter; ?>" type="text" class="formfld" id="value<?php echo $counter; ?>" size="55" value="<?=htmlspecialchars($value);?>" />
</td>
<td>
<input type="image" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" onclick="removeRow(this); return false;" value="<?=gettext("Delete");?>" />
</td>
</tr>
<?php $counter++; ?>
<?php endforeach; ?>
</tbody>
<tfoot>
</tfoot>
</table>
<a onclick="javascript:addRowTo('maintable', 'formfldalias'); return false;" href="#">
<img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry");?>" />
</a>
<script type="text/javascript">
field_counter_js = 2;
rows = 1;
totalrows = <?php echo $counter; ?>;
loaded = <?php echo $counter; ?>;
</script>
</div>
</td>
</tr>
<tr>
<td width="22%" valign="top">&nbsp;</td>
<td width="78%">
<input name="if" type="hidden" value="<?=$if;?>">
<input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>" onclick="enable_change(true)">
</td>
</tr>
<tr>
<td width="22%" valign="top">&nbsp;</td>
<td width="78%"> <p><span class="vexpl"><span class="red"><strong><?=gettext("Note:");?><br>
</strong></span><?=gettext("The DNS servers entered in"); ?> <a href="system.php"><?=gettext("System: " .
"General setup"); ?></a> <?=gettext("(or the"); ?> <a href="services_dnsmasq.php"><?=gettext("DNS " .
"forwarder"); ?></a>, <?=gettext("if enabled)"); ?> </span><span class="vexpl"><?=gettext("will " .
"be assigned to clients by the DHCP server."); ?><br>
<br>
<?=gettext("The DHCP lease table can be viewed on the"); ?> <a href="status_dhcp_leases.php"><?=gettext("Status: " .
"DHCP leases"); ?></a> <?=gettext("page."); ?><br>
</span></p>
</td>
</tr>
</table>
<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="25%" class="listhdrr"><?=gettext("DUID");?></td>
<td width="15%" class="listhdrr"><?=gettext("IPv6 address");?></td>
<td width="20%" class="listhdrr"><?=gettext("Hostname");?></td>
<td width="30%" class="listhdr"><?=gettext("Description");?></td>
<td width="10%" class="list">
<table border="0" cellspacing="0" cellpadding="1">
<tr>
<td valign="middle" width="17"></td>
<td valign="middle"><a href="services_dhcpv6_edit.php?if=<?=$if;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
</tr>
</table>
</td>
</tr>
<?php if(is_array($a_maps)): ?>
<?php $i = 0; foreach ($a_maps as $mapent): ?>
<?php if($mapent['duid'] <> "" or $mapent['ipaddrv6'] <> ""): ?>
<tr>
<td class="listlr" ondblclick="document.location='services_dhcpv6_edit.php?if=<?=$if;?>&id=<?=$i;?>';">
<?=htmlspecialchars($mapent['duid']);?>
</td>
<td class="listr" ondblclick="document.location='services_dhcpv6_edit.php?if=<?=$if;?>&id=<?=$i;?>';">
<?=htmlspecialchars($mapent['ipaddrv6']);?>&nbsp;
</td>
<td class="listr" ondblclick="document.location='services_dhcpv6_edit.php?if=<?=$if;?>&id=<?=$i;?>';">
<?=htmlspecialchars($mapent['hostname']);?>&nbsp;
</td>
<td class="listbg" ondblclick="document.location='services_dhcpv6_edit.php?if=<?=$if;?>&id=<?=$i;?>';">
<?=htmlspecialchars($mapent['descr']);?>&nbsp;
</td>
<td valign="middle" nowrap class="list">
<table border="0" cellspacing="0" cellpadding="1">
<tr>
<td valign="middle"><a href="services_dhcpv6_edit.php?if=<?=$if;?>&id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a></td>
<td valign="middle"><a href="services_dhcpv6.php?if=<?=$if;?>&act=del&id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this mapping?");?>')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td>
</tr>
</table>
</td>
</tr>
<?php endif; ?>
<?php $i++; endforeach; ?>
<?php endif; ?>
<tr>
<td class="list" colspan="4"></td>
<td class="list">
<table border="0" cellspacing="0" cellpadding="1">
<tr>
<td valign="middle" width="17"></td>
<td valign="middle"><a href="services_dhcpv6_edit.php?if=<?=$if;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</form>
<script language="JavaScript">
<!--
enable_change(false);
//-->
</script>
<?php include("fend.inc"); ?>
</body>
</html>

View File

@ -0,0 +1,242 @@
<?php
/* $Id$ */
/*
services_dhcpv6_edit.php
part of m0n0wall (http://m0n0.ch/wall)
Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
Copyright (C) 2011 Seth Mos <seth.mos@dds.nl>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
/*
pfSense_BUILDER_BINARIES: /usr/sbin/arp
pfSense_MODULE: dhcpserver
*/
##|+PRIV
##|*IDENT=page-services-dhcpserverv6-editstaticmapping
##|*NAME=Services: DHCPv6 Server : Edit static mapping page
##|*DESCR=Allow access to the 'Services: DHCPv6 Server : Edit static mapping' page.
##|*MATCH=services_dhcpv6_edit.php*
##|-PRIV
function staticmapcmp($a, $b) {
return ipcmp($a['ipaddrv6'], $b['ipaddrv6']);
}
function staticmaps_sort($ifgui) {
global $g, $config;
usort($config['dhcpdv6'][$ifgui]['staticmap'], "staticmapcmp");
}
require_once('globals.inc');
if(!$g['services_dhcp_server_enable']) {
Header("Location: /");
exit;
}
require("guiconfig.inc");
$if = $_GET['if'];
if ($_POST['if'])
$if = $_POST['if'];
if (!$if) {
header("Location: services_dhcpv6.php");
exit;
}
if (!is_array($config['dhcpdv6'][$if]['staticmap'])) {
$config['dhcpdv6'][$if]['staticmap'] = array();
}
$netboot_enabled=isset($config['dhcpdv6'][$if]['netboot']);
$a_maps = &$config['dhcpdv6'][$if]['staticmap'];
$ifcfgipv6 = get_interface_ipv6($if);
$ifcfgsnv6 = get_interface_subnetv6($if);
$ifcfgdescr = convert_friendly_interface_to_friendly_descr($if);
$id = $_GET['id'];
if (isset($_POST['id']))
$id = $_POST['id'];
if (isset($id) && $a_maps[$id]) {
$pconfig['duid'] = $a_maps[$id]['duid'];
$pconfig['hostname'] = $a_maps[$id]['hostname'];
$pconfig['ipaddrv6'] = $a_maps[$id]['ipaddrv6'];
$pconfig['netbootfile'] = $a_maps[$id]['netbootfile'];
$pconfig['descr'] = $a_maps[$id]['descr'];
} else {
$pconfig['duid'] = $_GET['duid'];
$pconfig['hostname'] = $_GET['hostname'];
$pconfig['netbootfile'] = $_GET['netbootfile'];
$pconfig['descr'] = $_GET['descr'];
}
if ($_POST) {
unset($input_errors);
$pconfig = $_POST;
/* input validation */
$reqdfields = explode(" ", "duid");
$reqdfieldsn = array(gettext("DUID Identifier"));
do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
if ($_POST['hostname']) {
preg_match("/^[0-9]/", $_POST['hostname'], $matches);
if($matches)
$input_errors[] = gettext("The hostname cannot start with a numeric character according to RFC952");
preg_match("/\-\$/", $_POST['hostname'], $matches);
if($matches)
$input_errors[] = gettext("The hostname cannot end with a hyphen according to RFC952");
if (!is_hostname($_POST['hostname'])) {
$input_errors[] = gettext("The hostname can only contain the characters A-Z, 0-9 and '-'.");
} else {
if (strpos($_POST['hostname'],'.')) {
$input_errors[] = gettext("A valid hostname is specified, but the domain name part should be omitted");
}
}
}
if (($_POST['ipaddrv6'] && !is_ipaddrv6($_POST['ipaddrv6']))) {
$input_errors[] = gettext("A valid IPv6 address must be specified.");
}
if (empty($_POST['duid'])) {
$input_errors[] = gettext("A valid DUID Identifier must be specified.");
}
/* check for overlaps */
foreach ($a_maps as $mapent) {
if (isset($id) && ($a_maps[$id]) && ($a_maps[$id] === $mapent))
continue;
if ((($mapent['hostname'] == $_POST['hostname']) && $mapent['hostname']) || ($mapent['duid'] == $_POST['duid'])) {
$input_errors[] = gettext("This Hostname, IP or DUID Identifier already exists.");
break;
}
}
/* make sure it's not within the dynamic subnet */
if ($_POST['ipaddrv6']) {
/* oh boy, we need to be able to somehow do this at some point. skip */
}
if (!$input_errors) {
$mapent = array();
$mapent['duid'] = $_POST['duid'];
$mapent['ipaddrv6'] = $_POST['ipaddrv6'];
$mapent['hostname'] = $_POST['hostname'];
$mapent['descr'] = $_POST['descr'];
$mapent['netbootfile'] = $_POST['netbootfile'];
if (isset($id) && $a_maps[$id])
$a_maps[$id] = $mapent;
else
$a_maps[] = $mapent;
staticmaps_sort($if);
write_config();
if(isset($config['dhcpdv6'][$if]['enable'])) {
mark_subsystem_dirty('staticmaps');
if (isset($config['dnsmasq']['regdhcpstatic']))
mark_subsystem_dirty('hosts');
}
header("Location: services_dhcpv6.php?if={$if}");
exit;
}
}
$pgtitle = array(gettext("Services"),gettext("DHCPv6"),gettext("Edit static mapping"));
$statusurl = "status_dhcpv6_leases.php";
$logurl = "diag_logs_dhcp.php";
include("head.inc");
?>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
<?php include("fbegin.inc"); ?>
<?php if ($input_errors) print_input_errors($input_errors); ?>
<form action="services_dhcpv6_edit.php" method="post" name="iform" id="iform">
<table width="100%" border="0" cellpadding="6" cellspacing="0">
<tr>
<td colspan="2" valign="top" class="listtopic"><?=gettext("Static DHCPv6 Mapping");?></td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("DUID Identifier");?></td>
<td width="78%" class="vtable">
<input name="duid" type="text" class="formfld unknown" id="duid" size="40" value="<?=htmlspecialchars($pconfig['duid']);?>">
<br>
<span class="vexpl"><?=gettext("Enter a DUID Identifier in the following format: ");?><br />
"DUID-LLT - ETH -- TIME --- ---- address ----" <br />
"xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"</span></td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("IPv6 address");?></td>
<td width="78%" class="vtable">
<input name="ipaddrv6" type="text" class="formfld unknown" id="ipaddrv6" size="28" value="<?=htmlspecialchars($pconfig['ipaddrv6']);?>">
<br>
<?=gettext("If no IPv6 address is given, one will be dynamically allocated from the pool.");?></td>
</tr>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Hostname");?></td>
<td width="78%" class="vtable">
<input name="hostname" type="text" class="formfld unknown" id="hostname" size="28" value="<?=htmlspecialchars($pconfig['hostname']);?>">
<br> <span class="vexpl"><?=gettext("Name of the host, without domain part.");?></span></td>
</tr>
<?php if($netboot_enabled) { ?>
<tr>
<td width="22%" valign="top" class="vncell">Netboot filename</td>
<td width="78%" class="vtable">
<input name="netbootfile" type="text" class="formfld unknown" id="netbootfile" size="28" value="<?=htmlspecialchars($pconfig['netbootfile']);?>">
<br> <span class="vexpl">Name of the file that should be loaded when this host boots off of the network, overrides setting on main page.</span></td>
</tr>
<?php } ?>
<tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
<td width="78%" class="vtable">
<input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
<br> <span class="vexpl"><?=gettext("You may enter a description here ".
"for your reference (not parsed).");?></span></td>
</tr>
<tr>
<td width="22%" valign="top">&nbsp;</td>
<td width="78%">
<input name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>"> <input class="formbtn" type="button" value="<?=gettext("Cancel");?>" onclick="history.back()">
<?php if (isset($id) && $a_maps[$id]): ?>
<input name="id" type="hidden" value="<?=htmlspecialchars($id);?>">
<?php endif; ?>
<input name="if" type="hidden" value="<?=htmlspecialchars($if);?>">
</td>
</tr>
</table>
</form>
<?php include("fend.inc"); ?>
</body>
</html>

View File

@ -47,6 +47,7 @@ require_once("shaper.inc");
$pconfig['enable'] = isset($config['dnsmasq']['enable']);
$pconfig['regdhcp'] = isset($config['dnsmasq']['regdhcp']);
$pconfig['regdhcpstatic'] = isset($config['dnsmasq']['regdhcpstatic']);
$pconfig['dhcpfirst'] = isset($config['dnsmasq']['dhcpfirst']);
if (!is_array($config['dnsmasq']['hosts']))
$config['dnsmasq']['hosts'] = array();
@ -65,6 +66,7 @@ if ($_POST) {
$config['dnsmasq']['enable'] = ($_POST['enable']) ? true : false;
$config['dnsmasq']['regdhcp'] = ($_POST['regdhcp']) ? true : false;
$config['dnsmasq']['regdhcpstatic'] = ($_POST['regdhcpstatic']) ? true : false;
$config['dnsmasq']['dhcpfirst'] = ($_POST['dhcpfirst']) ? true : false;
write_config();
@ -112,6 +114,7 @@ function enable_change(enable_over) {
endis = !(document.iform.enable.checked || enable_over);
document.iform.regdhcp.disabled = endis;
document.iform.regdhcpstatic.disabled = endis;
document.iform.dhcpfirst.disabled = endis;
}
//-->
</script>
@ -151,6 +154,15 @@ function enable_change(enable_over) {
"System: General setup%s to the proper value."),'<a href="system.php">','</a>');?></p>
</td>
</tr>
<tr>
<td class="vtable"><p>
<input name="dhcpfirst" type="checkbox" id="dhcpfirst" value="yes" <?php if ($pconfig['dhcpfirst'] == "yes") echo "checked";?>>
<strong><?=gettext("Resolve DHCP mappings first");?><br>
</strong><?php printf(gettext("If this option is set, then DHCP mappings will ".
"be resolved before the manual list of names below. This only ".
"affects the name given for a reverse lookup (PTR)."));?></p>
</td>
</tr>
<tr>
<td>
<input name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" onclick="enable_change(true)">

View File

@ -95,7 +95,8 @@ if ($_POST) {
if (isset($id) && ($a_hosts[$id]) && ($a_hosts[$id] === $hostent))
continue;
if (($hostent['host'] == $_POST['host']) && ($hostent['domain'] == $_POST['domain'])) {
if (($hostent['host'] == $_POST['host']) && ($hostent['domain'] == $_POST['domain'])
&& ((is_ipaddrv4($hostent['ip']) && is_ipaddrv4($_POST['ip'])) || (is_ipaddrv6($hostent['ip']) && is_ipaddrv6($_POST['ip'])))) {
$input_errors[] = gettext("This host/domain already exists.");
break;
}

View File

@ -114,8 +114,8 @@ include("head.inc");
</td>
<td class="listlr">
<?php
$types = explode(",", "DNS-O-Matic, DynDNS (dynamic),DynDNS (static),DynDNS (custom),DHS,DyNS,easyDNS,No-IP,ODS.org,ZoneEdit,Loopia,freeDNS, DNSexit, OpenDNS, Namecheap, HE.net");
$vals = explode(" ", "dnsomatic dyndns dyndns-static dyndns-custom dhs dyns easydns noip ods zoneedit loopia freedns dnsexit opendns namecheap he-net");
$types = explode(",", "DNS-O-Matic, DynDNS (dynamic),DynDNS (static),DynDNS (custom),DHS,DyNS,easyDNS,No-IP,ODS.org,ZoneEdit,Loopia,freeDNS, DNSexit, OpenDNS, Namecheap, HE.net, HE.net Tunnelbroker");
$vals = explode(" ", "dnsomatic dyndns dyndns-static dyndns-custom dhs dyns easydns noip ods zoneedit loopia freedns dnsexit opendns namecheap he-net he-net-tunnelbroker");
$j = 0; for ($j = 0; $j < count($vals); $j++)
if ($vals[$j] == $dyndns['type']) {
echo htmlspecialchars($types[$j]);

View File

@ -159,8 +159,8 @@ include("head.inc");
<td width="78%" class="vtable">
<select name="type" class="formselect" id="type">
<?php
$types = explode(",", "DNS-O-Matic, DynDNS (dynamic),DynDNS (static),DynDNS (custom),DHS,DyNS,easyDNS,No-IP,ODS.org,ZoneEdit,Loopia,freeDNS, DNSexit, OpenDNS, Namecheap, HE.net");
$vals = explode(" ", "dnsomatic dyndns dyndns-static dyndns-custom dhs dyns easydns noip ods zoneedit loopia freedns dnsexit opendns namecheap he-net");
$types = explode(",", "DNS-O-Matic, DynDNS (dynamic),DynDNS (static),DynDNS (custom),DHS,DyNS,easyDNS,No-IP,ODS.org,ZoneEdit,Loopia,freeDNS, DNSexit, OpenDNS, Namecheap, HE.net, HE.net Tunnelbroker");
$vals = explode(" ", "dnsomatic dyndns dyndns-static dyndns-custom dhs dyns easydns noip ods zoneedit loopia freedns dnsexit opendns namecheap he-net he-net-tunnelbroker");
$j = 0; for ($j = 0; $j < count($vals); $j++): ?>
<option value="<?=$vals[$j];?>" <?php if ($vals[$j] == $pconfig['type']) echo "selected";?>>
<?=htmlspecialchars($types[$j]);?>
@ -188,7 +188,8 @@ include("head.inc");
<span class="vexpl">
<span class="red"><strong><?=gettext("Note:");?><br></strong>
</span>
<?=gettext("Enter the complete host/domain name. example: myhost.dyndns.org");?>
<?=gettext("Enter the complete host/domain name. example: myhost.dyndns.org");?><br/>
<?=gettext("For he.net tunnelbroker, enter your tunnel ID");?>
</span>
</td>
</tr>

View File

@ -0,0 +1,417 @@
<?php
/* $Id$ */
/*
status_dhcpv6_leases.php
Copyright (C) 2004-2009 Scott Ullrich
Copyright (C) 2011 Seth Mos
All rights reserved.
originially part of m0n0wall (http://m0n0.ch/wall)
Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
/*
pfSense_BUILDER_BINARIES: /usr/bin/awk /bin/cat /usr/sbin/arp /usr/bin/wc /usr/bin/grep
pfSense_MODULE: dhcpserver
*/
##|+PRIV
##|*IDENT=page-status-dhcpv6leases
##|*NAME=Status: DHCPv6 leases page
##|*DESCR=Allow access to the 'Status: DHCPv6 leases' page.
##|*MATCH=status_dhcpv6_leases.php*
##|-PRIV
require("guiconfig.inc");
$pgtitle = array(gettext("Status"),gettext("DHCPv6 leases"));
$leasesfile = "{$g['dhcpd_chroot_path']}/var/db/dhcpd6.leases";
if (($_GET['deleteip']) && (is_ipaddr($_GET['deleteip']))) {
/* Stop DHCPD */
killbyname("dhcpd");
/* Read existing leases */
$leases_contents = explode("\n", file_get_contents($leasesfile));
$newleases_contents = array();
$i=0;
while ($i < count($leases_contents)) {
/* Find the lease(s) we want to delete */
if ($leases_contents[$i] == "lease {$_GET['deleteip']} {") {
/* Skip to the end of the lease declaration */
do {
$i++;
} while ($leases_contents[$i] != "}");
} else {
/* It's a line we want to keep, copy it over. */
$newleases_contents[] = $leases_contents[$i];
}
$i++;
}
/* Write out the new leases file */
$fd = fopen($leasesfile, 'w');
fwrite($fd, implode("\n", $newleases_contents));
fclose($fd);
/* Restart DHCP Service */
services_dhcpd_configure();
header("Location: status_dhcpv6_leases.php?all={$_GET['all']}");
}
include("head.inc");
?>
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
<?php include("fbegin.inc"); ?>
<?php
function leasecmp($a, $b) {
return strcmp($a[$_GET['order']], $b[$_GET['order']]);
}
function adjust_gmt($dt) {
$ts = strtotime($dt . " GMT");
return strftime("%Y/%m/%d %H:%M:%S", $ts);
}
function remove_duplicate($array, $field)
{
foreach ($array as $sub)
$cmp[] = $sub[$field];
$unique = array_unique(array_reverse($cmp,true));
foreach ($unique as $k => $rien)
$new[] = $array[$k];
return $new;
}
$awk = "/usr/bin/awk";
/* this pattern sticks comments into a single array item */
$cleanpattern = "'{ gsub(\"^#.*\", \"\");} { gsub(\"^server-duid.*\", \"\");} { gsub(\";\", \"\"); print;}'";
/* We then split the leases file by } */
$splitpattern = "'BEGIN { RS=\"}\";} {for (i=1; i<=NF; i++) printf \"%s \", \$i; printf \"}\\n\";}'";
/* stuff the leases file in a proper format into a array by line */
exec("/bin/cat {$leasesfile} | {$awk} {$cleanpattern} | {$awk} {$splitpattern} | /usr/bin/grep '^ia-na'", $leases_content);
$leases_count = count($leases_content);
exec("/usr/sbin/ndp -an", $rawdata);
$arpdata = array();
foreach ($rawdata as $line) {
$elements = preg_split('/\s+/ ',$line);
if ($elements[1] != "(incomplete)") {
$arpent = array();
$arpent['ip'] = trim(str_replace(array('(',')'),'',$elements[0]));
// $arpent['mac'] = trim($elements[3]);
// $arpent['interface'] = trim($elements[5]);
$arpdata[] = $arpent['ip'];
}
}
$pools = array();
$leases = array();
$i = 0;
$l = 0;
$p = 0;
// Put everything together again
while($i < $leases_count) {
/* split the line by space */
$data = explode(" ", $leases_content[$i]);
/* walk the fields */
$f = 0;
$fcount = count($data);
/* with less then 15 fields there is nothing useful */
if($fcount < 15) {
$i++;
continue;
}
while($f < $fcount) {
switch($data[$f]) {
case "failover":
$pools[$p]['name'] = $data[$f+2];
$pools[$p]['mystate'] = $data[$f+7];
$pools[$p]['peerstate'] = $data[$f+14];
$pools[$p]['mydate'] = $data[$f+10];
$pools[$p]['mydate'] .= " " . $data[$f+11];
$pools[$p]['peerdate'] = $data[$f+17];
$pools[$p]['peerdate'] .= " " . $data[$f+18];
$p++;
$i++;
continue 3;
case "ia-na":
if ($data[$f+1][0] == '"') {
$duid = "";
/* FIXME: This needs a safety belt to prevent an infinite loop */
while ($data[$f][strlen($data[$f])-1] != '"') {
$duid .= " " . $data[$f+1];
$f++;
}
$leases[$l]['duid'] = $duid;
} else {
$leases[$l]['duid'] = $data[$f+1];
}
$leases[$l]['type'] = "dynamic";
$f = $f+2;
break;
case "iaaddr":
$leases[$l]['ip'] = $data[$f+1];
if (in_array($leases[$l]['ip'], $arpdata)) {
$leases[$l]['online'] = 'online';
} else {
$leases[$l]['online'] = 'offline';
}
$f = $f+2;
break;
case "starts":
$leases[$l]['start'] = $data[$f+2];
$leases[$l]['start'] .= " " . $data[$f+3];
$f = $f+3;
break;
case "ends":
$leases[$l]['end'] = $data[$f+2];
$leases[$l]['end'] .= " " . $data[$f+3];
$f = $f+3;
break;
case "tstp":
$f = $f+3;
break;
case "tsfp":
$f = $f+3;
break;
case "atsfp":
$f = $f+3;
break;
case "cltt":
$f = $f+3;
break;
case "binding":
switch($data[$f+2]) {
case "active":
$leases[$l]['act'] = "active";
break;
case "free":
$leases[$l]['act'] = "expired";
$leases[$l]['online'] = "offline";
break;
case "backup":
$leases[$l]['act'] = "reserved";
$leases[$l]['online'] = "offline";
break;
}
$f = $f+1;
break;
case "next":
/* skip the next binding statement */
$f = $f+3;
break;
case "hardware":
$f = $f+2;
break;
case "client-hostname":
if($data[$f+1] <> "") {
$leases[$l]['hostname'] = preg_replace('/"/','',$data[$f+1]);
} else {
$hostname = gethostbyaddr($leases[$l]['ip']);
if($hostname <> "") {
$leases[$l]['hostname'] = $hostname;
}
}
$f = $f+1;
break;
case "uid":
$f = $f+1;
break;
}
$f++;
}
$l++;
$i++;
}
if(count($leases) > 0) {
$leases = remove_duplicate($leases,"ip");
}
if(count($pools) > 0) {
$pools = remove_duplicate($pools,"name");
asort($pools);
}
foreach($config['interfaces'] as $ifname => $ifarr) {
if (is_array($config['dhcpdv6'][$ifname]) &&
is_array($config['dhcpdv6'][$ifname]['staticmap'])) {
foreach($config['dhcpdv6'][$ifname]['staticmap'] as $static) {
$slease = array();
$slease['ipv6'] = $static['ipaddr'];
$slease['type'] = "static";
$slease['mac'] = $static['mac'];
$slease['start'] = "";
$slease['end'] = "";
$slease['hostname'] = htmlentities($static['hostname']);
$slease['act'] = "static";
$online = exec("/usr/sbin/ndp -an |/usr/bin/grep {$slease['mac']}| /usr/bin/wc -l|/usr/bin/awk '{print $1;}'");
if ($online == 1) {
$slease['online'] = 'online';
} else {
$slease['online'] = 'offline';
}
$leases[] = $slease;
}
}
}
if ($_GET['order'])
usort($leases, "leasecmp");
/* only print pool status when we have one */
if(count($pools) > 0) {
?>
<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="listhdrr"><?=gettext("Failover Group"); ?></a></td>
<td class="listhdrr"><?=gettext("My State"); ?></a></td>
<td class="listhdrr"><?=gettext("Since"); ?></a></td>
<td class="listhdrr"><?=gettext("Peer State"); ?></a></td>
<td class="listhdrr"><?=gettext("Since"); ?></a></td>
</tr>
<?php
foreach ($pools as $data) {
echo "<tr>\n";
echo "<td class=\"listlr\">{$fspans}{$data['name']}{$fspane}&nbsp;</td>\n";
echo "<td class=\"listr\">{$fspans}{$data['mystate']}{$fspane}&nbsp;</td>\n";
echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['mydate']) . "{$fspane}&nbsp;</td>\n";
echo "<td class=\"listr\">{$fspans}{$data['peerstate']}{$fspane}&nbsp;</td>\n";
echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['peerdate']) . "{$fspane}&nbsp;</td>\n";
echo "<td class=\"list\" valign=\"middle\" width=\"17\">&nbsp;</td>\n";
echo "<td class=\"list\" valign=\"middle\" width=\"17\">&nbsp;</td>\n";
echo "</tr>\n";
}
?>
</table>
<?php
/* only print pool status when we have one */
}
?>
<p>
<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="listhdrr"><a href="#"><?=gettext("IPv6 address"); ?></a></td>
<td class="listhdrr"><a href="#"><?=gettext("DUID"); ?></a></td>
<td class="listhdrr"><a href="#"><?=gettext("Hostname"); ?></a></td>
<td class="listhdrr"><a href="#"><?=gettext("Start"); ?></a></td>
<td class="listhdrr"><a href="#"><?=gettext("End"); ?></a></td>
<td class="listhdrr"><a href="#"><?=gettext("Online"); ?></a></td>
<td class="listhdrr"><a href="#"><?=gettext("Lease Type"); ?></a></td>
</tr>
<?php
foreach ($leases as $data) {
if (($data['act'] == "active") || ($data['act'] == "static") || ($_GET['all'] == 1)) {
if ($data['act'] != "active" && $data['act'] != "static") {
$fspans = "<span class=\"gray\">";
$fspane = "</span>";
} else {
$fspans = $fspane = "";
}
// $lip = ip2ulong($data['ip']);
if ($data['act'] == "static") {
foreach ($config['dhcpdv6'] as $dhcpif => $dhcpifconf) {
if(is_array($dhcpifconf['staticmap'])) {
foreach ($dhcpifconf['staticmap'] as $staticent) {
if ($data['ip'] == $staticent['ipaddr']) {
$data['if'] = $dhcpif;
break;
}
}
}
/* exit as soon as we have an interface */
if ($data['if'] != "")
break;
}
} else {
foreach ($config['dhcpdv6'] as $dhcpif => $dhcpifconf) {
if (($lip >= ip2ulong($dhcpifconf['range']['from'])) && ($lip <= ip2ulong($dhcpifconf['range']['to']))) {
$data['if'] = $dhcpif;
break;
}
}
}
echo "<tr>\n";
echo "<td class=\"listlr\">{$fspans}{$data['ip']}{$fspane}&nbsp;</td>\n";
echo "<td class=\"listr\">{$fspans}{$data['duid']}{$fspane}&nbsp;</td>\n";
echo "<td class=\"listr\">{$fspans}" . htmlentities($data['hostname']) . "{$fspane}&nbsp;</td>\n";
if ($data['type'] != "static") {
echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['start']) . "{$fspane}&nbsp;</td>\n";
echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['end']) . "{$fspane}&nbsp;</td>\n";
} else {
echo "<td class=\"listr\">{$fspans} n/a {$fspane}&nbsp;</td>\n";
echo "<td class=\"listr\">{$fspans} n/a {$fspane}&nbsp;</td>\n";
}
echo "<td class=\"listr\">{$fspans}{$data['online']}{$fspane}&nbsp;</td>\n";
echo "<td class=\"listr\">{$fspans}{$data['act']}{$fspane}&nbsp;</td>\n";
if ($data['type'] == "dynamic") {
echo "<td valign=\"middle\"><a href=\"services_dhcpv6_edit.php?if={$data['if']}&duid={$data['duid']}&hostname={$data['hostname']}\">";
echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("add a static mapping for this MAC address") ."\"></a></td>\n";
} else {
echo "<td class=\"list\" valign=\"middle\">";
echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_plus_mo.gif\" width=\"17\" height=\"17\" border=\"0\"></td>\n";
}
/* Only show the button for offline dynamic leases */
if (($data['type'] == "dynamic") && ($data['online'] != "online")) {
echo "<td class=\"list\" valign=\"middle\"><a href=\"status_dhcpv6_leases.php?deleteip={$data['ip']}&all=" . htmlspecialchars($_GET['all']) . "\">";
echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_x.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("delete this DHCP lease") . "\"></a></td>\n";
}
echo "</tr>\n";
}
}
?>
</table>
<p>
<form action="status_dhcpv6_leases.php" method="GET">
<input type="hidden" name="order" value="<?=htmlspecialchars($_GET['order']);?>">
<?php if ($_GET['all']): ?>
<input type="hidden" name="all" value="0">
<input type="submit" class="formbtn" value="<?=gettext("Show active and static leases only"); ?>">
<?php else: ?>
<input type="hidden" name="all" value="1">
<input type="submit" class="formbtn" value="<?=gettext("Show all configured leases"); ?>">
<?php endif; ?>
</form>
<?php if($leases == 0): ?>
<p><strong><?=gettext("No leases file found. Is the DHCP server active"); ?>?</strong></p>
<?php endif; ?>
<?php include("fend.inc"); ?>
</body>
</html>

View File

@ -70,7 +70,7 @@ include("head.inc");
<br/>
<form action="status_filter_reload.php" method="POST" name="filter">
<input type="submit" value="Reload Filter" name="reloadfilter" id="reloadfilter">
<?php if (is_array($config["installedpackages"]["carpsettings"]["config"][0]) && $config["installedpackages"]["carpsettings"]["config"][0]["synchronizetoip"] != ""): ?>
<?php if (is_array($config["installedpackages"]["carpsettings"]) && is_array($config["installedpackages"]["carpsettings"]["config"][0]) && $config["installedpackages"]["carpsettings"]["config"][0]["synchronizetoip"] != ""): ?>
&nbsp;&nbsp;&nbsp;&nbsp;
<input type="submit" value="Force Config Sync" name="syncfilter" id="syncfilter">
<? endif; ?>

View File

@ -189,7 +189,7 @@ include("head.inc");
<?php if ($ifinfo['dhcplink'] != "down" && $ifinfo['pppoelink'] != "down" && $ifinfo['pptplink'] != "down"): ?>
<?php if ($ifinfo['ipaddr']): ?>
<tr>
<td width="22%" class="vncellt"><?=gettext("IP address");?></td>
<td width="22%" class="vncellt"><?=gettext("IPv4 address");?></td>
<td width="78%" class="listr">
<?=htmlspecialchars($ifinfo['ipaddr']);?>
&nbsp;
@ -197,19 +197,43 @@ include("head.inc");
</tr>
<?php endif; ?><?php if ($ifinfo['subnet']): ?>
<tr>
<td width="22%" class="vncellt"><?=gettext("Subnet mask");?></td>
<td width="22%" class="vncellt"><?=gettext("Subnet mask IPv4");?></td>
<td width="78%" class="listr">
<?=htmlspecialchars($ifinfo['subnet']);?>
</td>
</tr>
<?php endif; ?><?php if ($ifinfo['gateway']): ?>
<tr>
<td width="22%" class="vncellt"><?=gettext("Gateway");?></td>
<td width="22%" class="vncellt"><?=gettext("Gateway IPv4");?></td>
<td width="78%" class="listr">
<?=htmlspecialchars($config['interfaces'][$ifdescr]['gateway']);?>
<?=htmlspecialchars($ifinfo['gateway']);?>
</td>
</tr>
<?php endif; ?>
<?php if ($ifinfo['ipaddrv6']): ?>
<tr>
<td width="22%" class="vncellt"><?=gettext("IPv6 address");?></td>
<td width="78%" class="listr">
<?=htmlspecialchars($ifinfo['ipaddrv6']);?>
&nbsp;
</td>
</tr>
<?php endif; ?><?php if ($ifinfo['subnetv6']): ?>
<tr>
<td width="22%" class="vncellt"><?=gettext("Subnet mask IPv6");?></td>
<td width="78%" class="listr">
<?=htmlspecialchars($ifinfo['subnetv6']);?>
</td>
</tr>
<?php endif; ?><?php if ($ifinfo['gatewayv6']): ?>
<tr>
<td width="22%" class="vncellt"><?=gettext("Gateway IPv6");?></td>
<td width="78%" class="listr">
<?=htmlspecialchars($config['interfaces'][$ifdescr]['gatewayv6']);?>
<?=htmlspecialchars($ifinfo['gatewayv6']);?>
</td>
</tr>
<?php endif; if ($ifdescr == "wan" && file_exists("{$g['varetc_path']}/resolv.conf")): ?>
<tr>
<td width="22%" class="vncellt"><?=gettext("ISP DNS servers");?></td>

View File

@ -188,11 +188,11 @@ $speedlimit = ($upstream + $downstream);
/* Set default colors explicity, the theme can then override them below.
This prevents missing colors in themes from crashing the graphs. */
$colortrafficup = array("666666", "CCCCCC");
$colortrafficdown = array("990000", "CC0000");
$colortrafficup = array("666666", "CCCCCC", "b36666", "bd9090");
$colortrafficdown = array("990000", "CC0000", "b36666", "bd9090");
$colorpacketsup = array("666666", "CCCCCC", "b36666", "bd9090");
$colorpacketsdown = array("990000", "CC0000", "b36666", "bd9090");
$colortraffic95 = array("660000", "FF0000");
$colorpacketsup = array("666666", "CCCCCC");
$colorpacketsdown = array("990000", "CC0000");
$colorstates = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colorprocessor = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colormemory = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
@ -286,37 +286,72 @@ if((strstr($curdatabase, "-traffic.rrd")) && (file_exists("$rrddbpath$curdatabas
$graphcmd .= "DEF:$curif-in_bytes_block=$rrddbpath$curdatabase:inblock:AVERAGE ";
$graphcmd .= "DEF:$curif-out_bytes_block=$rrddbpath$curdatabase:outblock:AVERAGE ";
$graphcmd .= "DEF:$curif-in6_bytes_pass=$rrddbpath$curdatabase:inpass6:AVERAGE ";
$graphcmd .= "DEF:$curif-out6_bytes_pass=$rrddbpath$curdatabase:outpass6:AVERAGE ";
$graphcmd .= "DEF:$curif-in6_bytes_block=$rrddbpath$curdatabase:inblock6:AVERAGE ";
$graphcmd .= "DEF:$curif-out6_bytes_block=$rrddbpath$curdatabase:outblock6:AVERAGE ";
$graphcmd .= "CDEF:\"$curif-in_bits_pass=$curif-in_bytes_pass,8,*\" ";
$graphcmd .= "CDEF:\"$curif-out_bits_pass=$curif-out_bytes_pass,8,*\" ";
$graphcmd .= "CDEF:\"$curif-in_bits_block=$curif-in_bytes_block,8,*\" ";
$graphcmd .= "CDEF:\"$curif-out_bits_block=$curif-out_bytes_block,8,*\" ";
$graphcmd .= "CDEF:\"$curif-in6_bits_pass=$curif-in6_bytes_pass,8,*\" ";
$graphcmd .= "CDEF:\"$curif-out6_bits_pass=$curif-out6_bytes_pass,8,*\" ";
$graphcmd .= "CDEF:\"$curif-in6_bits_block=$curif-in6_bytes_block,8,*\" ";
$graphcmd .= "CDEF:\"$curif-out6_bits_block=$curif-out6_bytes_block,8,*\" ";
$graphcmd .= "CDEF:\"$curif-in_bytes=$curif-in_bytes_pass,$curif-in_bytes_block,+\" ";
$graphcmd .= "CDEF:\"$curif-out_bytes=$curif-out_bytes_pass,$curif-out_bytes_block,+\" ";
$graphcmd .= "CDEF:\"$curif-in_bits=$curif-in_bits_pass,$curif-in_bits_block,+\" ";
$graphcmd .= "CDEF:\"$curif-out_bits=$curif-out_bits_pass,$curif-out_bits_block,+\" ";
$graphcmd .= "CDEF:\"$curif-in6_bytes=$curif-in6_bytes_pass,$curif-in6_bytes_block,+\" ";
$graphcmd .= "CDEF:\"$curif-out6_bytes=$curif-out6_bytes_pass,$curif-out6_bytes_block,+\" ";
$graphcmd .= "CDEF:\"$curif-in6_bits=$curif-in6_bits_pass,$curif-in6_bits_block,+\" ";
$graphcmd .= "CDEF:\"$curif-out6_bits=$curif-out6_bits_pass,$curif-out6_bits_block,+\" ";
$graphcmd .= "CDEF:\"$curif-bits_io=$curif-in_bits,$curif-out_bits,+\" ";
$graphcmd .= "CDEF:\"$curif-out_bits_block_neg=$curif-out_bits_block,$multiplier,*\" ";
$graphcmd .= "CDEF:\"$curif-out_bits_pass_neg=$curif-out_bits_pass,$multiplier,*\" ";
$graphcmd .= "CDEF:\"$curif-bits6_io=$curif-in6_bits,$curif-out6_bits,+\" ";
$graphcmd .= "CDEF:\"$curif-out6_bits_block_neg=$curif-out6_bits_block,$multiplier,*\" ";
$graphcmd .= "CDEF:\"$curif-out6_bits_pass_neg=$curif-out6_bits_pass,$multiplier,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_in_pass=$curif-in_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_pass,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_out_pass=$curif-out_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_pass,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_in_block=$curif-in_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_block,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_out_block=$curif-out_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_block,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_in6_pass=$curif-in6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_pass,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_out6_pass=$curif-out6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_pass,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_in6_block=$curif-in6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_block,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_out6_block=$curif-out6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_block,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_pass=$curif-bytes_in_pass,$curif-bytes_out_pass,+\" ";
$graphcmd .= "CDEF:\"$curif-bytes_block=$curif-bytes_in_block,$curif-bytes_out_block,+\" ";
$graphcmd .= "CDEF:\"$curif-bytes_pass6=$curif-bytes_in6_pass,$curif-bytes_out6_pass,+\" ";
$graphcmd .= "CDEF:\"$curif-bytes_block6=$curif-bytes_in6_block,$curif-bytes_out6_block,+\" ";
$graphcmd .= "CDEF:\"$curif-bytes_in_t_pass=$curif-in_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_pass,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_out_t_pass=$curif-out_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_pass,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_in_t_block=$curif-in_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in_bytes_block,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_out_t_block=$curif-out_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out_bytes_block,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_in6_t_pass=$curif-in6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_pass,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_out6_t_pass=$curif-out6_bytes_pass,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_pass,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_in6_t_block=$curif-in6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-in6_bytes_block,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_out6_t_block=$curif-out6_bytes_block,0,$speedlimit,LIMIT,UN,0,$curif-out6_bytes_block,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-bytes_t_pass=$curif-bytes_in_t_pass,$curif-bytes_out_t_pass,+\" ";
$graphcmd .= "CDEF:\"$curif-bytes_t_block=$curif-bytes_in_t_block,$curif-bytes_out_t_block,+\" ";
$graphcmd .= "CDEF:\"$curif-bytes_t=$curif-bytes_in_t_pass,$curif-bytes_out_t_block,+\" ";
$graphcmd .= "CDEF:\"$curif-bytes_t_pass6=$curif-bytes_in6_t_pass,$curif-bytes_out6_t_pass,+\" ";
$graphcmd .= "CDEF:\"$curif-bytes_t_block6=$curif-bytes_in6_t_block,$curif-bytes_out6_t_block,+\" ";
$graphcmd .= "CDEF:\"$curif-bytes_t6=$curif-bytes_in6_t_pass,$curif-bytes_out6_t_block,+\" ";
$graphcmd .= "VDEF:\"$curif-in_bits_95=$curif-in_bits,95,PERCENT\" ";
$graphcmd .= "CDEF:\"$curif-out_bits_mul=$curif-out_bits,$multiplier,*\" ";
$perc = $multiplier > 0 ? "95" : "5";
@ -324,15 +359,20 @@ if((strstr($curdatabase, "-traffic.rrd")) && (file_exists("$rrddbpath$curdatabas
$graphcmd .= "AREA:\"$curif-in_bits_block#{$colortrafficdown[1]}:$curif-in-block\" ";
$graphcmd .= "AREA:\"$curif-in_bits_pass#{$colortrafficdown[0]}:$curif-in-pass:STACK\" ";
$graphcmd .= "AREA:\"$curif-in6_bits_block#{$colortrafficdown[3]}:$curif-in6-block:STACK\" ";
$graphcmd .= "AREA:\"$curif-in6_bits_pass#{$colortrafficdown[2]}:$curif-in6-pass:STACK\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "{$AREA}:\"$curif-out_bits_block_neg#{$colortrafficup[1]}:$curif-out-block\" ";
$graphcmd .= "{$AREA}:\"$curif-out_bits_pass_neg#{$colortrafficup[0]}:$curif-out-pass:STACK\" ";
$graphcmd .= "{$AREA}:\"$curif-out6_bits_block_neg#{$colortrafficup[3]}:$curif-out6-block:STACK\" ";
$graphcmd .= "{$AREA}:\"$curif-out6_bits_pass_neg#{$colortrafficup[2]}:$curif-out6-pass:STACK\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "HRULE:\"$curif-in_bits_95#{$colortraffic95[1]}:$curif-in (95%)\" ";
$graphcmd .= "HRULE:\"$curif-out_bits_95#{$colortraffic95[0]}:$curif-out (95%)\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"\t\t maximum average current period 95th percentile\\n\" ";
$graphcmd .= "COMMENT:\"in-pass\t\" ";
$graphcmd .= "COMMENT:\"\t\t\t\t maximum\t average\t\t current\t period\t 95th percentile\\n\" ";
$graphcmd .= "COMMENT:\"IPv4 in-pass\t\" ";
$graphcmd .= "GPRINT:\"$curif-in_bits_pass:MAX:%7.2lf %sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-in_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-in_bits_pass:LAST:%7.2lf %Sb/s\" ";
@ -340,25 +380,50 @@ if((strstr($curdatabase, "-traffic.rrd")) && (file_exists("$rrddbpath$curdatabas
$graphcmd .= "GPRINT:\"$curif-in_bits_95:%7.2lf %sb/s\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"out-pass\t\" ";
$graphcmd .= "COMMENT:\"IPv4 out-pass\t\" ";
$graphcmd .= "GPRINT:\"$curif-out_bits_pass:MAX:%7.2lf %sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-out_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-out_bits_pass:LAST:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-bytes_out_t_pass:AVERAGE:%7.2lf %sB o\" ";
$graphcmd .= "GPRINT:\"$curif-out_bits_95:%7.2lf %sb/s\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"in-block\t\" ";
$graphcmd .= "COMMENT:\"IPv4 in-block\t\" ";
$graphcmd .= "GPRINT:\"$curif-in_bits_block:MAX:%7.2lf %sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-in_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-in_bits_block:LAST:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-bytes_in_t_block:AVERAGE:%7.2lf %sB i\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"out-block\t\" ";
$graphcmd .= "COMMENT:\"IPv4 out-block\t\" ";
$graphcmd .= "GPRINT:\"$curif-out_bits_block:MAX:%7.2lf %sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-out_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-out_bits_block:LAST:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-bytes_out_t_block:AVERAGE:%7.2lf %sB o\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"IPv6 in-pass\t\" ";
$graphcmd .= "GPRINT:\"$curif-in6_bits_pass:MAX:%7.2lf %sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-in6_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-in6_bits_pass:LAST:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-bytes_in6_t_pass:AVERAGE:%7.2lf %sB i\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"IPv6 out-pass\t\" ";
$graphcmd .= "GPRINT:\"$curif-out6_bits_pass:MAX:%7.2lf %sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-out6_bits_pass:AVERAGE:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-out6_bits_pass:LAST:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-bytes_out6_t_pass:AVERAGE:%7.2lf %sB o\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"IPv6 in-block\t\" ";
$graphcmd .= "GPRINT:\"$curif-in6_bits_block:MAX:%7.2lf %sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-in6_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-in6_bits_block:LAST:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-bytes_in6_t_block:AVERAGE:%7.2lf %sB i\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"IPv6 out-block\t\" ";
$graphcmd .= "GPRINT:\"$curif-out6_bits_block:MAX:%7.2lf %sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-out6_bits_block:AVERAGE:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-out6_bits_block:LAST:%7.2lf %Sb/s\" ";
$graphcmd .= "GPRINT:\"$curif-bytes_out6_t_block:AVERAGE:%7.2lf %sB o\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t`date +\"%b %d %H\:%M\:%S %Y\"`\" ";
}
elseif(strstr($curdatabase, "-throughput.rrd")) {
@ -502,36 +567,67 @@ elseif((strstr($curdatabase, "-packets.rrd")) && (file_exists("$rrddbpath$curdat
$graphcmd .= "DEF:\"$curif-in_pps_block=$rrddbpath$curdatabase:inblock:AVERAGE\" ";
$graphcmd .= "DEF:\"$curif-out_pps_block=$rrddbpath$curdatabase:outblock:AVERAGE\" ";
$graphcmd .= "DEF:\"$curif-in6_pps_pass=$rrddbpath$curdatabase:inpass6:AVERAGE\" ";
$graphcmd .= "DEF:\"$curif-out6_pps_pass=$rrddbpath$curdatabase:outpass6:AVERAGE\" ";
$graphcmd .= "DEF:\"$curif-in6_pps_block=$rrddbpath$curdatabase:inblock6:AVERAGE\" ";
$graphcmd .= "DEF:\"$curif-out6_pps_block=$rrddbpath$curdatabase:outblock6:AVERAGE\" ";
$graphcmd .= "CDEF:\"$curif-in_pps=$curif-in_pps_pass,$curif-in_pps_block,+\" ";
$graphcmd .= "CDEF:\"$curif-out_pps=$curif-out_pps_pass,$curif-out_pps_block,+\" ";
$graphcmd .= "CDEF:\"$curif-out_pps_pass_neg=$curif-out_pps_pass,$multiplier,*\" ";
$graphcmd .= "CDEF:\"$curif-out_pps_block_neg=$curif-out_pps_block,$multiplier,*\" ";
$graphcmd .= "CDEF:\"$curif-in6_pps=$curif-in6_pps_pass,$curif-in6_pps_block,+\" ";
$graphcmd .= "CDEF:\"$curif-out6_pps=$curif-out6_pps_pass,$curif-out6_pps_block,+\" ";
$graphcmd .= "CDEF:\"$curif-out6_pps_pass_neg=$curif-out6_pps_pass,$multiplier,*\" ";
$graphcmd .= "CDEF:\"$curif-out6_pps_block_neg=$curif-out6_pps_block,$multiplier,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_in_pass=$curif-in_pps_pass,0,12500000,LIMIT,UN,0,$curif-in_pps_pass,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_out_pass=$curif-out_pps_pass,0,12500000,LIMIT,UN,0,$curif-out_pps_pass,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_in_block=$curif-in_pps_block,0,12500000,LIMIT,UN,0,$curif-in_pps_block,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_out_block=$curif-out_pps_block,0,12500000,LIMIT,UN,0,$curif-out_pps_block,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_in6_pass=$curif-in6_pps_pass,0,12500000,LIMIT,UN,0,$curif-in6_pps_pass,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_out6_pass=$curif-out6_pps_pass,0,12500000,LIMIT,UN,0,$curif-out6_pps_pass,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_in6_block=$curif-in6_pps_block,0,12500000,LIMIT,UN,0,$curif-in6_pps_block,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_out6_block=$curif-out6_pps_block,0,12500000,LIMIT,UN,0,$curif-out6_pps_block,IF,$average,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_io=$curif-in_pps,$curif-out_pps,+\" ";
$graphcmd .= "CDEF:\"$curif-pps_pass=$curif-pps_in_pass,$curif-pps_out_pass,+\" ";
$graphcmd .= "CDEF:\"$curif-pps_block=$curif-pps_in_block,$curif-pps_out_block,+\" ";
$graphcmd .= "CDEF:\"$curif-pps_io6=$curif-in6_pps,$curif-out6_pps,+\" ";
$graphcmd .= "CDEF:\"$curif-pps_pass6=$curif-pps_in6_pass,$curif-pps_out6_pass,+\" ";
$graphcmd .= "CDEF:\"$curif-pps_block6=$curif-pps_in6_block,$curif-pps_out6_block,+\" ";
$graphcmd .= "CDEF:\"$curif-pps_in_t_pass=$curif-in_pps_pass,0,12500000,LIMIT,UN,0,$curif-in_pps_pass,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_out_t_pass=$curif-out_pps_pass,0,12500000,LIMIT,UN,0,$curif-out_pps_pass,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_in_t_block=$curif-in_pps_block,0,12500000,LIMIT,UN,0,$curif-in_pps_block,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_out_t_block=$curif-out_pps_block,0,12500000,LIMIT,UN,0,$curif-out_pps_block,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_in6_t_pass=$curif-in6_pps_pass,0,12500000,LIMIT,UN,0,$curif-in6_pps_pass,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_out6_t_pass=$curif-out6_pps_pass,0,12500000,LIMIT,UN,0,$curif-out6_pps_pass,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_in6_t_block=$curif-in6_pps_block,0,12500000,LIMIT,UN,0,$curif-in6_pps_block,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_out6_t_block=$curif-out6_pps_block,0,12500000,LIMIT,UN,0,$curif-out6_pps_block,IF,$seconds,*\" ";
$graphcmd .= "CDEF:\"$curif-pps_t_pass=$curif-pps_in_t_pass,$curif-pps_out_t_pass,+\" ";
$graphcmd .= "CDEF:\"$curif-pps_t_block=$curif-pps_in_t_block,$curif-pps_out_t_block,+\" ";
$graphcmd .= "CDEF:\"$curif-pps_t_pass6=$curif-pps_in6_t_pass,$curif-pps_out6_t_pass,+\" ";
$graphcmd .= "CDEF:\"$curif-pps_t_block6=$curif-pps_in6_t_block,$curif-pps_out6_t_block,+\" ";
$graphcmd .= "AREA:\"$curif-in_pps_block#{$colorpacketsdown[1]}:$curif-in-block\" ";
$graphcmd .= "AREA:\"$curif-in_pps_pass#{$colorpacketsdown[0]}:$curif-in-pass:STACK\" ";
$graphcmd .= "AREA:\"$curif-in6_pps_block#{$colorpacketsdown[3]}:$curif-in6-block:STACK\" ";
$graphcmd .= "AREA:\"$curif-in6_pps_pass#{$colorpacketsdown[2]}:$curif-in6-pass:STACK\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "$AREA:\"$curif-out_pps_block_neg#{$colorpacketsup[1]}:$curif-out-block\" ";
$graphcmd .= "$AREA:\"$curif-out_pps_pass_neg#{$colorpacketsup[0]}:$curif-out-pass:STACK\" ";
$graphcmd .= "$AREA:\"$curif-out6_pps_block_neg#{$colorpacketsup[3]}:$curif-out6-block:STACK\" ";
$graphcmd .= "$AREA:\"$curif-out6_pps_pass_neg#{$colorpacketsup[2]}:$curif-out6-pass:STACK\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"\t\t maximum average current period\\n\" ";
$graphcmd .= "COMMENT:\"\t\t maximum\t\t average\t current\t period\\n\" ";
$graphcmd .= "COMMENT:\"in-pass\t\" ";
$graphcmd .= "GPRINT:\"$curif-in_pps_pass:MAX:%7.2lf %s pps\" ";
$graphcmd .= "GPRINT:\"$curif-in_pps_pass:AVERAGE:%7.2lf %S pps\" ";
@ -556,6 +652,32 @@ elseif((strstr($curdatabase, "-packets.rrd")) && (file_exists("$rrddbpath$curdat
$graphcmd .= "GPRINT:\"$curif-out_pps_block:LAST:%7.2lf %S pps\" ";
$graphcmd .= "GPRINT:\"$curif-pps_out_t_block:AVERAGE:%7.2lf %s pkts\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"in-pass6\t\" ";
$graphcmd .= "GPRINT:\"$curif-in6_pps_pass:MAX:%7.2lf %s pps\" ";
$graphcmd .= "GPRINT:\"$curif-in6_pps_pass:AVERAGE:%7.2lf %S pps\" ";
$graphcmd .= "GPRINT:\"$curif-in6_pps_pass:LAST:%7.2lf %S pps\" ";
$graphcmd .= "GPRINT:\"$curif-pps_in6_t_pass:AVERAGE:%7.2lf %s pkts\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"out-pass6\t\" ";
$graphcmd .= "GPRINT:\"$curif-out6_pps_pass:MAX:%7.2lf %s pps\" ";
$graphcmd .= "GPRINT:\"$curif-out6_pps_pass:AVERAGE:%7.2lf %S pps\" ";
$graphcmd .= "GPRINT:\"$curif-out6_pps_pass:LAST:%7.2lf %S pps\" ";
$graphcmd .= "GPRINT:\"$curif-pps_out6_t_pass:AVERAGE:%7.2lf %s pkts\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"in-block6\t\" ";
$graphcmd .= "GPRINT:\"$curif-in6_pps_block:MAX:%7.2lf %s pps\" ";
$graphcmd .= "GPRINT:\"$curif-in6_pps_block:AVERAGE:%7.2lf %S pps\" ";
$graphcmd .= "GPRINT:\"$curif-in6_pps_block:LAST:%7.2lf %S pps\" ";
$graphcmd .= "GPRINT:\"$curif-pps_in6_t_block:AVERAGE:%7.2lf %s pkts\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"out-pass6\t\" ";
$graphcmd .= "GPRINT:\"$curif-out6_pps_block:MAX:%7.2lf %s pps\" ";
$graphcmd .= "GPRINT:\"$curif-out6_pps_block:AVERAGE:%7.2lf %S pps\" ";
$graphcmd .= "GPRINT:\"$curif-out6_pps_block:LAST:%7.2lf %S pps\" ";
$graphcmd .= "GPRINT:\"$curif-pps_out6_t_block:AVERAGE:%7.2lf %s pkts\" ";
$graphcmd .= "COMMENT:\"\\n\" ";
$graphcmd .= "COMMENT:\"\t\t\t\t\t\t\t\t\t\t\t\t\t`date +\"%b %d %H\:%M\:%S %Y\"`\" ";
}
elseif((strstr($curdatabase, "-wireless.rrd")) && (file_exists("$rrddbpath$curdatabase"))) {
@ -975,7 +1097,7 @@ else {
/* check modification time to see if we need to generate image */
if (file_exists("$rrdtmppath$curdatabase-$curgraph.png")) {
if((time() - filemtime("$rrdtmppath$curdatabase-$curgraph.png")) >= 5 ) {
if((time() - filemtime("$rrdtmppath$curdatabase-$curgraph.png")) >= 15 ) {
if($data)
exec("$graphcmd 2>&1", $graphcmdoutput, $graphcmdreturn);
$graphcmdoutput = implode(" ", $graphcmdoutput) . $graphcmd;

View File

@ -284,7 +284,7 @@ include("head.inc");
?>
<tr>
<td>
<input name="dns<?php echo $dnscounter;?>" type="text" class="formfld unknown" id="dns<?php echo $dnscounter;?>" size="20" value="<?php echo $pconfig['dns'.$dnscounter];?>">
<input name="dns<?php echo $dnscounter;?>" type="text" class="formfld unknown" id="dns<?php echo $dnscounter;?>" size="28" value="<?php echo $pconfig['dns'.$dnscounter];?>">
</td>
<td>
<?php if ($multiwan): ?>

View File

@ -54,6 +54,10 @@ $a_servers = auth_get_authserver_list();
foreach ($a_servers as $servers)
$a_server[] = $servers;
if (!is_array($config['ca']))
$config['ca'] = array();
$a_ca =& $config['ca'];
$act = $_GET['act'];
if ($_POST['act'])
$act = $_POST['act'];
@ -87,6 +91,7 @@ if ($act == "edit") {
$pconfig['name'] = $a_server[$id]['name'];
if ($pconfig['type'] == "ldap") {
$pconfig['ldap_caref'] = $a_server[$id]['ldap_caref'];
$pconfig['ldap_host'] = $a_server[$id]['host'];
$pconfig['ldap_port'] = $a_server[$id]['ldap_port'];
$pconfig['ldap_urltype'] = $a_server[$id]['ldap_urltype'];
@ -168,7 +173,6 @@ if ($_POST) {
$reqdfieldsn[] = gettext("Bind user DN");
$reqdfieldsn[] = gettext("Bind Password");
}
}
if ($pconfig['type'] == "radius") {
@ -222,6 +226,8 @@ if ($_POST) {
if ($server['type'] == "ldap") {
if (!empty($pconfig['ldap_caref']))
$server['ldap_caref'] = $pconfig['ldap_caref'];
$server['host'] = $pconfig['ldap_host'];
$server['ldap_port'] = $pconfig['ldap_port'];
$server['ldap_urltype'] = $pconfig['ldap_urltype'];
@ -389,6 +395,7 @@ function select_clicked() {
url += '&urltype=' + document.getElementById("ldap_urltype").value;
url += '&proto=' + document.getElementById("ldap_protver").value;
url += '&authcn=' + document.getElementById("ldapauthcontainers").value;
url += '&cert=' + document.getElementById("ldap_caref").value;
var oWin = window.open(url,"pfSensePop","width=620,height=400,top=150,left=150");
if (oWin==null || typeof(oWin)=="undefined")
@ -490,6 +497,27 @@ function select_clicked() {
</select>
</td>
</tr>
<tr id="tls_ca">
<td width="22%" valign="top" class="vncell"><?=gettext("Peer Certificate Authority"); ?></td>
<td width="78%" class="vtable">
<?php if (count($a_ca)): ?>
<select name='ldap_caref' class="formselect">
<?php
foreach ($a_ca as $ca):
$selected = "";
if ($pconfig['ldap_caref'] == $ca['refid'])
$selected = "selected";
?>
<option value="<?=$ca['refid'];?>" <?=$selected;?>><?=$ca['descr'];?></option>
<?php endforeach; ?>
</select>
<br/><span><?=gettext("This option is used if 'SSL Encrypted' option is choosen.");?> <br/>
<?=gettext("It must match with the CA in the AD otherwise problems will arise.");?></span>
<?php else: ?>
<b>No Certificate Authorities defined.</b> <br/>Create one under <a href="system_camanager.php">System &gt; Cert Manager</a>.
<?php endif; ?>
</td>
</tr>
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol version");?></td>
<td width="78%" class="vtable">

View File

@ -145,9 +145,9 @@ if ($act == "addcert") {
if (!$input_errors) {
$reason = (empty($pconfig['crlreason'])) ? OCSP_REVOKED_STATUS_UNSPECIFIED : $pconfig['crlreason'];
cert_revoke($cert, $crl, $reason);
write_config("Revoked cert {$cert['descr']} in CRL {$crl['descr']}.");
require_once('openvpn.inc');
openvpn_refresh_crls();
write_config("Revoked cert {$cert['descr']} in CRL {$crl['descr']}.");
pfSenseHeader("system_crlmanager.php");
exit;
}
@ -172,10 +172,10 @@ if ($act == "delcert") {
}
$name = $thiscert['descr'];
if (cert_unrevoke($thiscert, $thiscrl)) {
write_config(sprintf(gettext("Deleted Certificate %s from CRL %s"), $name, $thiscrl['descr']));
$savemsg = sprintf(gettext("Deleted Certificate %s from CRL %s"), $name, $thiscrl['descr']) . "<br/>";
require_once('openvpn.inc');
openvpn_refresh_crls();
write_config(sprintf(gettext("Deleted Certificate %s from CRL %s"), $name, $thiscrl['descr']));
} else {
$savemsg = sprintf(gettext("Failed to delete Certificate %s from CRL %s"), $name, $thiscrl['descr']) . "<br/>";
}

View File

@ -113,11 +113,23 @@ if ($_POST) {
if (is_ipaddr($config['interfaces'][$_POST['interface']]['ipaddr']) && (empty($_POST['gateway']) || $_POST['gateway'] == "dynamic"))
$input_errors[] = gettext("Dynamic gateway values cannot be specified for interfaces with a static ip configuration.");
}
$parent_ip = get_interface_ip($_POST['interface']);
if (is_ipaddr($parent_ip)) {
if(is_ipaddrv6($_POST['gateway'])) {
$parent_ip = get_interface_ipv6($_POST['interface']);
} else {
$parent_ip = get_interface_ip($_POST['interface']);
}
if (is_ipaddrv4($parent_ip)) {
$parent_sn = get_interface_subnet($_POST['interface']);
if(!ip_in_subnet($_POST['gateway'], gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn) && !ip_in_interface_alias_subnet($_POST['interface'], $_POST['gateway'])) {
$input_errors[] = sprintf(gettext("The gateway address %s does not lie within the chosen interface's subnet."), $_POST['gateway']);
$subnet = gen_subnet($parent_ip, $parent_sn) . "/" . $parent_sn;
if(!ip_in_subnet($_POST['gateway'], $subnet) && !ip_in_interface_alias_subnet($_POST['interface'], $_POST['gateway'])) {
$input_errors[] = sprintf(gettext("The gateway address %s does not lie within the chosen interface's subnet '{$subnet}'."), $_POST['gateway']);
}
}
if (is_ipaddrv6($parent_ip)) {
$parent_sn = get_interface_subnetv6($_POST['interface']);
$subnet = gen_subnetv6($parent_ip, $parent_sn) . "/" . $parent_sn;
if(!ip_in_subnet($_POST['gateway'], $subnet)) {
$input_errors[] = sprintf(gettext("The gateway address %s does not lie within the chosen interface's subnet '{$subnet}'."), $_POST['gateway']);
}
}
}
@ -226,10 +238,18 @@ if ($_POST) {
if ($_POST['defaultgw'] == "yes" || $_POST['defaultgw'] == "on") {
$i = 0;
/* remove the default gateway bits for all gateways with the same address family */
foreach($a_gateway_item as $gw) {
unset($config['gateways']['gateway_item'][$i]['defaultgw']);
if ($gw['interface'] != $_POST['interface'] && $gw['defaultgw'])
$reloadif = $gw['interface'];
if(is_ipaddrv4($gateway['gateway']) && is_ipaddrv4($gw['gateway'])) {
unset($config['gateways']['gateway_item'][$i]['defaultgw']);
if ($gw['interface'] != $_POST['interface'] && $gw['defaultgw'])
$reloadif = $gw['interface'];
}
if(is_ipaddrv6($gateway['gateway']) && is_ipaddrv6($gw['gateway'])) {
unset($config['gateways']['gateway_item'][$i]['defaultgw']);
if ($gw['interface'] != $_POST['interface'] && $gw['defaultgw'])
$reloadif = $gw['interface'];
}
$i++;
}
$gateway['defaultgw'] = true;
@ -334,7 +354,7 @@ function show_advanced_gateway() {
<tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Gateway"); ?></td>
<td width="78%" class="vtable">
<input name="gateway" type="text" class="formfld host" id="gateway" size="40" value="<?php if ($pconfig['dynamic']) echo "dynamic"; else echo $pconfig['gateway']; ?>">
<input name="gateway" type="text" class="formfld host" id="gateway" size="28" value="<?php if ($pconfig['dynamic']) echo "dynamic"; else echo $pconfig['gateway']; ?>">
<br> <span class="vexpl"><?=gettext("Gateway IP address"); ?></span></td>
</tr>
<tr>
@ -354,7 +374,7 @@ function show_advanced_gateway() {
else
$monitor = htmlspecialchars($pconfig['monitor']);
?>
<input name="monitor" type="text" id="monitor" value="<?php echo $monitor; ?>" />
<input name="monitor" type="text" id="monitor" value="<?php echo $monitor; ?>" size="28" />
<strong><?=gettext("Alternative monitor IP"); ?></strong> <br />
<?=gettext("Enter an alternative address here to be used to monitor the link. This is used for the " .
"quality RRD graphs as well as the load balancer entries. Use this if the gateway does not respond " .

View File

@ -104,7 +104,12 @@ if ($_POST) {
}
/* check for overlaps */
$osn = gen_subnet($_POST['network'], $_POST['network_subnet']) . "/" . $_POST['network_subnet'];
if(is_ipaddrv6($_POST['network'])) {
$osn = Net_IPv6::compress(gen_subnetv6($_POST['network'], $_POST['network_subnet'])) . "/" . $_POST['network_subnet'];
}
if(is_ipaddrv4($_POST['network'])) {
$osn = gen_subnet($_POST['network'], $_POST['network_subnet']) . "/" . $_POST['network_subnet'];
}
foreach ($a_routes as $route) {
if (isset($id) && ($a_routes[$id]) && ($a_routes[$id] === $route))
continue;
@ -168,7 +173,7 @@ include("head.inc");
<input name="network" type="text" class="formfld unknown" id="network" size="20" value="<?=htmlspecialchars($pconfig['network']);?>">
/
<select name="network_subnet" class="formselect" id="network_subnet">
<?php for ($i = 32; $i >= 1; $i--): ?>
<?php for ($i = 128; $i >= 1; $i--): ?>
<option value="<?=$i;?>" <?php if ($i == $pconfig['network_subnet']) echo "selected"; ?>>
<?=$i;?>
</option>

View File

@ -47,6 +47,7 @@ if($_GET) {
$authcfg['ldap_urltype'] = $_GET['urltype'];
$authcfg['ldap_protver'] = $_GET['proto'];
$authcfg['ldap_authcn'] = explode(";", $_GET['authcn']);
$authcfg['ldap_caref'] = $_GET['cert'];
$ous = ldap_get_user_ous(true, $authcfg);
}

View File

@ -30,11 +30,11 @@
/* This file is included by the RRD graphing page and sets the colors */
$colortrafficup = array("666666", "CCCCCC");
$colortrafficdown = array("990000", "CC0000");
$colortrafficup = array("666666", "CCCCCC", "b36666", "bd9090");
$colortrafficdown = array("990000", "CC0000", "b36666", "bd9090");
$colorpacketsup = array("666666", "CCCCCC", "b36666", "bd9090");
$colorpacketsdown = array("990000", "CC0000", "b36666", "bd9090");
$colortraffic95 = array("660000", "FF0000");
$colorpacketsup = array("666666", "CCCCCC");
$colorpacketsdown = array("990000", "CC0000");
$colorstates = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colorprocessor = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colormemory = array('990000','a83c3c','b36666','bd9090','cccccc','000000');

View File

@ -30,11 +30,11 @@
/* This file is included by the RRD graphing page and sets the colors */
$colortrafficup = array("666666", "CCCCCC");
$colortrafficdown = array("990000", "CC0000");
$colortrafficup = array("666666", "CCCCCC", "b36666", "bd9090");
$colortrafficdown = array("990000", "CC0000", "b36666", "bd9090");
$colorpacketsup = array("666666", "CCCCCC", "b36666", "bd9090");
$colorpacketsdown = array("990000", "CC0000", "b36666", "bd9090");
$colortraffic95 = array("660000", "FF0000");
$colorpacketsup = array("666666", "CCCCCC");
$colorpacketsdown = array("990000", "CC0000");
$colorstates = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colorprocessor = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colormemory = array('990000','a83c3c','b36666','bd9090','cccccc','000000');

View File

@ -30,11 +30,11 @@
/* This file is included by the RRD graphing page and sets the colors */
$colortrafficup = array("666666", "CCCCCC");
$colortrafficdown = array("990000", "CC0000");
$colortrafficup = array("666666", "CCCCCC", "b36666", "bd9090");
$colortrafficdown = array("990000", "CC0000", "b36666", "bd9090");
$colorpacketsup = array("666666", "CCCCCC", "b36666", "bd9090");
$colorpacketsdown = array("990000", "CC0000", "b36666", "bd9090");
$colortraffic95 = array("660000", "FF0000");
$colorpacketsup = array("666666", "CCCCCC");
$colorpacketsdown = array("990000", "CC0000");
$colorstates = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colorprocessor = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colormemory = array('990000','a83c3c','b36666','bd9090','cccccc','000000');

View File

@ -30,11 +30,11 @@
/* This file is included by the RRD graphing page and sets the colors */
$colortrafficup = array("666666", "CCCCCC");
$colortrafficdown = array("990000", "CC0000");
$colortrafficup = array("666666", "CCCCCC", "b36666", "bd9090");
$colortrafficdown = array("990000", "CC0000", "b36666", "bd9090");
$colorpacketsup = array("666666", "CCCCCC", "b36666", "bd9090");
$colorpacketsdown = array("990000", "CC0000", "b36666", "bd9090");
$colortraffic95 = array("660000", "FF0000");
$colorpacketsup = array("666666", "CCCCCC");
$colorpacketsdown = array("990000", "CC0000");
$colorstates = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colorprocessor = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colormemory = array('990000','a83c3c','b36666','bd9090','cccccc','000000');

View File

@ -30,11 +30,11 @@
/* This file is included by the RRD graphing page and sets the colors */
$colortrafficup = array("666666", "CCCCCC");
$colortrafficdown = array("990000", "CC0000");
$colortrafficup = array("666666", "CCCCCC", "b36666", "bd9090");
$colortrafficdown = array("990000", "CC0000", "b36666", "bd9090");
$colorpacketsup = array("666666", "CCCCCC", "b36666", "bd9090");
$colorpacketsdown = array("990000", "CC0000", "b36666", "bd9090");
$colortraffic95 = array("660000", "FF0000");
$colorpacketsup = array("666666", "CCCCCC");
$colorpacketsdown = array("990000", "CC0000");
$colorstates = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colorprocessor = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colormemory = array('990000','a83c3c','b36666','bd9090','cccccc','000000');

View File

@ -30,11 +30,11 @@
/* This file is included by the RRD graphing page and sets the colors */
$colortrafficup = array("666666", "CCCCCC");
$colortrafficdown = array("990000", "CC0000");
$colortrafficup = array("666666", "CCCCCC", "b36666", "bd9090");
$colortrafficdown = array("990000", "CC0000", "b36666", "bd9090");
$colorpacketsup = array("666666", "CCCCCC", "b36666", "bd9090");
$colorpacketsdown = array("990000", "CC0000", "b36666", "bd9090");
$colortraffic95 = array("660000", "FF0000");
$colorpacketsup = array("666666", "CCCCCC");
$colorpacketsdown = array("990000", "CC0000");
$colorstates = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colorprocessor = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colormemory = array('990000','a83c3c','b36666','bd9090','cccccc','000000');

View File

@ -30,11 +30,11 @@
/* This file is included by the RRD graphing page and sets the colors */
$colortrafficup = array("666666", "CCCCCC");
$colortrafficdown = array("990000", "CC0000");
$colortrafficup = array("666666", "CCCCCC", "b36666", "bd9090");
$colortrafficdown = array("990000", "CC0000", "b36666", "bd9090");
$colorpacketsup = array("666666", "CCCCCC", "b36666", "bd9090");
$colorpacketsdown = array("990000", "CC0000", "b36666", "bd9090");
$colortraffic95 = array("660000", "FF0000");
$colorpacketsup = array("666666", "CCCCCC");
$colorpacketsdown = array("990000", "CC0000");
$colorstates = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colorprocessor = array('990000','a83c3c','b36666','bd9090','cccccc','000000');
$colormemory = array('990000','a83c3c','b36666','bd9090','cccccc','000000');

Some files were not shown because too many files have changed in this diff Show More