summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2000-10-02 22:31:11 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2000-10-02 22:31:11 +0000
commitd8b6b8e8d2ae472f3bd086736a409dfbc951a428 (patch)
tree8195d8eac7f6c5089204151595c3b19d55348ee0
parentfcea715cf3ed45c8c537828dd899c3788c158ab8 (diff)
Don't call cgetset() on $TERMCAP if setugid. The logic has been reworked
a bit to make it clear what is supposed to happen. Also fix some policy wrt setugid in code we don't actually compile for consistency's sake.
-rw-r--r--lib/libcurses/tinfo/read_termcap.c38
1 files changed, 20 insertions, 18 deletions
diff --git a/lib/libcurses/tinfo/read_termcap.c b/lib/libcurses/tinfo/read_termcap.c
index 42f3d641a27..be34f0defd5 100644
--- a/lib/libcurses/tinfo/read_termcap.c
+++ b/lib/libcurses/tinfo/read_termcap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: read_termcap.c,v 1.10 2000/08/02 04:10:47 millert Exp $ */
+/* $OpenBSD: read_termcap.c,v 1.11 2000/10/02 22:31:10 millert Exp $ */
/****************************************************************************
* Copyright (c) 1998,1999,2000 Free Software Foundation, Inc. *
@@ -784,7 +784,7 @@ _nc_tgetent(char *bp, char **sourcename, int *lineno, const char *name)
pvec = pathvec;
tbuf = bp;
p = pathbuf;
- cp = getenv("TERMCAP");
+ cp = issetugid() ? NULL : getenv("TERMCAP");
/*
* TERMCAP can have one of two things in it. It can be the name of a file
@@ -798,21 +798,23 @@ _nc_tgetent(char *bp, char **sourcename, int *lineno, const char *name)
#define MY_PATH_DEF "/etc/termcap /usr/share/misc/termcap"
if (issetugid())
strlcpy(pathbuf, MY_PATH_DEF, PBUFSIZ);
- else if (!is_pathname(cp)) { /* no TERMCAP or it holds an entry */
- if ((termpath = getenv("TERMPATH")) != 0) {
- strlcpy(pathbuf, termpath, PBUFSIZ);
- } else {
- if ((home = getenv("HOME")) != 0 && *home != '\0' &&
- strlen(home) < PBUFSIZ) { /* setup path */
- p += strlen(home); /* path, looking in */
- strcpy(pathbuf, home); /* $HOME first */
- *p++ = '/';
- } /* if no $HOME look in current directory */
- strlcpy(p, ".termcap " MY_PATH_DEF,
- (size_t) (PBUFSIZ - (p - pathbuf)));
- }
- } else /* user-defined name in TERMCAP */
- strlcpy(pathbuf, cp, PBUFSIZ); /* still can be tokenized */
+ else {
+ if (!is_pathname(cp)) { /* no TERMCAP or it holds an entry */
+ if ((termpath = getenv("TERMPATH")) != 0) {
+ strlcpy(pathbuf, termpath, PBUFSIZ);
+ } else {
+ if ((home = getenv("HOME")) != 0 && *home != '\0' &&
+ strlen(home) < PBUFSIZ) { /* setup path */
+ p += strlen(home); /* path, looking in */
+ strcpy(pathbuf, home); /* $HOME first */
+ *p++ = '/';
+ } /* if no $HOME look in cwd */
+ strlcpy(p, ".termcap " MY_PATH_DEF,
+ (size_t) (PBUFSIZ - (p - pathbuf)));
+ }
+ } else /* user-defined name in TERMCAP */
+ strlcpy(pathbuf, cp, PBUFSIZ); /* still can be tokenized */
+ }
*fname++ = pathbuf; /* tokenize path into vector of names */
while (*++p) {
@@ -974,7 +976,7 @@ _nc_read_termcap_entry(const char *const tn, TERMTYPE * const tp)
char pathbuf[PATH_MAX];
termpaths[filecount] = 0;
- if ((tc = getenv("TERMCAP")) != 0 && (!issetugid() || !is_pathname(tc))) {
+ if (!issetugid() && (tc = getenv("TERMCAP"))) {
if (is_pathname(tc)) { /* interpret as a filename */
ADD_TC(tc, 0);
} else if (_nc_name_match(tc, tn, "|:")) { /* treat as a capability file */