Really make tinc default to any addressfamily.
[oweals/tinc.git] / src / net_setup.c
index eee056052a814ead13540bcc9e3836b5abefa788..e279d3741491e403a20c54825d8cf478c80afb5d 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: net_setup.c,v 1.1.2.25 2002/09/09 21:24:41 guus Exp $
+    $Id: net_setup.c,v 1.1.2.32 2003/06/25 20:52:59 guus Exp $
 */
 
 #include "config.h"
 #include <fcntl.h>
 #include <netdb.h>
 #include <netinet/in.h>
-#ifdef HAVE_NETINET_IN_SYSTM_H
-#include <netinet/in_systm.h>
-#endif
-#ifdef HAVE_NETINET_IP_H
-#include <netinet/ip.h>
-#endif
-#ifdef HAVE_NETINET_TCP_H
-#include <netinet/tcp.h>
-#endif
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <arpa/inet.h>
 #include <sys/socket.h>
 #include <net/if.h>
+#ifdef HAVE_NETINET_IN_SYSTM_H
+#include <netinet/in_systm.h>
+#endif
+#ifdef HAVE_NETINET_IP_H
+#include <netinet/ip.h>
+#endif
+#ifdef HAVE_NETINET_TCP_H
+#include <netinet/tcp.h>
+#endif
 
 #include <openssl/pem.h>
 #include <openssl/rsa.h>
@@ -77,7 +77,7 @@
 
 char *myport;
 
-int read_rsa_public_key(connection_t * c)
+int read_rsa_public_key(connection_t *c)
 {
        FILE *fp;
        char *fname;
@@ -85,8 +85,10 @@ int read_rsa_public_key(connection_t * c)
 
        cp();
 
-       if(!c->rsa_key)
+       if(!c->rsa_key) {
                c->rsa_key = RSA_new();
+//             RSA_blinding_on(c->rsa_key, NULL);
+       }
 
        /* First, check for simple PublicKey statement */
 
@@ -132,8 +134,10 @@ int read_rsa_public_key(connection_t * c)
                        c->rsa_key = PEM_read_RSA_PUBKEY(fp, &c->rsa_key, NULL, NULL);
                        fclose(fp);
 
-                       if(c->rsa_key)
+                       if(c->rsa_key) {
+//                             RSA_blinding_on(c->rsa_key, NULL);
                                return 0;
+                       }
 
                        syslog(LOG_ERR, _("Reading RSA public key file `%s' failed: %s"),
                                   fname, strerror(errno));
@@ -166,6 +170,7 @@ int read_rsa_public_key(connection_t * c)
 
        if(fp) {
                c->rsa_key = PEM_read_RSA_PUBKEY(fp, &c->rsa_key, NULL, NULL);
+//             RSA_blinding_on(c->rsa_key, NULL);
                fclose(fp);
        }
 
@@ -188,6 +193,7 @@ int read_rsa_private_key(void)
 
        if(get_config_string(lookup_config(config_tree, "PrivateKey"), &key)) {
                myself->connection->rsa_key = RSA_new();
+//             RSA_blinding_on(myself->connection->rsa_key, NULL);
                BN_hex2bn(&myself->connection->rsa_key->d, key);
                BN_hex2bn(&myself->connection->rsa_key->e, "FFFF");
                free(key);
@@ -362,8 +368,7 @@ int setup_myself(void)
                        return -1;
                }
                free(afname);
-       } else
-               addressfamily = AF_INET;
+       }
 
        get_config_bool(lookup_config(config_tree, "Hostnames"), &hostnames);
 
@@ -398,6 +403,9 @@ int setup_myself(void)
                keylifetime = 3600;
 
        keyexpires = now + keylifetime;
+       
+       EVP_CIPHER_CTX_init(&packet_ctx);
+       EVP_DecryptInit_ex(&packet_ctx, myself->cipher, NULL, myself->key, myself->key + myself->cipher->key_len);
 
        /* Check if we want to use message authentication codes... */
 
@@ -440,7 +448,7 @@ int setup_myself(void)
        if(get_config_int
           (lookup_config(myself->connection->config_tree, "Compression"),
                &myself->compression)) {
-               if(myself->compression < 0 || myself->compression > 9) {
+               if(myself->compression < 0 || myself->compression > 11) {
                        syslog(LOG_ERR, _("Bogus compression level!"));
                        return -1;
                }
@@ -520,7 +528,7 @@ int setup_myself(void)
 */
 int setup_network_connections(void)
 {
-       char *envp[4];
+       char *envp[5];
        int i;
 
        cp();
@@ -544,20 +552,21 @@ int setup_network_connections(void)
        if(setup_device() < 0)
                return -1;
 
+       if(setup_myself() < 0)
+               return -1;
+
        /* Run tinc-up script to further initialize the tap interface */
        asprintf(&envp[0], "NETNAME=%s", netname ? : "");
        asprintf(&envp[1], "DEVICE=%s", device ? : "");
        asprintf(&envp[2], "INTERFACE=%s", interface ? : "");
-       envp[3] = NULL;
+       asprintf(&envp[3], "NAME=%s", myself->name);
+       envp[4] = NULL;
 
        execute_script("tinc-up", envp);
 
-       for(i = 0; i < 4; i++)
+       for(i = 0; i < 5; i++)
                free(envp[i]);
 
-       if(setup_myself() < 0)
-               return -1;
-
        try_outgoing_connections();
 
        return 0;
@@ -570,7 +579,7 @@ void close_network_connections(void)
 {
        avl_node_t *node, *next;
        connection_t *c;
-       char *envp[4];
+       char *envp[5];
        int i;
 
        cp();
@@ -602,7 +611,8 @@ void close_network_connections(void)
        asprintf(&envp[0], "NETNAME=%s", netname ? : "");
        asprintf(&envp[1], "DEVICE=%s", device ? : "");
        asprintf(&envp[2], "INTERFACE=%s", interface ? : "");
-       envp[3] = NULL;
+       asprintf(&envp[3], "NAME=%s", myself->name);
+       envp[4] = NULL;
 
        execute_script("tinc-down", envp);