]> git.meshlink.io Git - meshlink/blobdiff - src/conf.c
Merge branch 'master' into 1.1
[meshlink] / src / conf.c
index 4108d8ba2c648c9736954ef2f607e78c1117330d..827da68181bfc2bbc8eb5d8083878b6a4dcbaf36 100644 (file)
@@ -2,7 +2,7 @@
     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
@@ -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 */