X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fconf.c;h=c1302d286143c8cb51453677b086e4b8f247bb35;hb=18237e1f2d9dd5eef4a4e0d746d016bf94a42ad4;hp=f580a203d9275ce99e057deca263f4d1ea25ff29;hpb=19be9cf7150858311f7898fa3fb525d692d02f64;p=tinc diff --git a/src/conf.c b/src/conf.c index f580a203..c1302d28 100644 --- a/src/conf.c +++ b/src/conf.c @@ -339,33 +339,31 @@ bool read_config_file(splay_tree_t *config_tree, const char *fname) { } void read_config_options(splay_tree_t *config_tree, const char *prefix) { - list_node_t *node, *next; size_t prefix_len = prefix ? strlen(prefix) : 0; - for(node = cmdline_conf->tail; node; node = next) { - config_t *orig_cfg, *cfg = (config_t *)node->data; - next = node->prev; + for(const list_node_t *node = cmdline_conf->tail; node; node = node->prev) { + const config_t *cfg = node->data; + config_t *new; if(!prefix) { if(strchr(cfg->variable, '.')) continue; - node->data = NULL; - list_unlink_node(cmdline_conf, node); } else { if(strncmp(prefix, cfg->variable, prefix_len) || cfg->variable[prefix_len] != '.') continue; - /* Because host configuration is parsed again when - reconnecting, nodes must not be freed when a prefix - is given. */ - orig_cfg = cfg; - cfg = new_config(); - cfg->variable = xstrdup(orig_cfg->variable + prefix_len + 1); - cfg->value = xstrdup(orig_cfg->value); - cfg->file = NULL; - cfg->line = orig_cfg->line; } - config_add(config_tree, cfg); + + new = new_config(); + if(prefix) + new->variable = xstrdup(cfg->variable + prefix_len + 1); + else + new->variable = xstrdup(cfg->variable); + new->value = xstrdup(cfg->value); + new->file = NULL; + new->line = cfg->line; + + config_add(config_tree, new); } } @@ -375,7 +373,7 @@ bool read_server_config(void) { read_config_options(config_tree, NULL); - xasprintf(&fname, "%s/tinc.conf", confbase); + xasprintf(&fname, "%s" SLASH "tinc.conf", confbase); x = read_config_file(config_tree, fname); if(!x) { /* System error: complain */ @@ -393,7 +391,7 @@ bool read_connection_config(connection_t *c) { read_config_options(c->config_tree, c->name); - xasprintf(&fname, "%s/hosts/%s", confbase, c->name); + xasprintf(&fname, "%s" SLASH "hosts" SLASH "%s", confbase, c->name); x = read_config_file(c->config_tree, fname); free(fname); @@ -402,7 +400,7 @@ bool read_connection_config(connection_t *c) { bool append_config_file(const char *name, const char *key, const char *value) { char *fname; - xasprintf(&fname, "%s/hosts/%s", confbase, name); + xasprintf(&fname, "%s" SLASH "hosts" SLASH "%s", confbase, name); FILE *fp = fopen(fname, "a");