diff --git a/ajax/openvpn/activate_ovpncfg.php b/ajax/openvpn/activate_ovpncfg.php index 2a8542a9..235f01eb 100644 --- a/ajax/openvpn/activate_ovpncfg.php +++ b/ajax/openvpn/activate_ovpncfg.php @@ -5,21 +5,14 @@ require_once '../../includes/functions.php'; if (isset($_POST['cfg_id'])) { $ovpncfg_id = $_POST['cfg_id']; - $ovpncfg_path = pathinfo(RASPI_OPENVPN_CLIENT_CONFIG, PATHINFO_DIRNAME).'/'; - $ovpncfg_files = $ovpncfg_path .$ovpncfg_id.'_*.conf'; + $ovpncfg_client = RASPI_OPENVPN_CLIENT_PATH.$ovpncfg_id.'_client.conf'; + $ovpncfg_login = RASPI_OPENVPN_CLIENT_PATH.$ovpncfg_id.'_login.conf'; - // move currently active profile - $meta = file_get_meta(RASPI_OPENVPN_CLIENT_CONFIG,'#\sfilename\s(.*)'); - $ovpncfg_client = $ovpncfg_path .$meta.'_client.conf'; - $ovpncfg_login = $ovpncfg_path .$meta.'_login.conf'; - exec("sudo mv ".RASPI_OPENVPN_CLIENT_CONFIG." $ovpncfg_client", $return); - exec("sudo mv ".RASPI_OPENVPN_CLIENT_LOGIN." $ovpncfg_login", $return); - - // replace with selected profile - $ovpncfg_client = $ovpncfg_path .$ovpncfg_id.'_client.conf'; - $ovpncfg_login = $ovpncfg_path .$ovpncfg_id.'_login.conf'; - exec("sudo mv $ovpncfg_client ".RASPI_OPENVPN_CLIENT_CONFIG, $return); - exec("sudo mv $ovpncfg_login ".RASPI_OPENVPN_CLIENT_LOGIN, $return); + // remove existing client config +login and symbolically link the selected one + system("sudo rm ".RASPI_OPENVPN_CLIENT_CONFIG, $return); + system("sudo ln -s $ovpncfg_client ".RASPI_OPENVPN_CLIENT_CONFIG, $return); + system("sudo rm ".RASPI_OPENVPN_CLIENT_LOGIN, $return); + system("sudo ln -s $ovpncfg_login ".RASPI_OPENVPN_CLIENT_LOGIN, $return); // restart service exec("sudo /bin/systemctl stop openvpn-client@client", $return); diff --git a/config/config.php b/config/config.php index 8003a320..44a46076 100755 --- a/config/config.php +++ b/config/config.php @@ -18,9 +18,9 @@ define('RASPI_DHCPCD_CONFIG', '/etc/dhcpcd.conf'); define('RASPI_WPA_SUPPLICANT_CONFIG', '/etc/wpa_supplicant/wpa_supplicant.conf'); define('RASPI_HOSTAPD_CTRL_INTERFACE', '/var/run/hostapd'); define('RASPI_WPA_CTRL_INTERFACE', '/var/run/wpa_supplicant'); +define('RASPI_OPENVPN_CLIENT_PATH', '/etc/openvpn/client/'); define('RASPI_OPENVPN_CLIENT_CONFIG', '/etc/openvpn/client/client.conf'); define('RASPI_OPENVPN_CLIENT_LOGIN', '/etc/openvpn/client/login.conf'); -define('RASPI_OPENVPN_SERVER_CONFIG', '/etc/openvpn/server/server.conf'); define('RASPI_WIREGUARD_PATH', '/etc/wireguard/'); define('RASPI_WIREGUARD_CONFIG', RASPI_WIREGUARD_PATH.'wg0.conf'); define('RASPI_TORPROXY_CONFIG', '/etc/tor/torrc'); diff --git a/includes/defaults.php b/includes/defaults.php index 1c87e4a5..cba04a1b 100755 --- a/includes/defaults.php +++ b/includes/defaults.php @@ -23,9 +23,9 @@ $defaults = [ 'RASPI_WPA_SUPPLICANT_CONFIG' => '/etc/wpa_supplicant/wpa_supplicant.conf', 'RASPI_HOSTAPD_CTRL_INTERFACE' => '/var/run/hostapd', 'RASPI_WPA_CTRL_INTERFACE' => '/var/run/wpa_supplicant', + 'RASPI_OPENVPN_CLIENT_PATH' => '/etc/openvpn/client/', 'RASPI_OPENVPN_CLIENT_CONFIG' => '/etc/openvpn/client/client.conf', 'RASPI_OPENVPN_CLIENT_LOGIN' => '/etc/openvpn/client/login.conf', - 'RASPI_OPENVPN_SERVER_CONFIG' => '/etc/openvpn/server/server.conf', 'RASPI_WIREGUARD_PATH' => '/etc/wireguard/', 'RASPI_WIREGUARD_CONFIG' => RASPI_WIREGUARD_PATH.'wg0.conf', 'RASPI_TORPROXY_CONFIG' => '/etc/tor/torrc', diff --git a/includes/functions.php b/includes/functions.php index 0b1a11c4..93c609a3 100755 --- a/includes/functions.php +++ b/includes/functions.php @@ -270,28 +270,6 @@ function file_get_meta($filename, $pattern) } } -/** - * Renames an openvpn client config with the 'filename' header comment - * - * @param string file - * @return boolean - */ -function file_move_config($file) -{ - if(file_exists($file)) { - $file_data = file_get_contents($file); - preg_match('/^#\sfilename\s(.*)/i', $file_data, $matched); - $renamed = pathinfo($file, PATHINFO_DIRNAME).'/'. - $matched[1] .'_'.pathinfo($file, PATHINFO_FILENAME).'.'. - pathinfo($file, PATHINFO_EXTENSION); - if (!file_exists($renamed)) { - $return = system("sudo mv $file $renamed", $return); - } else { - return false; - } - } -} - /** * Callback function for array_filter * diff --git a/includes/openvpn.php b/includes/openvpn.php index c5b00d1c..711c1c45 100755 --- a/includes/openvpn.php +++ b/includes/openvpn.php @@ -53,7 +53,7 @@ function DisplayOpenVPNConfig() $authUser = current($auth); $authPassword = next($auth); } - $clients = preg_grep('/client.(conf)$/', scandir(pathinfo(RASPI_OPENVPN_CLIENT_CONFIG, PATHINFO_DIRNAME))); + $clients = preg_grep('/_client.(conf)$/', scandir(pathinfo(RASPI_OPENVPN_CLIENT_CONFIG, PATHINFO_DIRNAME))); $logEnable = 0; if (!empty($_POST) && !isset($_POST['log-openvpn'])) { @@ -158,36 +158,34 @@ function SaveOpenVPNConfig($status, $file, $authUser, $authPassword) throw new RuntimeException('Unable to move uploaded file'); } - // Good file upload, update auth credentials if present - $prepend = '# filename '.pathinfo($file['name'], PATHINFO_FILENAME) .PHP_EOL; if (!empty($authUser) && !empty($authPassword)) { $auth_flag = 1; // Move tmp authdata to /etc/openvpn/login.conf $auth.= $authUser .PHP_EOL . $authPassword .PHP_EOL; file_put_contents($tmp_authdata, $auth); - file_prepend_data($tmp_authdata, $prepend); - file_move_config(RASPI_OPENVPN_CLIENT_LOGIN); chmod($tmp_authdata, 0644); - system("sudo cp $tmp_authdata " . RASPI_OPENVPN_CLIENT_LOGIN, $return); + $client_auth = RASPI_OPENVPN_CLIENT_PATH.pathinfo($file['name'], PATHINFO_FILENAME).'_login.conf'; + system("sudo cp $tmp_authdata $client_auth", $return); + system("sudo rm ".RASPI_OPENVPN_CLIENT_LOGIN, $return); + system("sudo ln -s $client_auth ".RASPI_OPENVPN_CLIENT_LOGIN, $return); if ($return !=0) { $status->addMessage('Unable to save client auth credentials', 'danger'); } } - // Prepend filname tag to .ovpn client config - file_prepend_data($tmp_ovpnclient, $prepend); - // Set iptables rules and, optionally, auth-user-pass exec("sudo /etc/raspap/openvpn/configauth.sh $tmp_ovpnclient $auth_flag " .$_SESSION['ap_interface'], $return); foreach ($return as $line) { $status->addMessage($line, 'info'); } - // Copy tmp client config to /etc/openvpn/client - file_move_config(RASPI_OPENVPN_CLIENT_CONFIG); + $client_ovpn = RASPI_OPENVPN_CLIENT_PATH.pathinfo($file['name'], PATHINFO_FILENAME).'_client.conf'; chmod($tmp_ovpnclient, 0644); - system("sudo cp $tmp_ovpnclient " . RASPI_OPENVPN_CLIENT_CONFIG, $return); + system("sudo cp $tmp_ovpnclient $client_ovpn", $return); + system("sudo rm ".RASPI_OPENVPN_CLIENT_CONFIG, $return); + system("sudo ln -s $client_ovpn ".RASPI_OPENVPN_CLIENT_CONFIG, $return); + if ($return ==0) { $status->addMessage('OpenVPN client.conf uploaded successfully', 'info'); } else { diff --git a/installers/openvpnlog.sh b/installers/openvpnlog.sh index 96e79e2d..d933d669 100755 --- a/installers/openvpnlog.sh +++ b/installers/openvpnlog.sh @@ -1,3 +1,3 @@ #!/bin/bash touch /tmp/openvpn.log -grep -m 100 openvpn /var/log/syslog | sudo tee /tmp/openvpn.log +journalctl |grep -m 200 openvpn | sudo tee /tmp/openvpn.log diff --git a/installers/raspap.sudoers b/installers/raspap.sudoers index 0886a2ac..260a45fc 100644 --- a/installers/raspap.sudoers +++ b/installers/raspap.sudoers @@ -20,9 +20,9 @@ www-data ALL=(ALL) NOPASSWD:/bin/systemctl start openvpn-client@client www-data ALL=(ALL) NOPASSWD:/bin/systemctl enable openvpn-client@client www-data ALL=(ALL) NOPASSWD:/bin/systemctl stop openvpn-client@client www-data ALL=(ALL) NOPASSWD:/bin/systemctl disable openvpn-client@client -www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/ovpnclient.ovpn /etc/openvpn/client/client.conf -www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/authdata /etc/openvpn/client/login.conf -www-data ALL=(ALL) NOPASSWD:/bin/mv /etc/openvpn/client/*.conf /etc/openvpn/client/*.conf +www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/ovpnclient.ovpn /etc/openvpn/client/*.conf +www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/authdata /etc/openvpn/client/*.conf +www-data ALL=(ALL) NOPASSWD:/usr/bin/ln -s /etc/openvpn/client/*.conf /etc/openvpn/client/*.conf www-data ALL=(ALL) NOPASSWD:/bin/rm /etc/openvpn/client/*.conf www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dnsmasqdata /etc/dnsmasq.d/090_*.conf www-data ALL=(ALL) NOPASSWD:/bin/rm /etc/dnsmasq.d/090_*.conf diff --git a/templates/openvpn/general.php b/templates/openvpn/general.php index 39573ce6..9398884e 100644 --- a/templates/openvpn/general.php +++ b/templates/openvpn/general.php @@ -64,9 +64,7 @@ -
- -
+