Pass pid, ppid, sid, pgid and tcpgid to plugin in user_info list.

This commit is contained in:
Todd C. Miller
2012-04-13 15:18:40 -04:00
parent 89b90fa4cd
commit 5f969cc12a
5 changed files with 121 additions and 3 deletions

View File

@@ -427,12 +427,23 @@ get_user_info(struct user_details *ud)
{
char *cp, **user_info, cwd[PATH_MAX], host[MAXHOSTNAMELEN];
struct passwd *pw;
int i = 0;
int fd, i = 0;
debug_decl(get_user_info, SUDO_DEBUG_UTIL)
/* XXX - bound check number of entries */
user_info = emalloc2(32, sizeof(char *));
ud->pid = getpid();
ud->ppid = getppid();
ud->pgid = getpgid(0);
ud->tcpgid = (pid_t)-1;
fd = open(_PATH_TTY, O_RDWR|O_NOCTTY|O_NONBLOCK, 0);
if (fd != -1) {
ud->tcpgid = tcgetpgrp(fd);
close(fd);
}
ud->sid = getsid(0);
ud->uid = getuid();
ud->euid = geteuid();
ud->gid = getgid();
@@ -453,6 +464,12 @@ get_user_info(struct user_details *ud)
}
ud->shell = estrdup(ud->shell);
easprintf(&user_info[++i], "pid=%d", (int)ud->pid);
easprintf(&user_info[++i], "ppid=%d", (int)ud->ppid);
easprintf(&user_info[++i], "pgid=%d", (int)ud->pgid);
easprintf(&user_info[++i], "tcpgid=%d", (int)ud->tcpgid);
easprintf(&user_info[++i], "sid=%d", (int)ud->sid);
easprintf(&user_info[++i], "uid=%u", (unsigned int)ud->uid);
easprintf(&user_info[++i], "euid=%u", (unsigned int)ud->euid);
easprintf(&user_info[++i], "gid=%u", (unsigned int)ud->gid);