diff --git a/src/etc/inc/auth.inc b/src/etc/inc/auth.inc index bca1ddf17..47e18fde4 100644 --- a/src/etc/inc/auth.inc +++ b/src/etc/inc/auth.inc @@ -247,7 +247,25 @@ function index_users() } return $userindex; - } +} + +function getUserGroups($username) +{ + global $config; + $member_groups = array(); + $user = getUserEntry($username); + if ($user !== false) { + $allowed_groups = local_user_get_groups($user); + if (isset($config['system']['group'])) { + foreach ($config['system']['group'] as $group) { + if (in_array($group['name'], $allowed_groups)) { + $member_groups[] = $group['name']; + } + } + } + } + return $member_groups; +} function &getUserEntry($name) { @@ -309,7 +327,7 @@ function get_user_privileges(&$user) $privs = $user['priv']; } - $names = local_user_get_groups($user, true); + $names = local_user_get_groups($user); foreach ($names as $name) { $group = getGroupEntry($name); @@ -518,7 +536,7 @@ function local_user_set_password(&$user, $password = null) } } -function local_user_get_groups($user, $all = false) +function local_user_get_groups($user) { global $config; @@ -530,7 +548,7 @@ function local_user_get_groups($user, $all = false) foreach ($config['system']['group'] as $group) { if (isset($group['member'])) { - if (in_array($user['uid'], $group['member']) || ($group['name'] == "all" && $all)) { + if (in_array($user['uid'], $group['member'])) { $groups[] = $group['name']; } } @@ -549,7 +567,7 @@ function local_user_set_groups($user, $new_groups = null) return; } - $cur_groups = local_user_get_groups($user, true); + $cur_groups = local_user_get_groups($user); $mod_groups = array(); if (!is_array($new_groups)) { diff --git a/src/etc/inc/plugins.inc.d/openvpn.inc b/src/etc/inc/plugins.inc.d/openvpn.inc index 4fac3bd8d..520fea45d 100644 --- a/src/etc/inc/plugins.inc.d/openvpn.inc +++ b/src/etc/inc/plugins.inc.d/openvpn.inc @@ -686,7 +686,7 @@ function openvpn_reconfigure($mode, $settings, $device_only = false) if ($settings['strictusercn']) { $strictusercn = "true"; } - $conf .= "auth-user-pass-verify \"/usr/local/sbin/ovpn_auth_verify user '{$settings['authmode']}' {$strictusercn} {$mode_id}\" via-env\n"; + $conf .= "auth-user-pass-verify \"/usr/local/sbin/ovpn_auth_verify user '{$settings['authmode']}' '{$strictusercn}' '{$mode_id}'\" via-env\n"; } break; } diff --git a/src/etc/inc/plugins.inc.d/openvpn/auth-user.php b/src/etc/inc/plugins.inc.d/openvpn/auth-user.php index d6d74937d..7c9a67168 100644 --- a/src/etc/inc/plugins.inc.d/openvpn/auth-user.php +++ b/src/etc/inc/plugins.inc.d/openvpn/auth-user.php @@ -78,8 +78,33 @@ if (!is_array($authmodes)) { exit(1); } +$a_server = null; + +if (isset($config['openvpn']['openvpn-server'])) { + foreach ($config['openvpn']['openvpn-server'] as $server) { + if ($server['vpnid'] == $modeid) { + $a_server = $server; + break; + } + } +} + +if ($a_server == null) { + syslog(LOG_WARNING, "The server $modeid was not found. Denying authentication for user {$username}"); + closelog(); + exit(1); +} + +if (!empty($a_server['local_group']) && !in_array($a_server['local_group'], getUserGroups($username))) { + syslog(LOG_WARNING, "The server $modeid requires the local group {$a_server['local_group']}. Denying authentication for user {$username}"); + closelog(); + exit(1); +} + foreach ($authmodes as $authmode) { $authcfg = auth_get_authserver($authmode); + + /* XXX this doesn't look right... */ if (!$authcfg && $authmode != "local") { continue; } diff --git a/src/www/diag_authentication.php b/src/www/diag_authentication.php index e109a1e4a..7c85b9c84 100644 --- a/src/www/diag_authentication.php +++ b/src/www/diag_authentication.php @@ -31,25 +31,6 @@ require_once("guiconfig.inc"); require_once("PEAR.inc"); require_once("interfaces.inc"); -function getUserGroups($username, $authcfg) -{ - global $config; - $member_groups = array(); - $user = getUserEntry($username); - if ($user !== false) { - $allowed_groups = local_user_get_groups($user, true); - if (isset($config['system']['group'])) { - foreach ($config['system']['group'] as $group) { - if (in_array($group['name'], $allowed_groups)) { - $member_groups[] = $group['name']; - } - } - } - } - return $member_groups; -} - - $input_errors = array(); if ($_SERVER['REQUEST_METHOD'] === 'GET') { $pconfig = array("authmode" => "", "username" => "", "password" => ""); @@ -68,7 +49,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { if (count($input_errors) == 0) { if (authenticate_user($_POST['username'], $_POST['password'], $authcfg)) { $savemsg = gettext("User") . ": " . $_POST['username'] . " " . gettext("authenticated successfully."); - $groups = getUserGroups($_POST['username'], $authcfg); + $groups = getUserGroups($_POST['username']); $savemsg .= "
" . gettext("This user is a member of these groups") . ":
"; foreach ($groups as $group) { $savemsg .= "{$group} "; diff --git a/src/www/system_usermanager.php b/src/www/system_usermanager.php index 6683a7186..c21f887bc 100644 --- a/src/www/system_usermanager.php +++ b/src/www/system_usermanager.php @@ -44,7 +44,7 @@ function get_user_privdesc(& $user) $user_privs = $user['priv']; } - $names = local_user_get_groups($user, true); + $names = local_user_get_groups($user); foreach ($names as $name) { $group = getGroupEntry($name); diff --git a/src/www/vpn_openvpn_server.php b/src/www/vpn_openvpn_server.php index 830d40a94..8a271014d 100644 --- a/src/www/vpn_openvpn_server.php +++ b/src/www/vpn_openvpn_server.php @@ -64,7 +64,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { ,serverbridge_interface,serverbridge_dhcp_start,serverbridge_dhcp_end ,dns_server1,dns_server2,dns_server3,dns_server4,ntp_server1 ,ntp_server2,netbios_enable,netbios_ntype,netbios_scope,wins_server1 - ,wins_server2,no_tun_ipv6,push_register_dns,dns_domain + ,wins_server2,no_tun_ipv6,push_register_dns,dns_domain,local_group ,client_mgmt_port,verbosity_level,caref,crlref,certref,dh_length ,cert_depth,strictusercn,digest,disable,duplicate_cn,vpnid,reneg-sec,use-common-name"; @@ -332,7 +332,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { $copy_fields = "mode,protocol,dev_mode,local_port,description,crypto,digest,engine ,tunnel_network,tunnel_networkv6,remote_network,remote_networkv6 ,gwredir,local_network,local_networkv6,maxclients,compression - ,passtos,client2client,dynamic_ip,pool_enable,topology_subnet + ,passtos,client2client,dynamic_ip,pool_enable,topology_subnet,local_group ,serverbridge_dhcp,serverbridge_interface,serverbridge_dhcp_start ,serverbridge_dhcp_end,dns_domain,dns_server1,dns_server2,dns_server3 ,dns_server4,push_register_dns,ntp_server1,ntp_server2,netbios_enable @@ -660,6 +660,24 @@ $( document ).ready(function() { + + + + + + +