Index: npl/syn3/webint/firewall/firewall.up
===================================================================
--- npl/syn3/webint/firewall/firewall.up	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/firewall/firewall.up	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -27,4 +27,6 @@
 #iptables -I INPUT -i eth0 -p tcp --dport 3129 -j ACCEPT
 
+#masquerade all openvpn traffic to prevent routing issues (use if syn3 is not your default gateway)
+#iptables -t nat -IPOSTROUTING -s 10.8.0.0/24 -j MASQUERADE
 
 exit 0
Index: npl/syn3/webint/src/firewall/editfirewall.php
===================================================================
--- npl/syn3/webint/src/firewall/editfirewall.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/editfirewall.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -1,3 +1,3 @@
-<? 
+<?
 $LEVEL=10;
 include_once("../common.php");
@@ -35,7 +35,7 @@
 	list($port,$toport)=explode("-",$tmpport);
 
-	
+
 	//If forward port range, then fill select box else input field.
-	if($new_access=="pat" && $toport!="")	
+	if($new_access=="pat" && $toport!="")
 		$new_fwdports=$rule[fwdport];
 	else
@@ -89,7 +89,7 @@
 	!(
 		(
-			($new_srctype=="zone_INET") 
+			($new_srctype=="zone_INET")
 			&& ($new_dsttype=="zone_FW")
-		) 
+		)
 		|| ($new_dsttype=="ipadress")
 		|| ($new_dsttype=="ipblock")
@@ -121,4 +121,8 @@
 	{
 		return(_SelectBridgePort());
+	}
+	elseif (($hosttype=="openvpn_cert") && (!$host))
+	{
+		return(_SelectOpenVPNCertifcate());
 	}
 }
@@ -159,5 +163,5 @@
 	list($port,$toport)=explode("-",$tmpport);
 	if (
-		($dstservicetype!='service') || 
+		($dstservicetype!='service') ||
 		($proto!="tcp" && $proto!="udp") ||
 		(!$port)
@@ -218,5 +222,5 @@
 };
 
-	
+
 ///////////////////Html code
 ?>
@@ -225,7 +229,8 @@
 
 <? FormStart($TITLE);
-	
+
 	$bridgeportselect=GetBridges();
-	
+	$openvpnselect=GetOpenVPNCerts();
+
 	//transform for selectbox
 	foreach($IPBLOCKS as $name=>$block)
@@ -236,5 +241,5 @@
 	echo "<table class='ctrlgroup'><tr><td>";
 	echo _UseOf();
-	
+
 	//determine services and servicegroups
 	$services=services_Read();
@@ -254,9 +259,9 @@
 		}
 	}
-	
+
 	//sort them
 	natcasesort($grouptmp);
 	natcasesort($servicetmp);
-	
+
 	//merge services and service groups
 	foreach ($grouptmp as $groupname=>$groupdesc)
@@ -268,15 +273,15 @@
 		$servicesandgroups[_Service()]["service!$service"]=$servicedesc;
 	}
-		
-	
+
+
 	// Select destination service
-	SelectGrouped("new_dstserviceandtype",$servicesandgroups,$errors,"",1); 
+	SelectGrouped("new_dstserviceandtype",$servicesandgroups,$errors,"",1);
 	echo "<a href='editservice.php'> "._New()."</a>";
 	echo "</tr></table>";
 
-		
+
 	echo "<p>";
 	echo "<table class='ctrlgroup'><tr><td>";
-	
+
 	// Select source
 	echo _From()." ";
@@ -285,5 +290,5 @@
 	if ($new_srctype=="ipblock")
 	{
-		Select("new_src",$ipblocksselect,$errors,"",1); 
+		Select("new_src",$ipblocksselect,$errors,"",1);
 	}
 	elseif (($new_srctype=="hostname")||($new_srctype=="ipadress"))
@@ -293,5 +298,5 @@
 	elseif ($new_srctype=="bridgeport")
 	{
-		Select("new_src",$bridgeportselect,$errors,"",1); 
+		Select("new_src",$bridgeportselect,$errors,"",1);
 	}
 	elseif ($new_srctype=="mac_adres")
@@ -299,6 +304,10 @@
 		InputText("new_src",$errors);
 	}
+	elseif ($new_srctype=="openvpn_cert")
+	{
+		Select("new_src",$openvpnselect,$errors,"",1);
+	}
 	echo "</tr></table>";
-	
+
 	// Select destination (only for forward mode)
 	if ($mode=="forward")
@@ -313,5 +322,5 @@
 		if ($new_dsttype=="ipblock")
 		{
-			Select("new_dst",$ipblocksselect,$errors,"",1); 
+			Select("new_dst",$ipblocksselect,$errors,"",1);
 		}
 		elseif (($new_dsttype=="hostname")||($new_dsttype=="ipadress"))
@@ -321,5 +330,9 @@
 		elseif ($new_dsttype=="bridgeport")
 		{
-			Select("new_dst",$bridgeportselect,$errors,"",1); 
+			Select("new_dst",$bridgeportselect,$errors,"",1);
+		}
+		elseif ($new_dsttype=="openvpn_cert")
+		{
+			Select("new_dst",$openvpnselect,$errors,"",1);
 		}
 		echo "</tr></table>";
@@ -331,7 +344,7 @@
 		}
 	}
-	
-
-	
+
+
+
 	// Select access or port adress translation
 	echo "<p>";
@@ -358,11 +371,11 @@
 			InputText("new_fwdport",$errors,'',1,5);
 	}
-	
+
 	echo "</tr></table>";
 
 	echo "<p>";
-	Button("save",_Save(),""); 
-	//Button("del",_Del(),_ConfirmDeleteFirewallRule(HumanReadableRule($rulearray)),$ruletxt!=""); 
-FormEnd(); 
+	Button("save",_Save(),"");
+	//Button("del",_Del(),_ConfirmDeleteFirewallRule(HumanReadableRule($rulearray)),$ruletxt!="");
+FormEnd();
 Comment($ruletxt);
 
@@ -376,6 +389,6 @@
 	echo _ThereWasAnError();
 	echo "</p>";
-}	
-
-
-Foot(); 
+}
+
+
+Foot();
Index: npl/syn3/webint/src/firewall/firewall.php
===================================================================
--- npl/syn3/webint/src/firewall/firewall.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/firewall.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -1,4 +1,4 @@
-<?	
-	
+<?
+
 	$CONF_FIREWALL_DIR="/etc/firewall";
 	require_once("../common.php");
@@ -30,4 +30,5 @@
 		"mac_adres"	=>_MacAdress(),
 		"bridgeport"	=>_Bridgeport(),
+		"openvpn_cert"	=>_OpenvpnCertificate(),
 	);
 
@@ -45,11 +46,11 @@
 	$rulearray[dsttype] 	one of $HOSTTYPE
 	$rulearray[dst],		depepds on choosen dsttype (host or ipblock-name)
-	$rulearray[dstservice], one of $SERVICES: port/proto like 22/tcp 
+	$rulearray[dstservice], one of $SERVICES: port/proto like 22/tcp
 	$rulearray[access]		one of $ACCESSMODE (allow or deny or pat)
 	$rulearray[fwdhost]		in case of pat
 	$rulearray[fwdport]		in case of pat
 
-*/	
-	
+*/
+
 	/** Convert old comma seperated format to new config file
 	*/
@@ -73,5 +74,5 @@
 			else
 				$rulearray[enabled]=1;
-			
+
 			list(
 				$rulearray[srctype],
@@ -84,5 +85,5 @@
 				$rulearray[fwdhost],
 				$rulearray[fwdport]
-			)=explode(",",$ruletxt);		
+			)=explode(",",$ruletxt);
 
 			if ($rulearray[dstservice]=="all")
@@ -103,8 +104,8 @@
 		FileExport($CONF_FIREWALL,$rules);
 	}
-	
+
 
 	function ReadAdminIPs()
-	{	
+	{
 		global $CONF_ADMINS;
 		return(FileRead($CONF_ADMINS,1,1));
@@ -115,5 +116,5 @@
 	{
 		global $ADMIN_IPS;
-		
+
 		if (!$ip)
 		{
@@ -127,10 +128,10 @@
 		}
 	}
-	
+
 	function WriteAdminIPs($ips)
-	{	
+	{
 		global $CONF_ADMINS;
 		$ret=(FileWrite($CONF_ADMINS,$ips,1));
-		
+
 		global $ADMIN_IPS;
 		$ADMIN_IPS=ReadAdminIPs();
@@ -178,5 +179,5 @@
 		return $ret;
 	}
-				
+
 	//returns all the rules, with pat and blocking rules first
 	function firewall_Read()
@@ -186,5 +187,5 @@
 		uasort($rules,"firewall_SortCallback");
 		return ($rules);
-	}	
+	}
 
 	//changes rules with the specified rule-arrays.
@@ -195,5 +196,5 @@
 	{
 		global $CONF_FIREWALL;
-		
+
 		//cleanup the rule a bit
 		if (strstr($newrule[dsttype],"zone_"))
@@ -206,4 +207,5 @@
 		}
 
+		UpdateOpenVPNIpsets();
 		$rules=firewall_Read();
 
@@ -246,14 +248,14 @@
 
 		//store the new config
-		firewall_Write($rules);		
+		firewall_Write($rules);
 
 		//call iptables backend
 		$err=IptablesChangeRule($oldrule,$newrule, $id);
-		
+
 		//change any existing comment
 		Comment_rename($oldid,$id);
 
 		//log after everything is fixed
-		LogInfo($log);	
+		LogInfo($log);
 	}
 
@@ -315,16 +317,16 @@
 			$dstservice_txt=_Group().": ".$rulearray[dstservice];
 		}
-		
-		//no definition found anymore?		
+
+		//no definition found anymore?
 		if (!$dstservice_txt)
 		{
 			$dstservice_txt="$rulearray[dstservice] (?)";
 		}
-		
+
 		if ($rulearray[access]=="pat")
 		{
 			$fwd=$rulearray[fwdhost].":".$rulearray[fwdport];
 		}
-		
+
 		return _HumanReadableRule(
 			$dstservice_txt,
@@ -352,7 +354,37 @@
 			list($name,$bla,$port)=explode("/",$bridge);
 			$ret[$port]="$port ($name)";
-			
+
 		}
 		natcasesort($ret);
 		return $ret;
 	}
+
+	/* Get list of active openvpn certificates, for selectbox  */
+	function GetOpenVPNCerts()
+	{
+		require_once("../openvpn/model.php");
+		$certs=openvpn_List();
+		foreach ($certs as $cert=>$status)
+		{
+			if ($status=="V")
+				$ret[$cert]="$cert";
+		}
+		return($ret);
+
+	}
+
+	/* Make sure all openvpn ipsets exist */
+	function UpdateOpenVPNIpsets()
+	{
+
+		require_once("../openvpn/model.php");
+		$certs=openvpn_List();
+		Cmd("ipset list -n|grep ^openvpn_cert", "", $existing_certs);
+		foreach ($certs as $cert=>$status)
+		{
+			if ($status=="V" && !in_array("openvpn_cert_$cert", $existing_certs))
+			{
+				SafeExec("ipset create openvpn_cert_$cert hash:ip");
+			}
+		}
+	}
Index: npl/syn3/webint/src/firewall/iptables.php
===================================================================
--- npl/syn3/webint/src/firewall/iptables.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/iptables.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -170,4 +170,9 @@
 			}
 		}
+		//openvpn certificate
+		elseif ($rule[srctype]=="openvpn_cert")
+		{
+			$src=" -m set --match-set openvpn_cert_".$rule[src]." src";
+		}
 		//this server
 		else
@@ -213,4 +218,9 @@
 				$param.=" -m policy --pol none --dir out -o ".$ZONES[$rule[dsttype]];
 			}
+		}
+		//openvpn certificate
+		elseif ($rule[dsttype]=="openvpn_cert")
+		{
+			$dst=" -m set --match-set openvpn_cert_".$rule[dst]." dst";
 		}
 		//this server
@@ -398,4 +408,6 @@
 		LogInfo(_LogRestartingFirewall());
 
+		UpdateOpenVPNIpsets();
+		
 		$rules=firewall_Read();
 
Index: npl/syn3/webint/src/firewall/lang_de.php
===================================================================
--- npl/syn3/webint/src/firewall/lang_de.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/lang_de.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -229,4 +229,8 @@
 );}
 
+function _OpenvpnCertificate($a="",$b="",$c="",$d="") { return (
+	"OpenVPN certificate"
+);}
+
 function _OverviewAdministratorIps($a='',$b='') { return (
 	"Ãbersicht ÃŒber Administratoren-IPs"
@@ -289,4 +293,8 @@
 );}
 
+function _SelectOpenVPNCertifcate($a="",$b="",$c="",$d="") { return (
+	"Select a OpenVPN certificate"
+);}
+
 function _SelectPortRange($a="",$b="",$c="",$d="") { return (
 	"Select portrange"
Index: npl/syn3/webint/src/firewall/lang_deD.php
===================================================================
--- npl/syn3/webint/src/firewall/lang_deD.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/lang_deD.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -230,4 +230,8 @@
 );}
 
+function _OpenvpnCertificate($a="",$b="",$c="",$d="") { LangDebug("OpenVPN certificate", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?src_lang=en&add_langID=de&add_labelID=_OpenvpnCertificate");return (
+	"OpenVPN certificate"
+);}
+
 function _OverviewAdministratorIps($a='',$b='') { LangDebug("Ãbersicht ÃŒber Administratoren-IPs", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?edit_ID=3758");return (
 	"Ãbersicht ÃŒber Administratoren-IPs"
@@ -290,4 +294,8 @@
 );}
 
+function _SelectOpenVPNCertifcate($a="",$b="",$c="",$d="") { LangDebug("Select a OpenVPN certificate", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?src_lang=en&add_langID=de&add_labelID=_SelectOpenVPNCertifcate");return (
+	"Select a OpenVPN certificate"
+);}
+
 function _SelectPortRange($a="",$b="",$c="",$d="") { LangDebug("Select portrange", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?src_lang=en&add_langID=de&add_labelID=_SelectPortRange");return (
 	"Select portrange"
Index: npl/syn3/webint/src/firewall/lang_en.php
===================================================================
--- npl/syn3/webint/src/firewall/lang_en.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/lang_en.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -228,4 +228,8 @@
 );}
 
+function _OpenvpnCertificate($a="",$b="",$c="",$d="") { return (
+	"OpenVPN certificate"
+);}
+
 function _OverviewAdministratorIps($a='',$b='') { return (
 	"Overview administrator IPs"
@@ -288,4 +292,8 @@
 );}
 
+function _SelectOpenVPNCertifcate($a="",$b="",$c="",$d="") { return (
+	"Select a OpenVPN certificate"
+);}
+
 function _SelectPortRange($a="",$b="",$c="",$d="") { return (
 	"Select portrange"
Index: npl/syn3/webint/src/firewall/lang_enD.php
===================================================================
--- npl/syn3/webint/src/firewall/lang_enD.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/lang_enD.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -228,4 +228,8 @@
 );}
 
+function _OpenvpnCertificate($a="",$b="",$c="",$d="") { LangDebug("OpenVPN certificate", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?edit_ID=8329");return (
+	"OpenVPN certificate"
+);}
+
 function _OverviewAdministratorIps($a='',$b='') { LangDebug("Overview administrator IPs", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?edit_ID=1758");return (
 	"Overview administrator IPs"
@@ -288,4 +292,8 @@
 );}
 
+function _SelectOpenVPNCertifcate($a="",$b="",$c="",$d="") { LangDebug("Select a OpenVPN certificate", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?edit_ID=8332");return (
+	"Select a OpenVPN certificate"
+);}
+
 function _SelectPortRange($a="",$b="",$c="",$d="") { LangDebug("Select portrange", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?edit_ID=7192");return (
 	"Select portrange"
Index: npl/syn3/webint/src/firewall/lang_nl.php
===================================================================
--- npl/syn3/webint/src/firewall/lang_nl.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/lang_nl.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -228,4 +228,8 @@
 );}
 
+function _OpenvpnCertificate($a="",$b="",$c="",$d="") { return (
+	"OpenVPN certificaat"
+);}
+
 function _OverviewAdministratorIps($a='',$b='') { return (
 	"Overzicht administrator IPs"
@@ -288,4 +292,8 @@
 );}
 
+function _SelectOpenVPNCertifcate($a="",$b="",$c="",$d="") { return (
+	"Selecteer een OpenVPN certificaat"
+);}
+
 function _SelectPortRange($a="",$b="",$c="",$d="") { return (
 	"Selecteer portrange"
Index: npl/syn3/webint/src/firewall/lang_nlD.php
===================================================================
--- npl/syn3/webint/src/firewall/lang_nlD.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/lang_nlD.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -228,4 +228,8 @@
 );}
 
+function _OpenvpnCertificate($a="",$b="",$c="",$d="") { LangDebug("OpenVPN certificaat", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?edit_ID=8330");return (
+	"OpenVPN certificaat"
+);}
+
 function _OverviewAdministratorIps($a='',$b='') { LangDebug("Overzicht administrator IPs", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?edit_ID=794");return (
 	"Overzicht administrator IPs"
@@ -288,4 +292,8 @@
 );}
 
+function _SelectOpenVPNCertifcate($a="",$b="",$c="",$d="") { LangDebug("Selecteer een OpenVPN certificaat", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?edit_ID=8331");return (
+	"Selecteer een OpenVPN certificaat"
+);}
+
 function _SelectPortRange($a="",$b="",$c="",$d="") { LangDebug("Selecteer portrange", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?edit_ID=7191");return (
 	"Selecteer portrange"
Index: npl/syn3/webint/src/firewall/lang_pl.php
===================================================================
--- npl/syn3/webint/src/firewall/lang_pl.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/lang_pl.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -229,4 +229,8 @@
 );}
 
+function _OpenvpnCertificate($a="",$b="",$c="",$d="") { return (
+	"OpenVPN certificate"
+);}
+
 function _OverviewAdministratorIps($a='',$b='') { return (
 	"Opis ogÃ³lny numerÃ³w IP administratora"
@@ -289,4 +293,8 @@
 );}
 
+function _SelectOpenVPNCertifcate($a="",$b="",$c="",$d="") { return (
+	"Select a OpenVPN certificate"
+);}
+
 function _SelectPortRange($a="",$b="",$c="",$d="") { return (
 	"Select portrange"
Index: npl/syn3/webint/src/firewall/lang_plD.php
===================================================================
--- npl/syn3/webint/src/firewall/lang_plD.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/lang_plD.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -230,4 +230,8 @@
 );}
 
+function _OpenvpnCertificate($a="",$b="",$c="",$d="") { LangDebug("OpenVPN certificate", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?src_lang=en&add_langID=pl&add_labelID=_OpenvpnCertificate");return (
+	"OpenVPN certificate"
+);}
+
 function _OverviewAdministratorIps($a='',$b='') { LangDebug("Opis ogÃ³lny numerÃ³w IP administratora", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?edit_ID=2913");return (
 	"Opis ogÃ³lny numerÃ³w IP administratora"
@@ -290,4 +294,8 @@
 );}
 
+function _SelectOpenVPNCertifcate($a="",$b="",$c="",$d="") { LangDebug("Select a OpenVPN certificate", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?src_lang=en&add_langID=pl&add_labelID=_SelectOpenVPNCertifcate");return (
+	"Select a OpenVPN certificate"
+);}
+
 function _SelectPortRange($a="",$b="",$c="",$d="") { LangDebug("Select portrange", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?src_lang=en&add_langID=pl&add_labelID=_SelectPortRange");return (
 	"Select portrange"
Index: npl/syn3/webint/src/firewall/lang_pt.php
===================================================================
--- npl/syn3/webint/src/firewall/lang_pt.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/lang_pt.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -228,4 +228,8 @@
 );}
 
+function _OpenvpnCertificate($a="",$b="",$c="",$d="") { return (
+	"OpenVPN certificate"
+);}
+
 function _OverviewAdministratorIps($a='',$b='') { return (
 	"Overview administrator IPs"
@@ -288,4 +292,8 @@
 );}
 
+function _SelectOpenVPNCertifcate($a="",$b="",$c="",$d="") { return (
+	"Select a OpenVPN certificate"
+);}
+
 function _SelectPortRange($a="",$b="",$c="",$d="") { return (
 	"Select portrange"
Index: npl/syn3/webint/src/firewall/lang_ptD.php
===================================================================
--- npl/syn3/webint/src/firewall/lang_ptD.php	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/src/firewall/lang_ptD.php	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -228,4 +228,8 @@
 );}
 
+function _OpenvpnCertificate($a="",$b="",$c="",$d="") { LangDebug("OpenVPN certificate", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?src_lang=en&add_langID=pt&add_labelID=_OpenvpnCertificate");return (
+	"OpenVPN certificate"
+);}
+
 function _OverviewAdministratorIps($a='',$b='') { LangDebug("Overview administrator IPs", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?src_lang=en&add_langID=pt&add_labelID=_OverviewAdministratorIps");return (
 	"Overview administrator IPs"
@@ -288,4 +292,8 @@
 );}
 
+function _SelectOpenVPNCertifcate($a="",$b="",$c="",$d="") { LangDebug("Select a OpenVPN certificate", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?src_lang=en&add_langID=pt&add_labelID=_SelectOpenVPNCertifcate");return (
+	"Select a OpenVPN certificate"
+);}
+
 function _SelectPortRange($a="",$b="",$c="",$d="") { LangDebug("Select portrange", "http://www.syn-3.nl/mosaddphp/translate/editlang.php?src_lang=en&add_langID=pt&add_labelID=_SelectPortRange");return (
 	"Select portrange"
Index: npl/syn3/webint/webint.build
===================================================================
--- npl/syn3/webint/webint.build	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/webint.build	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -1,1 +1,1 @@
-6570
+6571
Index: npl/syn3/webint/webint.md5
===================================================================
--- npl/syn3/webint/webint.md5	(revision 94a6f3795d5522928aebd7eb4827ffa79aef1883)
+++ npl/syn3/webint/webint.md5	(revision 834b847f84f829e8bf959b0ed462e89510e3691e)
@@ -10,5 +10,5 @@
 d41d8cd98f00b204e9800998ecf8427e  ./firewall/errors
 7e00dd9b440ab33f4575c0e8124c72c8  ./firewall/firewall
-e8411d7a7ed5673e7324590d0926340d  ./firewall/firewall.up
+f060a5f2197070d7788ef040df885882  ./firewall/firewall.up
 050405593801221c1860d21a6eb110a7  ./firewall/firewall.up.vlannat
 1ab7f782053ef2c46473d8b12ea89cd9  ./firewall/ipblocks
@@ -215,19 +215,19 @@
 a1b108c5e90aab1f4c3b430486c5d55b  ./src/file.php
 486abaff68646edf89c07b81584ee089  ./src/firewall/editblock.php
-1bf27d86734051c93f9f30bb5f2a5e1b  ./src/firewall/editfirewall.php
+1097d884c6e0bb582a93651d7f93bd83  ./src/firewall/editfirewall.php
 ec80e8eb13abb86834f3cb0c19c162b3  ./src/firewall/editservice.php
-a1a2ceefec14f15fef06b2b19d6ba29f  ./src/firewall/firewall.php
+a866420eedbe32fed4f5426f34a52f37  ./src/firewall/firewall.php
 f63d3ab0fbe4b9d9aaaadcc998307e27  ./src/firewall/ipblocks.php
-93eba784bb406162baf8e3b236b790ec  ./src/firewall/iptables.php
-7d164f2b2d3d29ff5685ca8bcd88fb6f  ./src/firewall/lang_deD.php
-83ac93a41f7b64d992af71043ce2fe14  ./src/firewall/lang_de.php
-23a1129fb99ebd86910b8d74b73c9ffc  ./src/firewall/lang_enD.php
-6de48bc584bf61098701c332acbc24e0  ./src/firewall/lang_en.php
-38907cc4c595e98cde8ef6b42c304b93  ./src/firewall/lang_nlD.php
-5dc0a9cb247365443cfc88099f16fc1b  ./src/firewall/lang_nl.php
-32626cb8860c420ef4842754e72b040e  ./src/firewall/lang_plD.php
-1a941b16d6f4a9746aba925d2040a849  ./src/firewall/lang_pl.php
-14530990decf186858de75c0f88861e6  ./src/firewall/lang_ptD.php
-6de48bc584bf61098701c332acbc24e0  ./src/firewall/lang_pt.php
+bf0383d9e3099e491b827046420c1fe3  ./src/firewall/iptables.php
+970acf65a6cc08371792a37f4c903aa8  ./src/firewall/lang_deD.php
+6580484024428d62b96fb9beb2a691c0  ./src/firewall/lang_de.php
+0b21a50aa3304d8bce7d54b359a9878c  ./src/firewall/lang_enD.php
+456247175e5e6476229bc0bb4ebaae3a  ./src/firewall/lang_en.php
+99f8911b4d5b4ff71f5eb64f36738c1d  ./src/firewall/lang_nlD.php
+2fd84f30fa54ffa31a5d287ad78e6ff4  ./src/firewall/lang_nl.php
+5bbd8eceef4790ca6c28164882054ef8  ./src/firewall/lang_plD.php
+2c7673e3c6769e3a298a36f320042f9c  ./src/firewall/lang_pl.php
+00114a7491d267c12e7b041daaeb643c  ./src/firewall/lang_ptD.php
+456247175e5e6476229bc0bb4ebaae3a  ./src/firewall/lang_pt.php
 b4e77ff1a4ff1fd835bc458a5b1a9452  ./src/firewall/listadmins.php
 0995d8f4569dfef3ca9fba5641cea9f4  ./src/firewall/listblocks.php
@@ -1160,6 +1160,6 @@
 3d8b121024940b3004ca67bacb88b74e  ./updatelang.sh
 e15c0d77cf349ff3f2c55bf1b48ea567  ./upload.sh
-96052a8069db6a4adb15bade12539e93  ./webint.pkg
+4613738b6704f1e2162e10a4debca9a6  ./webint.pkg
 05d46c478b4e8c14eafeb686a5b8c064  ./webint.SlackBuild
-d1e241fb9d550d019ce72563052dab02  ./webint.SlackBuild.log.gz
+313c81050c7bc6964d01fe44c94dbfb1  ./webint.SlackBuild.log.gz
 693ffd7c59a1fe2b34276bec14f3ebfb  ./zones.conf
