Add sources for C account creation programs
[public/pyceo-broken.git] / src / common.c
1 #include <unistd.h>
2 #include <sys/types.h>
3 #include <pwd.h>
4 #include <grp.h>
5
6 #include "common.h"
7 #include "util.h"
8 #include "config.h"
9
10 int ceo_get_privileged() {
11     int uid = getuid();
12
13     // root is privileged
14     if (!uid)
15         return 1;
16
17     if (privileged_group) {
18         struct group *privgrp = getgrnam(privileged_group);
19         int pgid;
20         gid_t grps[128];
21         int count, i;
22         if (!privgrp)
23             return 0;
24         pgid = privgrp->gr_gid;
25
26         count = getgroups(sizeof(grps), grps);
27         for (i = 0; i < count; i++)
28             if (grps[i] == pgid)
29                 return 1;
30     }
31
32     return 0;
33 }
34
35 char *ceo_get_user() {
36     struct passwd *pwent = getpwuid(getuid());
37     if (pwent == NULL)
38         fatal("could not determine user");
39     return xstrdup(pwent->pw_name);
40 }
41
42 void ceo_notify_hook(int argc, ...) {
43     va_list args;
44     char **argv;
45     int i = 0;
46
47     va_start(args, argc);
48
49     argv = (char **)xmalloc(sizeof(char *) * (argc + 1));
50
51     while (i < argc)
52         argv[i++] = va_arg(args, char *);
53
54     argv[i++] = NULL;
55     spawnv(notify_hook, argv);
56
57     va_end(args);
58 }