#include <sys/param.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <err.h>
#include <errno.h>
#include <grp.h>
#include <paths.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include <unistd.h>
#include "authentication.h"
int isAuthenticatedAsAdministrator(void)
{
if (isAuthenticatedAsRoot()) {
return 1;
}
return isAuthenticatedAsAdministratorForTask(0);
}
int isAuthenticatedAsAdministratorForTask(int taskNum)
{
int admin = 0;
uid_t ruid;
if (isAuthenticatedAsRoot()) {
return 1;
}
ruid = getuid();
if (ruid) {
gid_t groups[NGROUPS_MAX];
int numgroups;
if ((numgroups = getgroups(NGROUPS_MAX, groups)) > 0) {
int i;
gid_t admingid = 0;
struct group *admingroup;
if ((admingroup = getgrnam(groupNameForTask(taskNum))) != NULL) {
admingid = admingroup->gr_gid;
for (i = 0; i < numgroups; i++) {
if (groups[i] == admingid) {
admin = 1;
break;
}
}
}
}
}
return admin;
}
int isAuthenticatedAsRoot(void)
{
if (getuid() == 0) {
return 1;
}
return 0;
}
char *groupNameForTask(int taskNum)
{
if (taskNum == 0)
return "admin";
return "admin";
}