X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fconf.c;h=725aab6ab19bfe550ce27eb8890e0992c03dc080;hb=7e3ae3251443f7093b63b25f3bdfb02aa2133bc9;hp=ae91b6e18076cff50dcb67e6d2de086e734b6e7a;hpb=46d18f60766f997d0ca37c5937f58c0c06477932;p=umurmur.git diff --git a/src/conf.c b/src/conf.c index ae91b6e..725aab6 100644 --- a/src/conf.c +++ b/src/conf.c @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Martin Johansson - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2014, Martin Johansson + Copyright (C) 2005-2014, Thorvald Natvig All rights reserved. @@ -32,11 +32,7 @@ #include #include -#ifdef WRT_TARGET -#include -#else #include -#endif #include "types.h" #include "conf.h" @@ -44,29 +40,39 @@ 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 #define DEFAULT_BINDPORT 64738 +#define DEFAULT_BAN_LENGTH (60*60) +#define DEFAULT_OPUS_THRESHOLD 100 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() @@ -78,77 +84,154 @@ const char *getStrConf(param_t param) { config_setting_t *setting = NULL; const char *strsetting = NULL; - + switch (param) { - case CERTIFICATE: - setting = config_lookup(&configuration, "certificate"); - if (!setting) - return "/etc/umurmur/certificate.crt"; - else { - if ((strsetting = config_setting_get_string(setting)) != NULL) - return strsetting; - else + case CERTIFICATE: + setting = config_lookup(&configuration, "certificate"); + if (!setting) return "/etc/umurmur/certificate.crt"; - } - break; - case KEY: - setting = config_lookup(&configuration, "private_key"); - if (!setting) - return "/etc/umurmur/private_key.key"; - else { - if ((strsetting = config_setting_get_string(setting)) != NULL) - return strsetting; - else + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + return "/etc/umurmur/certificate.crt"; + } + break; + case KEY: + setting = config_lookup(&configuration, "private_key"); + if (!setting) return "/etc/umurmur/private_key.key"; - } - break; - case PASSPHRASE: - setting = config_lookup(&configuration, "password"); - if (!setting) - return ""; - else { - if ((strsetting = config_setting_get_string(setting)) != NULL) - return strsetting; - else + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + return "/etc/umurmur/private_key.key"; + } + break; + case CAPATH: + setting = config_lookup(&configuration, "ca_path"); + if (!setting) + return NULL; + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + return NULL; + } + break; + case PASSPHRASE: + setting = config_lookup(&configuration, "password"); + if (!setting) return ""; - } - break; - case BINDADDR: - setting = config_lookup(&configuration, "bindaddr"); - if (!setting) - return ""; - else { - if ((strsetting = config_setting_get_string(setting)) != NULL) - return strsetting; - else + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + return ""; + } + break; + case ADMIN_PASSPHRASE: + setting = config_lookup(&configuration, "admin_password"); + if (!setting) return ""; - } - break; - case WELCOMETEXT: - setting = config_lookup(&configuration, "welcometext"); - if (!setting) - return DEFAULT_WELCOME; - else { - if ((strsetting = config_setting_get_string(setting)) != NULL) - return strsetting; - else - return DEFAULT_WELCOME; - } - break; - case DEAFULT_CHANNEL: - setting = config_lookup(&configuration, "default_channel"); - if (!setting) - return ""; - else { - if ((strsetting = config_setting_get_string(setting)) != NULL) - return strsetting; - else - return ""; - } - break; - default: - doAssert(false); - break; + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + return ""; + } + break; + case BINDADDR: + setting = config_lookup(&configuration, "bindaddr"); + if (!setting) + return NULL; + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + return NULL; + } + break; + case BINDADDR6: + setting = config_lookup(&configuration, "bindaddr6"); + if (!setting) + return NULL; + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + return NULL; + } + break; + case WELCOMETEXT: + setting = config_lookup(&configuration, "welcometext"); + if (!setting) + return DEFAULT_WELCOME; + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + return DEFAULT_WELCOME; + } + break; + case DEFAULT_CHANNEL: + setting = config_lookup(&configuration, "default_channel"); + if (!setting) + return ""; + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + 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; + case BANFILE: + setting = config_lookup(&configuration, "banfile"); + if (!setting) + return NULL; + else { + if ((strsetting = config_setting_get_string(setting)) != NULL) + return strsetting; + else + return NULL; + } + break; + default: + doAssert(false); + break; } return NULL; } @@ -156,59 +239,154 @@ const char *getStrConf(param_t param) int getIntConf(param_t param) { config_setting_t *setting = NULL; - + switch (param) { - case BINDPORT: - setting = config_lookup(&configuration, "bindport"); - if (!setting) - return DEFAULT_BINDPORT; - else { - return config_setting_get_int(setting); - } - break; - case MAX_BANDWIDTH: - setting = config_lookup(&configuration, "max_bandwidth"); - if (!setting) - return DEFAULT_MAX_BANDWIDTH; - else { - return config_setting_get_int(setting); - } - break; - case MAX_CLIENTS: - setting = config_lookup(&configuration, "max_users"); - if (!setting) - return DEFAULT_MAX_CLIENTS; - else { - return config_setting_get_int(setting); - } - break; - default: - doAssert(false); + case BINDPORT: + setting = config_lookup(&configuration, "bindport"); + if (!setting) + return DEFAULT_BINDPORT; + else { + return config_setting_get_int(setting); + } + break; + case BINDPORT6: + setting = config_lookup(&configuration, "bindport6"); + if (!setting) + /* If bindport6 is not specified, we default + * to whatever bindport is, rather than always + * default to 64738 */ + return getIntConf(BINDPORT); + else { + return config_setting_get_int(setting); + } + break; + case BAN_LENGTH: + setting = config_lookup(&configuration, "ban_length"); + if (!setting) + return DEFAULT_BAN_LENGTH; + else { + return config_setting_get_int(setting); + } + break; + case MAX_BANDWIDTH: + setting = config_lookup(&configuration, "max_bandwidth"); + if (!setting) + return DEFAULT_MAX_BANDWIDTH; + else { + return config_setting_get_int(setting); + } + break; + case MAX_CLIENTS: + setting = config_lookup(&configuration, "max_users"); + if (!setting) + return DEFAULT_MAX_CLIENTS; + else { + return config_setting_get_int(setting); + } + break; + case OPUS_THRESHOLD: + setting = config_lookup(&configuration, "opus_threshold"); + if (!setting) + return DEFAULT_OPUS_THRESHOLD; + else { + return config_setting_get_int(setting); + } + break; + default: + doAssert(false); + } +} + +bool_t getBoolConf(param_t param) +{ + config_setting_t *setting = NULL; + + switch (param) { + case ALLOW_TEXTMESSAGE: + setting = config_lookup(&configuration, "allow_textmessage"); + if (!setting) + return true; + else + return config_setting_get_bool(setting); + break; + case ENABLE_BAN: + setting = config_lookup(&configuration, "enable_ban"); + if (!setting) + return false; + else + return config_setting_get_bool(setting); + break; + case SYNC_BANFILE: + setting = config_lookup(&configuration, "sync_banfile"); + if (!setting) + return false; + else + return config_setting_get_bool(setting); + break; + case SHOW_ADDRESSES: + setting = config_lookup(&configuration, "show_addresses"); + if (!setting) + return true; + else + return config_setting_get_bool(setting); + break; + default: + doAssert(false); } } int Conf_getNextChannel(conf_channel_t *chdesc, int index) { config_setting_t *setting = NULL; - char configstr[64]; - - sprintf(configstr, "channels.[%d].name", index); + int maxconfig = 64, ret = 0; + char configstr[maxconfig]; + + ret = snprintf(configstr, maxconfig, "channels.[%d].name", index); setting = config_lookup(&configuration, configstr); - if (setting == NULL) - return -1; - strncpy(chdesc->name, config_setting_get_string(setting), MAX_TEXT); - - sprintf(configstr, "channels.[%d].parent", index); + if (ret >= maxconfig || ret < 0 || setting == NULL) + return -1; /* Required */ + chdesc->name = config_setting_get_string(setting); + + ret = snprintf(configstr, maxconfig, "channels.[%d].parent", index); setting = config_lookup(&configuration, configstr); - if (setting == NULL) - return -1; - strncpy(chdesc->parent, config_setting_get_string(setting), MAX_TEXT); - - sprintf(configstr, "channels.[%d].description", index); + if (ret >= maxconfig || ret < 0 || setting == NULL) + return -1; /* Required */ + chdesc->parent = config_setting_get_string(setting); + + ret = snprintf(configstr, maxconfig, "channels.[%d].description", index); setting = config_lookup(&configuration, configstr); - if (setting == NULL) - return -1; - strncpy(chdesc->description, config_setting_get_string(setting), MAX_TEXT); + if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */ + chdesc->description = NULL; + else + chdesc->description = config_setting_get_string(setting); + + 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 (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */ + chdesc->noenter = false; + else + chdesc->noenter = config_setting_get_bool(setting); + + ret = snprintf(configstr, maxconfig, "channels.[%d].silent", index); + setting = config_lookup(&configuration, configstr); + if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */ + chdesc->silent = false; + else + chdesc->silent = config_setting_get_bool(setting); + + ret = snprintf(configstr, maxconfig, "channels.[%d].position", index); + setting = config_lookup(&configuration, configstr); + if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */ + chdesc->position = 0; + else + chdesc->position = config_setting_get_int(setting); return 0; } @@ -216,19 +394,20 @@ int Conf_getNextChannel(conf_channel_t *chdesc, int index) int Conf_getNextChannelLink(conf_channel_link_t *chlink, int index) { config_setting_t *setting = NULL; - char configstr[64]; - - sprintf(configstr, "channel_links.[%d].source", index); + int maxconfig = 64, ret = 0; + char configstr[maxconfig]; + + 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; - strncpy(chlink->source, config_setting_get_string(setting), MAX_TEXT); + 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; - strncpy(chlink->destination, config_setting_get_string(setting), MAX_TEXT); + chlink->destination = config_setting_get_string(setting); return 0; }