X-Git-Url: https://www.tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fconf.c;h=827da68181bfc2bbc8eb5d8083878b6a4dcbaf36;hb=075e6828a7533e7daa790225f17aa6bb39703278;hp=4108d8ba2c648c9736954ef2f607e78c1117330d;hpb=e9043e17c76f92b787c9ecdaf1a2ae7916f690a6;p=tinc diff --git a/src/conf.c b/src/conf.c index 4108d8ba..827da681 100644 --- a/src/conf.c +++ b/src/conf.c @@ -2,7 +2,7 @@ conf.c -- configuration code Copyright (C) 1998 Robert van der Meulen 1998-2005 Ivo Timmermans - 2000-2006 Guus Sliepen + 2000-2009 Guus Sliepen 2000 Cris van Pelt This program is free software; you can redistribute it and/or modify @@ -218,9 +218,9 @@ bool get_config_subnet(const config_t *cfg, subnet_t ** result) { /* 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)))) { + && !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; @@ -287,6 +287,8 @@ static char *readline(FILE * fp, char **buf, size_t *buflen) { size = newsize; } else { *newline = '\0'; /* kill newline */ + if(newline > p && newline[-1] == '\r') /* and carriage return if necessary */ + newline[-1] = '\0'; break; /* yay */ } } @@ -328,6 +330,11 @@ int read_config_file(splay_tree_t *config_tree, const char *fname) { buffer = xmalloc(bufsize); for(;;) { + if(feof(fp)) { + err = 0; + break; + } + line = readline(fp, &buffer, &bufsize); if(!line) { @@ -335,11 +342,6 @@ int read_config_file(splay_tree_t *config_tree, const char *fname) { break; } - if(feof(fp)) { - err = 0; - break; - } - lineno++; if(!*line || *line == '#') @@ -399,7 +401,7 @@ bool read_server_config() { 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 */