Ugh.  A diff which doens't check error returns.  Averting my gaze
is similar to "no way".  Hope you have another quarter, because you
need to try again

Michael Mikonos <[email protected]> wrote:

> Hello,
> 
> I haven't tried using unveil() before but yacc cleanly annotates
> all the files it needs in open_files(). The options -d -r -v each
> cause an extra file to be written. unveil() is only needed for
> the input file if not reading from stdin. Temporary files are
> always under /tmp because TMPDIR environment variable was previously
> removed. OK, or any suggestions?
> 
> - Michael
> 
> 
> Index: main.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/yacc/main.c,v
> retrieving revision 1.29
> diff -u -p -u -r1.29 main.c
> --- main.c    25 May 2017 20:11:03 -0000      1.29
> +++ main.c    25 Sep 2018 03:43:23 -0000
> @@ -305,10 +305,12 @@ open_files(void)
>       create_file_names();
>  
>       if (input_file == 0) {
> +             unveil(input_file_name, "r");
>               input_file = fopen(input_file_name, "r");
>               if (input_file == 0)
>                       open_error(input_file_name);
>       }
> +     unveil("/tmp", "crw");
>       fd = mkstemp(action_file_name);
>       if (fd == -1 || (action_file = fdopen(fd, "w")) == NULL)
>               open_error(action_file_name);
> @@ -318,11 +320,13 @@ open_files(void)
>               open_error(text_file_name);
>  
>       if (vflag) {
> +             unveil(verbose_file_name, "cw");
>               verbose_file = fopen(verbose_file_name, "w");
>               if (verbose_file == 0)
>                       open_error(verbose_file_name);
>       }
>       if (dflag) {
> +             unveil(defines_file_name, "cw");
>               defines_file = fopen(defines_file_name, "w");
>               if (defines_file == NULL)
>                       open_write_error(defines_file_name);
> @@ -330,23 +334,26 @@ open_files(void)
>               if (fd == -1 || (union_file = fdopen(fd, "w")) == NULL)
>                       open_error(union_file_name);
>       }
> +     unveil(output_file_name, "cw");
>       output_file = fopen(output_file_name, "w");
>       if (output_file == 0)
>               open_error(output_file_name);
>  
>       if (rflag) {
> +             unveil(code_file_name, "cw");
>               code_file = fopen(code_file_name, "w");
>               if (code_file == 0)
>                       open_error(code_file_name);
>       } else
>               code_file = output_file;
> +     unveil(NULL, NULL);
>  }
>  
>  
>  int
>  main(int argc, char *argv[])
>  {
> -     if (pledge("stdio rpath wpath cpath", NULL) == -1)
> +     if (pledge("stdio rpath wpath cpath unveil", NULL) == -1)
>               fatal("pledge: invalid arguments");
>  
>       set_signals();
> 

Reply via email to