16 #include <sys/types.h> 
   23 #include "lirc/lirc_log.h" 
   32         GETGROUPS_T groups[32];
 
   33         int group_cnt = 
sizeof(groups)/
sizeof(gid_t);
 
   34         char groupnames[256] = {0};
 
   41         user = getenv(
"SUDO_USER");
 
   49         r = getgrouplist(user, pw->pw_gid, groups, &group_cnt);
 
   54         r = setgroups(group_cnt, groups);
 
   59         r = setgid(pw->pw_gid);
 
   64         r = set_some_uid(pw->pw_uid);
 
   69         setenv(
"HOME", pw->pw_dir, 1);
 
   71         for (i = 0; i < group_cnt; i += 1) {
 
   72                 snprintf(buff, 5, 
" %d", groups[i]);
 
   73                 strcat(groupnames, buff);
 
   75         log_debug(
"Groups: [%d]:%s", pw->pw_gid, groupnames);
 
   86         if (strcmp(
"root", new_user) == 0)
 
   87                 puts(
"Warning: Running as root.");
 
   88         else if (strlen(new_user) == 0)
 
   89                 puts(
"Warning: Cannot change uid.");
 
   91                 printf(
"Running as regular user %s\n", new_user);
 
const char * drop_sudo_root(int(*set_some_uid)(uid_t))
Try to drop possible root privileges, returning new user or "" on error.
void drop_root_cli(int(*set_some_uid)(uid_t))
Default view part of drop_sudo_root.
#define log_notice(fmt,...)
Log a notice message.
#define log_debug(fmt,...)
Log a debug message.
#define log_perror_err(fmt,...)
perror wrapper logging with level LIRC_ERROR.
#define log_perror_warn(fmt,...)
perror wrapper logging with level LIRC_WARNING.
logchannel_t
Log channels used to filter messages.