Convert Port to numeric form before sending it to other nodes.
[tinc] / src / net_setup.c
index cb606ca..813c58b 100644 (file)
@@ -309,6 +309,16 @@ bool setup_myself(void) {
                        && !get_config_string(lookup_config(myself->connection->config_tree, "Port"), &myport))
                myport = xstrdup("655");
 
+       if(!atoi(myport)) {
+               struct addrinfo *ai = str2addrinfo("localhost", myport, SOCK_DGRAM);
+               sockaddr_t sa;
+               if(!ai || !ai->ai_addr)
+                       return false;
+               free(myport);
+               memcpy(&sa, ai->ai_addr, ai->ai_addrlen);
+               sockaddr2str(&sa, NULL, &myport);
+       }
+
        /* Read in all the subnets specified in the host configuration file */
 
        cfg = lookup_config(myself->connection->config_tree, "Subnet");
@@ -339,6 +349,7 @@ bool setup_myself(void) {
        if(myself->options & OPTION_TCPONLY)
                myself->options |= OPTION_INDIRECT;
 
+       get_config_bool(lookup_config(config_tree, "DirectOnly"), &directonly);
        get_config_bool(lookup_config(config_tree, "StrictSubnets"), &strictsubnets);
        get_config_bool(lookup_config(config_tree, "TunnelServer"), &tunnelserver);
        strictsubnets |= tunnelserver;
@@ -355,8 +366,21 @@ bool setup_myself(void) {
                        return false;
                }
                free(mode);
-       } else
-               routing_mode = RMODE_ROUTER;
+       }
+
+       if(get_config_string(lookup_config(config_tree, "Forwarding"), &mode)) {
+               if(!strcasecmp(mode, "off"))
+                       forwarding_mode = FMODE_OFF;
+               else if(!strcasecmp(mode, "internal"))
+                       forwarding_mode = FMODE_INTERNAL;
+               else if(!strcasecmp(mode, "kernel"))
+                       forwarding_mode = FMODE_KERNEL;
+               else {
+                       logger(LOG_ERR, "Invalid forwarding mode!");
+                       return false;
+               }
+               free(mode);
+       }
 
        choice = true;
        get_config_bool(lookup_config(myself->connection->config_tree, "PMTUDiscovery"), &choice);