NewArgv = (char **) malloc (sizeof(char *) * (++NewArgc + 1));
if (NewArgv == NULL) {
- perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1);
}
#ifdef SECURE_PATH
/* replace the PATH envariable with a secure one */
if (!user_is_exempt() && sudo_setenv("PATH", SECURE_PATH)) {
- perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1);
}
*/
if ((user_pw_ent = sudo_getpwuid(getuid())) == NULL) {
/* need to make a fake user_pw_ent */
- struct passwd pw_ent;
+ struct passwd pw;
char pw_name[MAX_UID_T_LEN + 1];
/* fill in uid and name fields with the uid */
- pw_ent.pw_uid = getuid();
- (void) sprintf(pw_name, "%ld", (long) pw_ent.pw_uid);
- pw_ent.pw_name = pw_name;
- user_pw_ent = &pw_ent;
+ pw.pw_uid = getuid();
+ (void) sprintf(pw_name, "%ld", (long) pw.pw_uid);
+ pw.pw_name = pw_name;
+ user_pw_ent = &pw;
/* complain, log, and die */
log_error(GLOBAL_NO_PW_ENT);
if (strncmp(p, _PATH_DEV, sizeof(_PATH_DEV) - 1) == 0)
p += sizeof(_PATH_DEV) - 1;
if ((tty = (char *) strdup(p)) == NULL) {
- perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1);
}
if ((p = strchr(host, '.'))) {
*p = '\0';
if ((shost = strdup(host)) == NULL) {
- perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1);
}
}
if ((buf = (char *) malloc(size)) == NULL) {
- perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1);
}
buf = cmnd;
}
if (sudo_setenv("SUDO_COMMAND", buf)) {
- perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1);
}
/* add the SUDO_USER envariable */
if (sudo_setenv("SUDO_USER", user_name)) {
- perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1);
}
/* add the SUDO_UID envariable */
(void) sprintf(idstr, "%ld", (long) user_uid);
if (sudo_setenv("SUDO_UID", idstr)) {
- perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1);
}
/* add the SUDO_GID envariable */
(void) sprintf(idstr, "%ld", (long) user_gid);
if (sudo_setenv("SUDO_GID", idstr)) {
- perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1);
}
/* set PS1 if SUDO_PS1 is set */
if ((buf = getenv("SUDO_PS1")))
if (sudo_setenv("PS1", buf)) {
- perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1);
}
int perm;
int sudo_mode;
{
- struct passwd *pw_ent;
+ struct passwd *pw;
switch (perm) {
case PERM_ROOT:
exit(1);
}
} else {
- if (!(pw_ent = getpwnam(runas_user))) {
+ if (!(pw = getpwnam(runas_user))) {
(void) fprintf(stderr,
"%s: no passwd entry for %s!\n",
Argv[0], runas_user);
exit(1);
}
- if (setgid(pw_ent->pw_gid)) {
+ if (setgid(pw->pw_gid)) {
(void) fprintf(stderr,
"%s: cannot set gid to %d: ",
- Argv[0], pw_ent->pw_gid);
+ Argv[0], pw->pw_gid);
perror("");
exit(1);
}
/*
- * Initialize group vector only if
- * we are going to be a non-root user.
+ * Initialize group vector and set
+ * $USER only if we are going to be
+ * a non-root user.
*/
- if (strcmp(runas_user, "root") != 0 &&
- initgroups(runas_user, pw_ent->pw_gid)
- == -1) {
- (void) fprintf(stderr,
- "%s: cannot set group vector ",
- Argv[0]);
- perror("");
- exit(1);
+ if (strcmp(runas_user, "root") != 0) {
+ if (initgroups(runas_user, pw->pw_gid) == -1) {
+ (void) fprintf(stderr,
+ "%s: cannot set group vector ",
+ Argv[0]);
+ perror("");
+ 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,
"%s: cannot set uid to %d: ",
- Argv[0], pw_ent->pw_uid);
+ Argv[0], pw->pw_uid);
perror("");
exit(1);
}
if (sudo_mode & MODE_RESET_HOME)
- runas_homedir = pw_ent->pw_dir;
+ runas_homedir = pw->pw_dir;
}
break;