-/* Copyright (C) 2009-2010, Martin Johansson <martin@fatbob.nu>
- Copyright (C) 2005-2010, Thorvald Natvig <thorvald@natvig.com>
+/* Copyright (C) 2009-2011, Martin Johansson <martin@fatbob.nu>
+ Copyright (C) 2005-2011, Thorvald Natvig <thorvald@natvig.com>
All rights reserved.
#include <stdlib.h>
#include <string.h>
-#ifdef WRT_TARGET
-#include <libconfig/libconfig.h>
-#else
#include <libconfig.h>
-#endif
#include "types.h"
#include "conf.h"
static config_t configuration;
-#define DEFAULT_CONFIG "/etc/umurmur.conf"
#define DEFAULT_WELCOME "Welcome to uMurmur!"
#define DEFAULT_MAX_CLIENTS 10
#define DEFAULT_MAX_BANDWIDTH 48000
const char defaultconfig[] = DEFAULT_CONFIG;
-int Conf_init(const char *conffile)
+void Conf_init(const char *conffile)
{
- const char *conf;
-
config_init(&configuration);
if (conffile == NULL)
- conf = defaultconfig;
- else
- conf = conffile;
- if (config_read_file(&configuration, conf) != CONFIG_TRUE) {
- fprintf(stderr, "Error in config file %s: %s at line %d\n", conffile,
- config_error_text(&configuration), config_error_line(&configuration));
- exit(1);
+ conffile = defaultconfig;
+ if (config_read_file(&configuration, conffile) != CONFIG_TRUE) {
+ Log_fatal("Error in config file %s line %d: %s", conffile,
+ config_error_line(&configuration), config_error_text(&configuration));
}
- return 0;
+}
+
+bool_t Conf_ok(const char *conffile)
+{
+ bool_t rc = true;
+ config_init(&configuration);
+ if (conffile == NULL)
+ conffile = defaultconfig;
+ if (config_read_file(&configuration, conffile) != CONFIG_TRUE) {
+ fprintf(stderr, "Error in config file %s line %d: %s\n", conffile,
+ config_error_line(&configuration), config_error_text(&configuration));
+ rc = false;
+ }
+ config_destroy(&configuration);
+ return rc;
}
void Conf_deinit()
return "";
}
break;
+ case USERNAME:
+ setting = config_lookup(&configuration, "username");
+ if (!setting)
+ return "";
+ else {
+ if ((strsetting = config_setting_get_string(setting)) != NULL)
+ return strsetting;
+ else
+ return "";
+ }
+ break;
+ case GROUPNAME:
+ setting = config_lookup(&configuration, "groupname");
+ if (!setting)
+ return "";
+ else {
+ if ((strsetting = config_setting_get_string(setting)) != NULL)
+ return strsetting;
+ else
+ return "";
+ }
+ break;
+ case LOGFILE:
+ setting = config_lookup(&configuration, "logfile");
+ if (!setting)
+ return NULL;
+ else {
+ if ((strsetting = config_setting_get_string(setting)) != NULL)
+ return strsetting;
+ else
+ return NULL;
+ }
+ break;
default:
doAssert(false);
break;
int Conf_getNextChannel(conf_channel_t *chdesc, int index)
{
config_setting_t *setting = NULL;
- char configstr[64];
+ int maxconfig = 64, ret = 0;
+ char configstr[maxconfig];
- sprintf(configstr, "channels.[%d].name", index);
+ ret = snprintf(configstr, maxconfig, "channels.[%d].name", index);
setting = config_lookup(&configuration, configstr);
- if (setting == NULL)
+ if (ret >= maxconfig || ret < 0 || setting == NULL)
return -1; /* Required */
chdesc->name = config_setting_get_string(setting);
- sprintf(configstr, "channels.[%d].parent", index);
+ ret = snprintf(configstr, maxconfig, "channels.[%d].parent", index);
setting = config_lookup(&configuration, configstr);
- if (setting == NULL)
+ if (ret >= maxconfig || ret < 0 || setting == NULL)
return -1; /* Required */
chdesc->parent = config_setting_get_string(setting);
- sprintf(configstr, "channels.[%d].description", index);
+ ret = snprintf(configstr, maxconfig, "channels.[%d].description", index);
setting = config_lookup(&configuration, configstr);
- if (setting == NULL) /* Optional */
+ if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
chdesc->description = NULL;
else
chdesc->description = config_setting_get_string(setting);
- sprintf(configstr, "channels.[%d].noenter", index);
+ ret = snprintf(configstr, maxconfig, "channels.[%d].password", index);
+ setting = config_lookup(&configuration, configstr);
+ if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
+ chdesc->password = NULL;
+ else
+ chdesc->password = config_setting_get_string(setting);
+
+ ret = snprintf(configstr, maxconfig, "channels.[%d].noenter", index);
setting = config_lookup(&configuration, configstr);
- if (setting == NULL) /* Optional */
+ if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
chdesc->noenter = false;
else
chdesc->noenter = config_setting_get_bool(setting);
int Conf_getNextChannelLink(conf_channel_link_t *chlink, int index)
{
config_setting_t *setting = NULL;
- char configstr[64];
+ int maxconfig = 64, ret = 0;
+ char configstr[maxconfig];
- sprintf(configstr, "channel_links.[%d].source", index);
+ ret = snprintf(configstr, maxconfig, "channel_links.[%d].source", index);
setting = config_lookup(&configuration, configstr);
- if (setting == NULL)
+ if (ret >= maxconfig || ret < 0 || setting == NULL)
return -1;
chlink->source = config_setting_get_string(setting);
- sprintf(configstr, "channel_links.[%d].destination", index);
+ ret = snprintf(configstr, maxconfig, "channel_links.[%d].destination", index);
setting = config_lookup(&configuration, configstr);
- if (setting == NULL)
+ if (ret >= maxconfig || ret < 0 || setting == NULL)
return -1;
chlink->destination = config_setting_get_string(setting);