Set configuration directory from the environment
authorMichael Spang <mspang@csclub.uwaterloo.ca>
Sat, 31 Jan 2009 03:24:07 +0000 (22:24 -0500)
committerMichael Spang <mspang@csclub.uwaterloo.ca>
Sat, 31 Jan 2009 03:45:09 +0000 (22:45 -0500)
src/config.c
src/config.h

index 5dc72ca..d08b260 100644 (file)
@@ -1,4 +1,5 @@
 #include <stdlib.h>
+#include <stdio.h>
 #include <limits.h>
 
 #include "config.h"
@@ -28,6 +29,10 @@ static struct config_var config_vars[] = {
 #undef CONFIG_STR
 #undef CONFIG_INT
 
+const char *default_config_dir = "/etc/csc";
+const char *config_filename = "accounts.cf";
+const char *config_dir;
+
 void config_var(char *var, char *val) {
     int i;
 
@@ -51,8 +56,14 @@ void config_var(char *var, char *val) {
 
 void configure() {
     int i;
+    char conffile[1024];
+
+    config_dir = getenv("CEO_CONFIG_DIR") ?: default_config_dir;
+
+    if (snprintf(conffile, sizeof(conffile), "%s/%s", config_dir, config_filename) >= sizeof(conffile))
+        fatal("huge config path");
 
-    config_parse(CONFIG_FILE);
+    config_parse(conffile);
 
     for (i = 0; i < sizeof(config_vars)/sizeof(*config_vars); i++) {
         switch (config_vars[i].type) {
index a5039e2..789843f 100644 (file)
@@ -1,5 +1,3 @@
-#define CONFIG_FILE "/etc/csc/accounts.cf"
-
 #define CONFIG_STR(x) extern char *x;
 #define CONFIG_INT(x) extern long x;
 #include "config-vars.h"
@@ -7,3 +5,5 @@
 #undef CONFIG_INT
 
 void configure();
+
+extern const char *config_dir;