- /* Close connections to hosts that have a changed or deleted host config file */
-
- for(node = connection_tree->head; node; node = next) {
- c = node->data;
- next = node->next;
-
- if(c->status.control)
- continue;
-
- if(c->outgoing) {
- free(c->outgoing->name);
- if(c->outgoing->ai)
- freeaddrinfo(c->outgoing->ai);
- free(c->outgoing);
- c->outgoing = NULL;
- }
-
- xasprintf(&fname, "%s/hosts/%s", confbase, c->name);
- if(stat(fname, &s) || s.st_mtime > last_config_check)
- terminate_connection(c, c->status.active);
- free(fname);
- }
-
- last_config_check = time(NULL);
-
- /* If StrictSubnet is set, expire deleted Subnets and read new ones in */
-
- if(strictsubnets) {
- subnet_t *subnet;
-
- for(node = subnet_tree->head; node; node = node->next) {
- subnet = node->data;
- subnet->expires = 1;
- }
-
- load_all_subnets();
-
- for(node = subnet_tree->head; node; node = next) {
- next = node->next;
- subnet = node->data;
- if(subnet->expires == 1) {
- send_del_subnet(everyone, subnet);
- if(subnet->owner->status.reachable)
- subnet_update(subnet->owner, subnet, false);
- subnet_del(subnet->owner, subnet);
- } else if(subnet->expires == -1) {
- subnet->expires = 0;
- } else {
- send_add_subnet(everyone, subnet);
- if(subnet->owner->status.reachable)
- subnet_update(subnet->owner, subnet, true);
- }
- }
- } else { /* Only read our own subnets back in */
- subnet_t *subnet, *s2;
-
- for(node = myself->subnet_tree->head; node; node = node->next) {
- subnet_t *subnet = node->data;
- logger(DEBUG_ALWAYS, LOG_DEBUG, "subnet %p expires %d\n", subnet, subnet->expires);
- if(!subnet->expires)
- subnet->expires = 1;
- }
-
- config_t *cfg = lookup_config(config_tree, "Subnet");
-
- while(cfg) {
- if(!get_config_subnet(cfg, &subnet))
- continue;
-
- if((s2 = lookup_subnet(myself, subnet))) {
- logger(DEBUG_ALWAYS, LOG_DEBUG, "read subnet that already exists: %p expires %d\n", s2, s2->expires);
- if(s2->expires == 1)
- s2->expires = 0;