If a user has no passwd entry sudo would segv (writing to a garbage pointer).

Now allocate space before writing :-)
This commit is contained in:
Todd C. Miller
1995-03-30 03:28:48 +00:00
parent 2f1773275e
commit a0b01e062b

44
sudo.c
View File

@@ -129,6 +129,7 @@ static void load_cmnd __P((void));
static void add_env __P((void));
static void rmenv __P((char **, char *, int));
static void clean_env __P((char **));
static char *uid2str __P((uid_t));
/*
* Globals
@@ -278,7 +279,7 @@ static void load_globals()
*/
set_perms(PERM_ROOT);
if ((pw_ent = getpwuid(uid)) == NULL) {
(void) sprintf(user, "%u", uid);
user = uid2str(uid);
log_error(GLOBAL_NO_PW_ENT);
inform_user(GLOBAL_NO_PW_ENT);
exit(1);
@@ -510,17 +511,7 @@ static void add_env()
}
/* add the SUDO_UID envariable */
for (len = 2, n = uid; (int) (n = n / 10) != 0; )
++len;
uidstr = (char *) malloc(len+1);
if (uidstr == NULL) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1);
}
(void) sprintf(uidstr, "%d", (int)uid);
uidstr = uid2str(uid);
if (sudo_setenv("SUDO_UID", uidstr)) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
@@ -771,3 +762,32 @@ void set_perms(perm)
break;
}
}
/**********************************************************************
*
* uid2str()
*
* this function allocates memory for a strings version of uid,
* then converts uid to a string and returns it.
*/
char *uid2str(uid)
uid_t uid;
{
int len, n;
char *uidstr;
for (len = 1, n = uid; (int) (n = n / 10) != 0; )
++len;
uidstr = (char *) malloc(len+1);
if (uidstr == NULL) {
perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1);
}
(void) sprintf(uidstr, "%u", (unsigned)uid);
}