2 ncurses/tinfo/read_termcap.c | 40 ++++++++++++++++++++++++++++++++++++++++
3 1 file changed, 40 insertions(+)
5 --- a/ncurses/tinfo/read_termcap.c
6 +++ b/ncurses/tinfo/read_termcap.c
10 (void) lseek(fd, (off_t) 0, SEEK_SET);
12 } else if ((_nc_access(db_array[current], R_OK) < 0)
13 || (fd = open(db_array[current], O_RDONLY, 0)) < 0) {
14 /* No error on unfound file. */
26 + fd1 = _nc_access(db_array[current], R_OK) < 0;
28 + fd = open(db_array[current], O_RDONLY, 0));
32 + setfsuid(geteuid());
33 + setfsgid(getegid());
36 + /* No error on unfound file. */
37 + if (errno == ENOENT)
40 + return (TC_SYS_ERR);
49 @@ -1097,8 +1125,20 @@
50 for (i = 0; i < filecount; i++) {
52 T(("Looking for %s in %s", tn, termpaths[i]));
54 if (_nc_access(termpaths[i], R_OK) == 0
55 && (fp = fopen(termpaths[i], "r")) != (FILE *) 0) {
58 + if (_nc_access(termpaths[i], R_OK) == 0) {
61 + fp = fopen(termpaths[i], "r");
62 + setfsuid(geteuid());
63 + setfsgid(getegid());
65 + if (fp != (FILE *) 0) {
67 _nc_set_source(termpaths[i]);