conf.c -- configuration code
Copyright (C) 1998 Robert van der Meulen
1998-2005 Ivo Timmermans
- 2000-2006 Guus Sliepen <guus@tinc-vpn.org>
+ 2000-2009 Guus Sliepen <guus@tinc-vpn.org>
2000 Cris van Pelt
This program is free software; you can redistribute it and/or modify
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- $Id$
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "system.h"
}
void init_configuration(splay_tree_t ** config_tree) {
- cp();
-
*config_tree = splay_alloc_tree((splay_compare_t) config_compare, (splay_action_t) free_config);
}
void exit_configuration(splay_tree_t ** config_tree) {
- cp();
-
splay_delete_tree(*config_tree);
*config_tree = NULL;
}
config_t *new_config(void) {
- cp();
-
return xmalloc_and_zero(sizeof(config_t));
}
void free_config(config_t *cfg) {
- cp();
-
if(cfg->variable)
free(cfg->variable);
}
void config_add(splay_tree_t *config_tree, config_t *cfg) {
- cp();
-
splay_insert(config_tree, cfg);
}
config_t *lookup_config(splay_tree_t *config_tree, char *variable) {
config_t cfg, *found;
- cp();
-
cfg.variable = variable;
cfg.file = "";
cfg.line = 0;
splay_node_t *node;
config_t *found;
- cp();
-
node = splay_search_node(config_tree, cfg);
if(node) {
}
bool get_config_bool(const config_t *cfg, bool *result) {
- cp();
-
if(!cfg)
return false;
return true;
}
- logger(LOG_ERR, _("\"yes\" or \"no\" expected for configuration variable %s in %s line %d"),
+ logger(LOG_ERR, "\"yes\" or \"no\" expected for configuration variable %s in %s line %d",
cfg->variable, cfg->file, cfg->line);
return false;
}
bool get_config_int(const config_t *cfg, int *result) {
- cp();
-
if(!cfg)
return false;
if(sscanf(cfg->value, "%d", result) == 1)
return true;
- logger(LOG_ERR, _("Integer expected for configuration variable %s in %s line %d"),
+ logger(LOG_ERR, "Integer expected for configuration variable %s in %s line %d",
cfg->variable, cfg->file, cfg->line);
return false;
}
bool get_config_string(const config_t *cfg, char **result) {
- cp();
-
if(!cfg)
return false;
bool get_config_address(const config_t *cfg, struct addrinfo **result) {
struct addrinfo *ai;
- cp();
-
if(!cfg)
return false;
return true;
}
- logger(LOG_ERR, _("Hostname or IP address expected for configuration variable %s in %s line %d"),
+ logger(LOG_ERR, "Hostname or IP address expected for configuration variable %s in %s line %d",
cfg->variable, cfg->file, cfg->line);
return false;
bool get_config_subnet(const config_t *cfg, subnet_t ** result) {
subnet_t subnet = {0};
- cp();
-
if(!cfg)
return false;
if(!str2net(&subnet, cfg->value)) {
- logger(LOG_ERR, _("Subnet expected for configuration variable %s in %s line %d"),
+ logger(LOG_ERR, "Subnet expected for configuration variable %s in %s line %d",
cfg->variable, cfg->file, cfg->line);
return false;
}
/* Teach newbies what subnets are... */
if(((subnet.type == SUBNET_IPV4)
- && !maskcheck(&subnet.net.ipv4.address, subnet.net.ipv4.prefixlength, sizeof(ipv4_t)))
+ && !maskcheck(&subnet.net.ipv4.address, subnet.net.ipv4.prefixlength, sizeof subnet.net.ipv4.address))
|| ((subnet.type == SUBNET_IPV6)
- && !maskcheck(&subnet.net.ipv6.address, subnet.net.ipv6.prefixlength, sizeof(ipv6_t)))) {
- logger(LOG_ERR, _ ("Network address and prefix length do not match for configuration variable %s in %s line %d"),
+ && !maskcheck(&subnet.net.ipv6.address, subnet.net.ipv6.prefixlength, sizeof subnet.net.ipv6.address))) {
+ logger(LOG_ERR, "Network address and prefix length do not match for configuration variable %s in %s line %d",
cfg->variable, cfg->file, cfg->line);
return false;
}
size = newsize;
} else {
*newline = '\0'; /* kill newline */
+ if(newline > p && newline[-1] == '\r') /* and carriage return if necessary */
+ newline[-1] = '\0';
break; /* yay */
}
}
config_t *cfg;
size_t bufsize;
- cp();
-
fp = fopen(fname, "r");
if(!fp) {
- logger(LOG_ERR, _("Cannot open config file %s: %s"), fname,
+ logger(LOG_ERR, "Cannot open config file %s: %s", fname,
strerror(errno));
return -3;
}
if(!*value) {
- logger(LOG_ERR, _("No value for variable `%s' on line %d while reading config file %s"),
+ logger(LOG_ERR, "No value for variable `%s' on line %d while reading config file %s",
variable, lineno, fname);
break;
}
char *fname;
int x;
- cp();
-
- asprintf(&fname, "%s/tinc.conf", confbase);
+ xasprintf(&fname, "%s/tinc.conf", confbase);
x = read_config_file(config_tree, fname);
if(x == -1) { /* System error: complain */
- logger(LOG_ERR, _("Failed to read `%s': %s"), fname, strerror(errno));
+ logger(LOG_ERR, "Failed to read `%s': %s", fname, strerror(errno));
}
free(fname);