kill perror("malloc") since we already have a good error messages

pw_ent -> pw for brevity
set $USER if -u specified
This commit is contained in:
Todd C. Miller
1998-11-04 01:40:45 +00:00
parent c3f28be054
commit 22f741b38c

51
sudo.c
View File

@@ -259,7 +259,6 @@ int main(argc, argv)
NewArgv = (char **) malloc (sizeof(char *) * (++NewArgc + 1)); NewArgv = (char **) malloc (sizeof(char *) * (++NewArgc + 1));
if (NewArgv == NULL) { if (NewArgv == NULL) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1); exit(1);
} }
@@ -288,7 +287,6 @@ int main(argc, argv)
#ifdef SECURE_PATH #ifdef SECURE_PATH
/* replace the PATH envariable with a secure one */ /* replace the PATH envariable with a secure one */
if (!user_is_exempt() && sudo_setenv("PATH", SECURE_PATH)) { if (!user_is_exempt() && sudo_setenv("PATH", SECURE_PATH)) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1); exit(1);
} }
@@ -408,14 +406,14 @@ static void load_globals(sudo_mode)
*/ */
if ((user_pw_ent = sudo_getpwuid(getuid())) == NULL) { if ((user_pw_ent = sudo_getpwuid(getuid())) == NULL) {
/* need to make a fake user_pw_ent */ /* need to make a fake user_pw_ent */
struct passwd pw_ent; struct passwd pw;
char pw_name[MAX_UID_T_LEN + 1]; char pw_name[MAX_UID_T_LEN + 1];
/* fill in uid and name fields with the uid */ /* fill in uid and name fields with the uid */
pw_ent.pw_uid = getuid(); pw.pw_uid = getuid();
(void) sprintf(pw_name, "%ld", (long) pw_ent.pw_uid); (void) sprintf(pw_name, "%ld", (long) pw.pw_uid);
pw_ent.pw_name = pw_name; pw.pw_name = pw_name;
user_pw_ent = &pw_ent; user_pw_ent = &pw;
/* complain, log, and die */ /* complain, log, and die */
log_error(GLOBAL_NO_PW_ENT); log_error(GLOBAL_NO_PW_ENT);
@@ -438,7 +436,6 @@ static void load_globals(sudo_mode)
if (strncmp(p, _PATH_DEV, sizeof(_PATH_DEV) - 1) == 0) if (strncmp(p, _PATH_DEV, sizeof(_PATH_DEV) - 1) == 0)
p += sizeof(_PATH_DEV) - 1; p += sizeof(_PATH_DEV) - 1;
if ((tty = (char *) strdup(p)) == NULL) { if ((tty = (char *) strdup(p)) == NULL) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1); exit(1);
} }
@@ -494,7 +491,6 @@ static void load_globals(sudo_mode)
if ((p = strchr(host, '.'))) { if ((p = strchr(host, '.'))) {
*p = '\0'; *p = '\0';
if ((shost = strdup(host)) == NULL) { if ((shost = strdup(host)) == NULL) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1); exit(1);
} }
@@ -676,7 +672,6 @@ static void add_env(contiguous)
} }
if ((buf = (char *) malloc(size)) == NULL) { if ((buf = (char *) malloc(size)) == NULL) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1); exit(1);
} }
@@ -695,7 +690,6 @@ static void add_env(contiguous)
buf = cmnd; buf = cmnd;
} }
if (sudo_setenv("SUDO_COMMAND", buf)) { if (sudo_setenv("SUDO_COMMAND", buf)) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1); exit(1);
} }
@@ -712,7 +706,6 @@ static void add_env(contiguous)
/* add the SUDO_USER envariable */ /* add the SUDO_USER envariable */
if (sudo_setenv("SUDO_USER", user_name)) { if (sudo_setenv("SUDO_USER", user_name)) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1); exit(1);
} }
@@ -720,7 +713,6 @@ static void add_env(contiguous)
/* add the SUDO_UID envariable */ /* add the SUDO_UID envariable */
(void) sprintf(idstr, "%ld", (long) user_uid); (void) sprintf(idstr, "%ld", (long) user_uid);
if (sudo_setenv("SUDO_UID", idstr)) { if (sudo_setenv("SUDO_UID", idstr)) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1); exit(1);
} }
@@ -728,7 +720,6 @@ static void add_env(contiguous)
/* add the SUDO_GID envariable */ /* add the SUDO_GID envariable */
(void) sprintf(idstr, "%ld", (long) user_gid); (void) sprintf(idstr, "%ld", (long) user_gid);
if (sudo_setenv("SUDO_GID", idstr)) { if (sudo_setenv("SUDO_GID", idstr)) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1); exit(1);
} }
@@ -736,7 +727,6 @@ static void add_env(contiguous)
/* set PS1 if SUDO_PS1 is set */ /* set PS1 if SUDO_PS1 is set */
if ((buf = getenv("SUDO_PS1"))) if ((buf = getenv("SUDO_PS1")))
if (sudo_setenv("PS1", buf)) { if (sudo_setenv("PS1", buf)) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1); exit(1);
} }
@@ -873,7 +863,7 @@ void set_perms(perm, sudo_mode)
int perm; int perm;
int sudo_mode; int sudo_mode;
{ {
struct passwd *pw_ent; struct passwd *pw;
switch (perm) { switch (perm) {
case PERM_ROOT: case PERM_ROOT:
@@ -922,44 +912,51 @@ void set_perms(perm, sudo_mode)
exit(1); exit(1);
} }
} else { } else {
if (!(pw_ent = getpwnam(runas_user))) { if (!(pw = getpwnam(runas_user))) {
(void) fprintf(stderr, (void) fprintf(stderr,
"%s: no passwd entry for %s!\n", "%s: no passwd entry for %s!\n",
Argv[0], runas_user); Argv[0], runas_user);
exit(1); exit(1);
} }
if (setgid(pw_ent->pw_gid)) { if (setgid(pw->pw_gid)) {
(void) fprintf(stderr, (void) fprintf(stderr,
"%s: cannot set gid to %d: ", "%s: cannot set gid to %d: ",
Argv[0], pw_ent->pw_gid); Argv[0], pw->pw_gid);
perror(""); perror("");
exit(1); exit(1);
} }
/* /*
* Initialize group vector only if * Initialize group vector and set
* we are going to be a non-root user. * $USER only if we are going to be
* a non-root user.
*/ */
if (strcmp(runas_user, "root") != 0 && if (strcmp(runas_user, "root") != 0) {
initgroups(runas_user, pw_ent->pw_gid) if (initgroups(runas_user, pw->pw_gid) == -1) {
== -1) {
(void) fprintf(stderr, (void) fprintf(stderr,
"%s: cannot set group vector ", "%s: cannot set group vector ",
Argv[0]); Argv[0]);
perror(""); perror("");
exit(1); exit(1);
} }
if (sudo_setenv("USER", runas_user)) {
(void) fprintf(stderr,
"%s: cannot allocate memory!\n",
Argv[0]);
exit(1);
}
}
if (setuid(pw_ent->pw_uid)) { if (setuid(pw->pw_uid)) {
(void) fprintf(stderr, (void) fprintf(stderr,
"%s: cannot set uid to %d: ", "%s: cannot set uid to %d: ",
Argv[0], pw_ent->pw_uid); Argv[0], pw->pw_uid);
perror(""); perror("");
exit(1); exit(1);
} }
if (sudo_mode & MODE_RESET_HOME) if (sudo_mode & MODE_RESET_HOME)
runas_homedir = pw_ent->pw_dir; runas_homedir = pw->pw_dir;
} }
break; break;