Add sources for C account creation programs
[mspang/pyceo.git] / src / config.c
1 #include <stdlib.h>
2 #include <limits.h>
3
4 #include "config.h"
5 #include "parser.h"
6 #include "util.h"
7
8 #define DEF_STR NULL
9 #define DEF_LONG LONG_MIN
10
11 char *server_url = DEF_STR;
12
13 char *users_base = DEF_STR;
14 char *groups_base = DEF_STR;
15
16 char *skeleton_dir = DEF_STR;
17 char *quota_prototype = DEF_STR;
18 char *homedir_prefix = DEF_STR;
19
20 char *member_home = DEF_STR;
21 char *member_shell = DEF_STR;
22 long member_min_id = DEF_LONG;
23 long member_max_id = DEF_LONG;
24
25 char *club_home = DEF_STR;
26 char *club_shell = DEF_STR;
27 long club_min_id = DEF_LONG;
28 long club_max_id = DEF_LONG;
29
30 char *notify_hook = DEF_STR;
31
32 char *realm = DEF_STR;
33
34 char *admin_principal = DEF_STR;
35 char *admin_keytab = DEF_STR;
36
37 char *admin_bind_userid = DEF_STR;
38 char *admin_bind_keytab = DEF_STR;
39
40 char *sasl_realm = DEF_STR;
41 char *sasl_mech = DEF_STR;
42
43 char *privileged_group = DEF_STR;
44
45 long homedir_mode = DEF_LONG;
46 long homedir_min_uid = DEF_LONG;
47
48 static char *strvarnames[] = { "server_url", "users_base", "admin_principal",
49     "admin_keytab", "skeleton_dir", "quota_prototype", "homedir_prefix",
50     "member_home", "member_shell", "club_home", "club_shell", "realm",
51     "admin_bind_userid", "admin_bind_keytab", "groups_base",
52     "privileged_group", "notify_hook", "sasl_realm", "sasl_mech" };
53 static char **strvars[] = { &server_url, &users_base, &admin_principal,
54     &admin_keytab, &skeleton_dir, &quota_prototype, &homedir_prefix,
55     &member_home, &member_shell, &club_home, &club_shell, &realm,
56     &admin_bind_userid, &admin_bind_keytab, &groups_base,
57     &privileged_group, &notify_hook, &sasl_realm, &sasl_mech };
58
59 static char *longvarnames[] = { "member_min_id", "member_max_id",
60     "homedir_mode", "homedir_min_uid", "club_min_id", "club_max_id" };
61 static long *longvars[] = { &member_min_id, &member_max_id, &homedir_mode,
62     &homedir_min_uid, &club_min_id, &club_max_id };
63
64 void config_var(char *var, char *val) {
65     int i;
66
67     for (i = 0; i < sizeof(strvars)/sizeof(*strvars); i++) {
68         if (!strcmp(var, strvarnames[i])) {
69             if (!strvars[i])
70                 free(strvars[i]);
71             *strvars[i] = xstrdup(val);
72         }
73     }
74
75     for (i = 0; i < sizeof(longvars)/sizeof(*longvars); i++) {
76         if (!strcmp(var, longvarnames[i])) {
77             *longvars[i] = config_long(var, val);
78         }
79     }
80 }
81
82 void configure() {
83     int i;
84
85     config_parse(CONFIG_FILE);
86
87     for (i = 0; i < sizeof(strvars)/sizeof(*strvars); i++) {
88         if (*strvars[i] == DEF_STR)
89             badconf("undefined string variable: %s", strvarnames[i]);
90     }
91
92     for (i = 0; i < sizeof(longvars)/sizeof(*longvars); i++) {
93         if (*longvars[i] == DEF_LONG)
94             badconf("undefined long variable: %s", longvarnames[i]);
95     }
96 }