mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-03 09:00:21 +00:00
oops, add pwd!=NULL check to previous fix
This commit is contained in:
parent
ae70257435
commit
8a2deaa1de
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=46004
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user