diff --git a/conf.default/config.xml b/conf.default/config.xml index b3cbaf40ab..bee323f80b 100644 --- a/conf.default/config.xml +++ b/conf.default/config.xml @@ -187,6 +187,7 @@ + @@ -202,6 +203,8 @@ + + 0 pass + inet lan @@ -431,11 +438,24 @@ + + pass + inet6 + + lan + + lan + + + + + ") { + $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; diff --git a/etc/inc/ipsec.inc b/etc/inc/ipsec.inc index 07c4869035..a64f1de20a 100644 --- a/etc/inc/ipsec.inc +++ b/etc/inc/ipsec.inc @@ -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); diff --git a/etc/inc/meta.inc b/etc/inc/meta.inc index 4091eac225..11295f532e 100644 --- a/etc/inc/meta.inc +++ b/etc/inc/meta.inc @@ -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; } -?> \ No newline at end of file +?> diff --git a/etc/inc/notices.inc b/etc/inc/notices.inc index 9edd32be72..314473d585 100644 --- a/etc/inc/notices.inc +++ b/etc/inc/notices.inc @@ -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)); } } diff --git a/etc/inc/openvpn.auth-user.php b/etc/inc/openvpn.auth-user.php index 35d79cd9cd..d36b5ff252 100755 --- a/etc/inc/openvpn.auth-user.php +++ b/etc/inc/openvpn.auth-user.php @@ -96,11 +96,6 @@ if (!$username || !$password) { /* Replaced by a sed with propper variables used below(ldap parameters). */ //