On Tue, May 21, 2019 at 07:34:05AM +0200, Martijn van Duren wrote:
> Hello Jesper,
> On 5/20/19 10:58 PM, Jesper Wallin wrote:
> > Hi all,
> > 
> > When ex/vi is started with -S (secure), a stricter pledge is used to
> > prevent exec from being used.  It's tedious to specify -S all the time
> > and easier to add "set secure" to ~/.nexrc.  However, the check for
> > which pledge to use doesn't care what your ~/.nexrc contains and the
> > exec promise remains.
> 
> The behaviour should be identical, the only difference would be that
> pledge catches programming errors. So I see no particular reason to use
> -S over "set secure" for normal users; even without pledge.
> > 
> > This patch simply wait until the ~/.nexrc is parsed and all options are
> > set before checking whether or not to apply the stricter pledge.
> > 
> > Another approach would be to also have a check inside the opts_set()
> > unction, in case the user manually runs "set secure", but that feels
> > ugly and "too deep".
> > 
> If we want to make sure that that secure is always honoured with a
> pledge I reckon we should push it down to opts_set.
> I choose not to fail hard on pledge, since that could loose peoples
> work, which is most definitely not what we want. While here fix a
> lie that secure has an off parameter and inform the user that it can't
> be turned off again.
> 
> OK?

Makes sense to me. ok brynet@

> martijn@
> > 
> > Jesper Wallin
> >
> Index: common/options.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/vi/common/options.c,v
> retrieving revision 1.26
> diff -u -p -r1.26 options.c
> --- common/options.c  31 Jul 2017 19:45:49 -0000      1.26
> +++ common/options.c  21 May 2019 05:32:29 -0000
> @@ -136,7 +136,7 @@ OPTLIST const optlist[] = {
>  /* O_SECTIONS            4BSD */
>       {"sections",    f_section,      OPT_STR,        0},
>  /* O_SECURE    4.4BSD */
> -     {"secure",      NULL,           OPT_0BOOL,      OPT_NOUNSET},
> +     {"secure",      f_secure,       OPT_0BOOL,      OPT_NOUNSET},
>  /* O_SHELL       4BSD */
>       {"shell",       NULL,           OPT_STR,        0},
>  /* O_SHELLMETA         4.4BSD */
> Index: common/options_f.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/vi/common/options_f.c,v
> retrieving revision 1.12
> diff -u -p -r1.12 options_f.c
> --- common/options_f.c        3 Jul 2017 07:01:14 -0000       1.12
> +++ common/options_f.c        21 May 2019 05:32:30 -0000
> @@ -207,6 +207,19 @@ f_section(SCR *sp, OPTION *op, char *str
>  }
>  
>  /*
> + * PUBLIC: int f_secure(SCR *, OPTION *, char *, u_long *)
> + */
> +int
> +f_secure(SCR *sp, OPTION *op, char *str, u_long *valp)
> +{
> +     if (pledge("stdio rpath wpath cpath fattr flock getpw tty", NULL) == 
> -1) {
> +             msgq(sp, M_ERR, "pledge failed");
> +             return (1);
> +     }
> +     return (0);
> +}
> +
> +/*
>   * PUBLIC: int f_ttywerase(SCR *, OPTION *, char *, u_long *);
>   */
>  int
> Index: docs/USD.doc/vi.man/vi.1
> ===================================================================
> RCS file: /cvs/src/usr.bin/vi/docs/USD.doc/vi.man/vi.1,v
> retrieving revision 1.75
> diff -u -p -r1.75 vi.1
> --- docs/USD.doc/vi.man/vi.1  12 Feb 2018 01:10:46 -0000      1.75
> +++ docs/USD.doc/vi.man/vi.1  21 May 2019 05:32:30 -0000
> @@ -2456,8 +2456,9 @@ Define additional section boundaries for
>  and
>  .Cm ]]
>  commands.
> -.It Cm secure Bq off
> +.It Cm secure
>  Turns off all access to external programs.
> +Once set this option can't be disabled.
>  .It Cm shell , sh Bq "environment variable SHELL, or /bin/sh"
>  Select the shell used by the editor.
>  .It Cm shellmeta Bq ~{[*?$`'\&"\e
> Index: include/com_extern.h
> ===================================================================
> RCS file: /cvs/src/usr.bin/vi/include/com_extern.h,v
> retrieving revision 1.15
> diff -u -p -r1.15 com_extern.h
> --- include/com_extern.h      3 Jul 2017 07:01:14 -0000       1.15
> +++ include/com_extern.h      21 May 2019 05:32:30 -0000
> @@ -75,6 +75,7 @@ int f_readonly(SCR *, OPTION *, char *, 
>  int f_recompile(SCR *, OPTION *, char *, u_long *);
>  int f_reformat(SCR *, OPTION *, char *, u_long *);
>  int f_section(SCR *, OPTION *, char *, u_long *);
> +int f_secure(SCR *, OPTION *, char *, u_long *);
>  int f_ttywerase(SCR *, OPTION *, char *, u_long *);
>  int f_w300(SCR *, OPTION *, char *, u_long *);
>  int f_w1200(SCR *, OPTION *, char *, u_long *);
> 
> 

Reply via email to