main: Add function to check for main.conf groups and keys
authorPatrik Flykt <patrik.flykt@linux.intel.com>
Fri, 14 Dec 2012 14:55:55 +0000 (16:55 +0200)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Fri, 14 Dec 2012 15:02:23 +0000 (17:02 +0200)
Print out a warning on an unknown group and unknown keys in the "General"
group.

src/main.c

index ad25f93..36d49c6 100644 (file)
@@ -93,6 +93,20 @@ static struct {
 #define CONF_ALLOW_HOSTNAME_UPDATES     "AllowHostnameUpdates"
 #define CONF_SINGLE_TECH                "SingleConnectedTechnology"
 
+static const char *supported_options[] = {
+       CONF_BG_SCAN,
+       CONF_PREF_TIMESERVERS,
+       CONF_AUTO_CONNECT,
+       CONF_PREFERRED_TECHS,
+       CONF_FALLBACK_NAMESERVERS,
+       CONF_TIMEOUT_INPUTREQ,
+       CONF_TIMEOUT_BROWSERLAUNCH,
+       CONF_BLACKLISTED_INTERFACES,
+       CONF_ALLOW_HOSTNAME_UPDATES,
+       CONF_SINGLE_TECH,
+       NULL
+};
+
 static GKeyFile *load_config(const char *file)
 {
        GError *err = NULL;
@@ -164,6 +178,43 @@ static char **parse_fallback_nameservers(char **nameservers, gsize len)
        return servers;
 }
 
+static void check_config(GKeyFile *config)
+{
+       char **keys;
+       int j;
+
+       if (config == NULL)
+               return;
+
+       keys = g_key_file_get_groups(config, NULL);
+
+       for (j = 0; keys != NULL && keys[j] != NULL; j++) {
+               if (g_strcmp0(keys[j], "General") != 0)
+                       connman_warn("Unknown group %s in main.conf", keys[j]);
+       }
+
+       g_strfreev(keys);
+
+       keys = g_key_file_get_keys(config, "General", NULL, NULL);
+
+       for (j = 0; keys != NULL && keys[j] != NULL; j++) {
+               connman_bool_t found;
+               int i;
+
+               found = FALSE;
+               for (i = 0; supported_options[i] != NULL; i++) {
+                       if (g_strcmp0(keys[j], supported_options[i]) == 0) {
+                               found = TRUE;
+                               break;
+                       }
+               }
+               if (found == FALSE && supported_options[i] == NULL)
+                       connman_warn("Unknown key %s in main.conf", keys[j]);
+       }
+
+       g_strfreev(keys);
+}
+
 static void parse_config(GKeyFile *config)
 {
        GError *error = NULL;
@@ -184,6 +235,8 @@ static void parse_config(GKeyFile *config)
 
        DBG("parsing main.conf");
 
+       check_config(config);
+
        boolean = g_key_file_get_boolean(config, "General",
                                                CONF_BG_SCAN, &error);
        if (error == NULL)