summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>1999-04-24 17:17:42 +0000
committerache <ache@FreeBSD.org>1999-04-24 17:17:42 +0000
commit1526baa9c80cbe657e4123bbb739ccfcc7b2ffce (patch)
tree622861ecc09492076f6311b167d36f2675a10b8e /lib
parent35ed42572623f74e60f7f78aa78d452ac4484bbc (diff)
downloadFreeBSD-src-1526baa9c80cbe657e4123bbb739ccfcc7b2ffce.zip
FreeBSD-src-1526baa9c80cbe657e4123bbb739ccfcc7b2ffce.tar.gz
oops, add pwd!=NULL check to previous fix
Diffstat (limited to 'lib')
-rw-r--r--lib/libutil/login_cap.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/lib/libutil/login_cap.c b/lib/libutil/login_cap.c
index 8fee8dd..0e113aa 100644
--- a/lib/libutil/login_cap.c
+++ b/lib/libutil/login_cap.c
@@ -25,7 +25,7 @@
*
* Low-level routines relating to the user capabilities database
*
- * $Id: login_cap.c,v 1.14 1997/06/13 22:26:41 davidn Exp $
+ * $Id: login_cap.c,v 1.15 1999/04/24 17:01:58 ache Exp $
*/
#include <stdio.h>
@@ -184,8 +184,8 @@ login_getclassbyname(char const *name, const struct passwd *pwd)
if ((lc = malloc(sizeof(login_cap_t))) != NULL) {
int r, i = 0;
- uid_t euid;
- gid_t egid;
+ uid_t euid = 0;
+ gid_t egid = 0;
const char *msg = NULL;
const char *dir = (pwd == NULL) ? NULL : pwd->pw_dir;
char userpath[MAXPATHLEN];
@@ -194,10 +194,12 @@ login_getclassbyname(char const *name, const struct passwd *pwd)
/* Switch to user mode before checking/reading its ~/.login_conf */
/* - some NFSes have root read access disabled. */
- euid = geteuid();
- egid = getegid();
- (void)setegid(pwd->pw_gid);
- (void)seteuid(pwd->pw_uid);
+ if (dir) {
+ euid = geteuid();
+ egid = getegid();
+ (void)setegid(pwd->pw_gid);
+ (void)seteuid(pwd->pw_uid);
+ }
if (dir && snprintf(userpath, MAXPATHLEN, "%s/%s", dir,
_FILE_LOGIN_CONF) < MAXPATHLEN) {
@@ -238,8 +240,10 @@ login_getclassbyname(char const *name, const struct passwd *pwd)
/* Fallthru - just return system defaults */
case 0: /* success! */
if ((lc->lc_class = strdup(name)) != NULL) {
- (void)seteuid(euid);
- (void)setegid(egid);
+ if (dir) {
+ (void)seteuid(euid);
+ (void)setegid(egid);
+ }
++lc_object_count;
return lc;
}
@@ -258,8 +262,10 @@ login_getclassbyname(char const *name, const struct passwd *pwd)
msg = "%s: unexpected cgetent() error '%s': %m";
break;
}
- (void)seteuid(euid);
- (void)setegid(egid);
+ if (dir) {
+ (void)seteuid(euid);
+ (void)setegid(egid);
+ }
if (msg != NULL)
syslog(LOG_ERR, msg, "login_getclass", name);
free(lc);
OpenPOWER on IntegriCloud