X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fnet_setup.c;h=f07bdda4992395dbae37c4a983b2417483e69395;hb=e05371346548dee977d4ee45e12e3058e749afb6;hp=30ab0fa9e6ff5f38be59600f78a919498ea276ca;hpb=7a71d48009e03ff1143a6e1084803f456a27c849;p=tinc diff --git a/src/net_setup.c b/src/net_setup.c index 30ab0fa9..f07bdda4 100644 --- a/src/net_setup.c +++ b/src/net_setup.c @@ -229,7 +229,7 @@ static bool read_rsa_private_key(void) { result = rsa_set_hex_private_key(&myself->connection->rsa, n, "FFFF", d); free(n); free(d); - return true; + return result; } /* Else, check for PrivateKeyFile statement and read it */ @@ -571,23 +571,13 @@ static bool setup_myself(void) { int i, err; int replaywin_int; - myself = new_node(); - myself->connection = new_connection(); - - myself->hostname = xstrdup("MYSELF"); - myself->connection->hostname = xstrdup("MYSELF"); - - myself->connection->options = 0; - myself->connection->protocol_major = PROT_MAJOR; - myself->connection->protocol_minor = PROT_MINOR; - - myself->options |= PROT_MINOR << 24; - if(!(name = get_name())) { logger(DEBUG_ALWAYS, LOG_ERR, "Name for tinc daemon required!"); return false; } + myself = new_node(); + myself->connection = new_connection(); myself->name = name; myself->connection->name = xstrdup(name); xasprintf(&fname, "%s" SLASH "hosts" SLASH "%s", confbase, name); @@ -595,6 +585,18 @@ static bool setup_myself(void) { read_config_file(config_tree, fname); free(fname); + if(!get_config_string(lookup_config(config_tree, "Port"), &myport)) + myport = xstrdup("655"); + + xasprintf(&myself->hostname, "MYSELF port %s", myport); + myself->connection->hostname = xstrdup(myself->hostname); + + myself->connection->options = 0; + myself->connection->protocol_major = PROT_MAJOR; + myself->connection->protocol_minor = PROT_MINOR; + + myself->options |= PROT_MINOR << 24; + get_config_bool(lookup_config(config_tree, "ExperimentalProtocol"), &experimental); if(experimental && !read_ecdsa_private_key()) @@ -603,9 +605,6 @@ static bool setup_myself(void) { if(!read_rsa_private_key()) return false; - if(!get_config_string(lookup_config(config_tree, "Port"), &myport)) - myport = xstrdup("655"); - if(!atoi(myport)) { struct addrinfo *ai = str2addrinfo("localhost", myport, SOCK_DGRAM); sockaddr_t sa; @@ -709,6 +708,7 @@ static bool setup_myself(void) { myself->nexthop = myself; myself->via = myself; myself->status.reachable = true; + myself->last_state_change = time(NULL); myself->status.sptps = experimental; node_add(myself); @@ -915,6 +915,8 @@ static bool setup_myself(void) { return false; } + last_config_check = time(NULL); + return true; } @@ -961,6 +963,9 @@ void close_network_connections(void) { for(node = connection_tree->head; node; node = next) { next = node->next; c = node->data; + /* Keep control connections open until the end, so they know when we really terminated */ + if(c->status.control) + c->socket = -1; c->outgoing = NULL; terminate_connection(c, false); }