diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/adjbacklight.c | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/adjbacklight.c b/src/adjbacklight.c index 289401c..2aee72e 100644 --- a/src/adjbacklight.c +++ b/src/adjbacklight.c @@ -27,7 +27,8 @@ #include <string.h> #include <limits.h> #include <alloca.h> - +#include <grp.h> +#include <pwd.h> @@ -311,6 +312,38 @@ int main(int argc, char** argv) } + /* Check permissions */ + if (getuid()) /* Always accept root */ + { + struct group* video_grp = getgrnam("video"); + if (video_grp) /* Accept everypony if the group ‘video’ does not exist */ + { + struct passwd* realuser = getpwuid(getuid()); + if (!realuser) + { + P("You do not exist, go away!"); + return 1; + } + char** mems = video_grp->gr_mem; + char* realname = realuser->pw_name; + int ok = 0; + for (; *mems; mems++) + if (!strcmp(realname, *mems)) + { + ok = 1; + break; + } + endgrent(); + if (!ok) + { + P("Sorry, you need to be in the group 'video'."); + return 1; + } + } + endpwent(); + } + + P("\n"); P("If the program is abnormally aborted the may be some residual"); P("effects on the terminal. the following commands should reset it:"); |