forked from aniani/vim
patch 8.2.4282: restricted mode requires the -Z command line option
Problem: Restricted mode requires the -Z command line option. Solution: Use restricted mode when $SHELL ends in "nologin" or "false". (closes #9681)
This commit is contained in:
parent
9b4a80a665
commit
adbb1bf21d
@ -256,6 +256,8 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
|
|||||||
Interfaces, such as Python, Ruby and Lua, are also disabled,
|
Interfaces, such as Python, Ruby and Lua, are also disabled,
|
||||||
since they could be used to execute shell commands. Perl uses
|
since they could be used to execute shell commands. Perl uses
|
||||||
the Safe module.
|
the Safe module.
|
||||||
|
For Unix restricted mode is used when the last part of $SHELL
|
||||||
|
is "nologin" or "false".
|
||||||
Note that the user may still find a loophole to execute a
|
Note that the user may still find a loophole to execute a
|
||||||
shell command, it has only been made difficult.
|
shell command, it has only been made difficult.
|
||||||
|
|
||||||
|
11
src/option.c
11
src/option.c
@ -307,6 +307,17 @@ set_init_1(int clean_arg)
|
|||||||
*/
|
*/
|
||||||
set_options_default(0);
|
set_options_default(0);
|
||||||
|
|
||||||
|
#ifdef UNIX
|
||||||
|
// Force restricted-mode on for "nologin" or "false" $SHELL
|
||||||
|
p = get_isolated_shell_name();
|
||||||
|
if (p != NULL)
|
||||||
|
{
|
||||||
|
if (fnamecmp(p, "nologin") == 0 || fnamecmp(p, "false") == 0)
|
||||||
|
restricted = TRUE;
|
||||||
|
vim_free(p);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CLEAN_RUNTIMEPATH
|
#ifdef CLEAN_RUNTIMEPATH
|
||||||
if (clean_arg)
|
if (clean_arg)
|
||||||
{
|
{
|
||||||
|
@ -105,6 +105,14 @@ func Test_restricted_mode()
|
|||||||
if RunVim([], [], '-Z --clean -S Xrestricted')
|
if RunVim([], [], '-Z --clean -S Xrestricted')
|
||||||
call assert_equal([], readfile('Xresult'))
|
call assert_equal([], readfile('Xresult'))
|
||||||
endif
|
endif
|
||||||
|
call delete('Xresult')
|
||||||
|
if has('unix') && RunVimPiped([], [], '--clean -S Xrestricted', 'SHELL=/bin/false ')
|
||||||
|
call assert_equal([], readfile('Xresult'))
|
||||||
|
endif
|
||||||
|
call delete('Xresult')
|
||||||
|
if has('unix') && RunVimPiped([], [], '--clean -S Xrestricted', 'SHELL=/sbin/nologin')
|
||||||
|
call assert_equal([], readfile('Xresult'))
|
||||||
|
endif
|
||||||
|
|
||||||
call delete('Xrestricted')
|
call delete('Xrestricted')
|
||||||
call delete('Xresult')
|
call delete('Xresult')
|
||||||
|
@ -746,6 +746,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4282,
|
||||||
/**/
|
/**/
|
||||||
4281,
|
4281,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user