projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add --disable-lzo configure option
[tinc]
/
src
/
net_setup.c
diff --git
a/src/net_setup.c
b/src/net_setup.c
index
a667a67
..
6360c59
100644
(file)
--- a/
src/net_setup.c
+++ b/
src/net_setup.c
@@
-1,7
+1,8
@@
/*
net_setup.c -- Setup.
Copyright (C) 1998-2005 Ivo Timmermans,
/*
net_setup.c -- Setup.
Copyright (C) 1998-2005 Ivo Timmermans,
- 2000-2009 Guus Sliepen <guus@tinc-vpn.org>
+ 2000-2010 Guus Sliepen <guus@tinc-vpn.org>
+ 2006 Scott Lamb <slamb@slamb.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-44,14
+45,11
@@
char *myport;
char *myport;
-bool read_rsa_public_key(connection_t *c)
-{
+bool read_rsa_public_key(connection_t *c) {
FILE *fp;
char *fname;
char *key;
FILE *fp;
char *fname;
char *key;
- cp();
-
if(!c->rsa_key) {
c->rsa_key = RSA_new();
// RSA_blinding_on(c->rsa_key, NULL);
if(!c->rsa_key) {
c->rsa_key = RSA_new();
// RSA_blinding_on(c->rsa_key, NULL);
@@
-72,7
+70,7
@@
bool read_rsa_public_key(connection_t *c)
fp = fopen(fname, "r");
if(!fp) {
fp = fopen(fname, "r");
if(!fp) {
- logger(LOG_ERR,
_("Error reading RSA public key file `%s': %s")
,
+ logger(LOG_ERR,
"Error reading RSA public key file `%s': %s"
,
fname, strerror(errno));
free(fname);
return false;
fname, strerror(errno));
free(fname);
return false;
@@
-89,7
+87,7
@@
bool read_rsa_public_key(connection_t *c)
fp = fopen(fname, "r");
if(!fp) {
fp = fopen(fname, "r");
if(!fp) {
- logger(LOG_ERR,
_("Error reading RSA public key file `%s': %s")
,
+ logger(LOG_ERR,
"Error reading RSA public key file `%s': %s"
,
fname, strerror(errno));
free(fname);
return false;
fname, strerror(errno));
free(fname);
return false;
@@
-104,7
+102,7
@@
bool read_rsa_public_key(connection_t *c)
return true;
}
return true;
}
- logger(LOG_ERR,
_("Reading RSA public key file `%s' failed: %s")
,
+ logger(LOG_ERR,
"Reading RSA public key file `%s' failed: %s"
,
fname, strerror(errno));
return false;
}
fname, strerror(errno));
return false;
}
@@
-140,22
+138,19
@@
bool read_rsa_public_key(connection_t *c)
if(c->rsa_key)
return true;
if(c->rsa_key)
return true;
- logger(LOG_ERR,
_("No public key for %s specified!")
, c->name);
+ logger(LOG_ERR,
"No public key for %s specified!"
, c->name);
return false;
}
return false;
}
-bool read_rsa_private_key(void)
-{
+bool read_rsa_private_key(void) {
FILE *fp;
char *fname, *key, *pubkey;
struct stat s;
FILE *fp;
char *fname, *key, *pubkey;
struct stat s;
- cp();
-
if(get_config_string(lookup_config(config_tree, "PrivateKey"), &key)) {
if(!get_config_string(lookup_config(myself->connection->config_tree, "PublicKey"), &pubkey)) {
if(get_config_string(lookup_config(config_tree, "PrivateKey"), &key)) {
if(!get_config_string(lookup_config(myself->connection->config_tree, "PublicKey"), &pubkey)) {
- logger(LOG_ERR,
_("PrivateKey used but no PublicKey found!")
);
+ logger(LOG_ERR,
"PrivateKey used but no PublicKey found!"
);
return false;
}
myself->connection->rsa_key = RSA_new();
return false;
}
myself->connection->rsa_key = RSA_new();
@@
-174,7
+169,7
@@
bool read_rsa_private_key(void)
fp = fopen(fname, "r");
if(!fp) {
fp = fopen(fname, "r");
if(!fp) {
- logger(LOG_ERR,
_("Error reading RSA private key file `%s': %s")
,
+ logger(LOG_ERR,
"Error reading RSA private key file `%s': %s"
,
fname, strerror(errno));
free(fname);
return false;
fname, strerror(errno));
free(fname);
return false;
@@
-182,21
+177,21
@@
bool read_rsa_private_key(void)
#if !defined(HAVE_MINGW) && !defined(HAVE_CYGWIN)
if(fstat(fileno(fp), &s)) {
#if !defined(HAVE_MINGW) && !defined(HAVE_CYGWIN)
if(fstat(fileno(fp), &s)) {
- logger(LOG_ERR,
_("Could not stat RSA private key file `%s': %s'")
,
+ logger(LOG_ERR,
"Could not stat RSA private key file `%s': %s'"
,
fname, strerror(errno));
free(fname);
return false;
}
if(s.st_mode & ~0100700)
fname, strerror(errno));
free(fname);
return false;
}
if(s.st_mode & ~0100700)
- logger(LOG_WARNING,
_("Warning: insecure file permissions for RSA private key file `%s'!")
, fname);
+ logger(LOG_WARNING,
"Warning: insecure file permissions for RSA private key file `%s'!"
, fname);
#endif
myself->connection->rsa_key = PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL);
fclose(fp);
if(!myself->connection->rsa_key) {
#endif
myself->connection->rsa_key = PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL);
fclose(fp);
if(!myself->connection->rsa_key) {
- logger(LOG_ERR,
_("Reading RSA private key file `%s' failed: %s")
,
+ logger(LOG_ERR,
"Reading RSA private key file `%s' failed: %s"
,
fname, strerror(errno));
free(fname);
return false;
fname, strerror(errno));
free(fname);
return false;
@@
-209,8
+204,7
@@
bool read_rsa_private_key(void)
/*
Configure node_t myself and set up the local sockets (listen only)
*/
/*
Configure node_t myself and set up the local sockets (listen only)
*/
-bool setup_myself(void)
-{
+bool setup_myself(void) {
config_t *cfg;
subnet_t *subnet;
char *name, *hostname, *mode, *afname, *cipher, *digest;
config_t *cfg;
subnet_t *subnet;
char *name, *hostname, *mode, *afname, *cipher, *digest;
@@
-220,25
+214,23
@@
bool setup_myself(void)
bool choice;
int i, err;
bool choice;
int i, err;
- cp();
-
myself = new_node();
myself->connection = new_connection();
init_configuration(&myself->connection->config_tree);
myself = new_node();
myself->connection = new_connection();
init_configuration(&myself->connection->config_tree);
-
xasprintf(&myself->hostname, _("MYSELF")
);
-
xasprintf(&myself->connection->hostname, _("MYSELF")
);
+
myself->hostname = xstrdup("MYSELF"
);
+
myself->connection->hostname = xstrdup("MYSELF"
);
myself->connection->options = 0;
myself->connection->protocol_version = PROT_CURRENT;
if(!get_config_string(lookup_config(config_tree, "Name"), &name)) { /* Not acceptable */
myself->connection->options = 0;
myself->connection->protocol_version = PROT_CURRENT;
if(!get_config_string(lookup_config(config_tree, "Name"), &name)) { /* Not acceptable */
- logger(LOG_ERR,
_("Name for tinc daemon required!")
);
+ logger(LOG_ERR,
"Name for tinc daemon required!"
);
return false;
}
if(!check_id(name)) {
return false;
}
if(!check_id(name)) {
- logger(LOG_ERR,
_("Invalid name for myself!")
);
+ logger(LOG_ERR,
"Invalid name for myself!"
);
free(name);
return false;
}
free(name);
return false;
}
@@
-247,15
+239,16
@@
bool setup_myself(void)
myself->connection->name = xstrdup(name);
if(!read_connection_config(myself->connection)) {
myself->connection->name = xstrdup(name);
if(!read_connection_config(myself->connection)) {
- logger(LOG_ERR,
_("Cannot open host configuration file for myself!")
);
+ logger(LOG_ERR,
"Cannot open host configuration file for myself!"
);
return false;
}
if(!read_rsa_private_key())
return false;
return false;
}
if(!read_rsa_private_key())
return false;
- if(!get_config_string(lookup_config(myself->connection->config_tree, "Port"), &myport))
- xasprintf(&myport, "655");
+ if(!get_config_string(lookup_config(config_tree, "Port"), &myport)
+ && !get_config_string(lookup_config(myself->connection->config_tree, "Port"), &myport))
+ myport = xstrdup("655");
/* Read in all the subnets specified in the host configuration file */
/* Read in all the subnets specified in the host configuration file */
@@
-297,25
+290,30
@@
bool setup_myself(void)
else if(!strcasecmp(mode, "hub"))
routing_mode = RMODE_HUB;
else {
else if(!strcasecmp(mode, "hub"))
routing_mode = RMODE_HUB;
else {
- logger(LOG_ERR,
_("Invalid routing mode!")
);
+ logger(LOG_ERR,
"Invalid routing mode!"
);
return false;
}
free(mode);
} else
routing_mode = RMODE_ROUTER;
return false;
}
free(mode);
} else
routing_mode = RMODE_ROUTER;
- // Enable PMTUDiscovery by default if we are in router mode.
-
- choice = routing_mode == RMODE_ROUTER;
+ choice = true;
get_config_bool(lookup_config(myself->connection->config_tree, "PMTUDiscovery"), &choice);
get_config_bool(lookup_config(myself->connection->config_tree, "PMTUDiscovery"), &choice);
- if(choice)
+ get_config_bool(lookup_config(config_tree, "PMTUDiscovery"), &choice);
+ if(choice)
myself->options |= OPTION_PMTU_DISCOVERY;
myself->options |= OPTION_PMTU_DISCOVERY;
+ choice = true;
+ get_config_bool(lookup_config(config_tree, "ClampMSS"), &choice);
+ get_config_bool(lookup_config(myself->connection->config_tree, "ClampMSS"), &choice);
+ if(choice)
+ myself->options |= OPTION_CLAMP_MSS;
+
get_config_bool(lookup_config(config_tree, "PriorityInheritance"), &priorityinheritance);
#if !defined(SOL_IP) || !defined(IP_TOS)
if(priorityinheritance)
get_config_bool(lookup_config(config_tree, "PriorityInheritance"), &priorityinheritance);
#if !defined(SOL_IP) || !defined(IP_TOS)
if(priorityinheritance)
- logger(LOG_WARNING,
_("%s not supported on this platform")
, "PriorityInheritance");
+ logger(LOG_WARNING,
"%s not supported on this platform"
, "PriorityInheritance");
#endif
if(!get_config_int(lookup_config(config_tree, "MACExpire"), &macexpire))
#endif
if(!get_config_int(lookup_config(config_tree, "MACExpire"), &macexpire))
@@
-323,7
+321,7
@@
bool setup_myself(void)
if(get_config_int(lookup_config(config_tree, "MaxTimeout"), &maxtimeout)) {
if(maxtimeout <= 0) {
if(get_config_int(lookup_config(config_tree, "MaxTimeout"), &maxtimeout)) {
if(maxtimeout <= 0) {
- logger(LOG_ERR,
_("Bogus maximum timeout!")
);
+ logger(LOG_ERR,
"Bogus maximum timeout!"
);
return false;
}
} else
return false;
}
} else
@@
-337,7
+335,7
@@
bool setup_myself(void)
else if(!strcasecmp(afname, "any"))
addressfamily = AF_UNSPEC;
else {
else if(!strcasecmp(afname, "any"))
addressfamily = AF_UNSPEC;
else {
- logger(LOG_ERR,
_("Invalid address family!")
);
+ logger(LOG_ERR,
"Invalid address family!"
);
return false;
}
free(afname);
return false;
}
free(afname);
@@
-355,19
+353,19
@@
bool setup_myself(void)
myself->incipher = EVP_get_cipherbyname(cipher);
if(!myself->incipher) {
myself->incipher = EVP_get_cipherbyname(cipher);
if(!myself->incipher) {
- logger(LOG_ERR,
_("Unrecognized cipher type!")
);
+ logger(LOG_ERR,
"Unrecognized cipher type!"
);
return false;
}
}
} else
return false;
}
}
} else
- myself->incipher = EVP_
aes_256
_cbc();
+ myself->incipher = EVP_
bf
_cbc();
if(myself->incipher)
myself->inkeylength = myself->incipher->key_len + myself->incipher->iv_len;
else
myself->inkeylength = 1;
if(myself->incipher)
myself->inkeylength = myself->incipher->key_len + myself->incipher->iv_len;
else
myself->inkeylength = 1;
- myself->connection->outcipher = EVP_
aes_256
_ofb();
+ myself->connection->outcipher = EVP_
bf
_ofb();
if(!get_config_int(lookup_config(config_tree, "KeyExpire"), &keylifetime))
keylifetime = 3600;
if(!get_config_int(lookup_config(config_tree, "KeyExpire"), &keylifetime))
keylifetime = 3600;
@@
-383,22
+381,22
@@
bool setup_myself(void)
myself->indigest = EVP_get_digestbyname(digest);
if(!myself->indigest) {
myself->indigest = EVP_get_digestbyname(digest);
if(!myself->indigest) {
- logger(LOG_ERR,
_("Unrecognized digest type!")
);
+ logger(LOG_ERR,
"Unrecognized digest type!"
);
return false;
}
}
} else
return false;
}
}
} else
- myself->indigest = EVP_sha
256
();
+ myself->indigest = EVP_sha
1
();
- myself->connection->outdigest = EVP_sha
256
();
+ myself->connection->outdigest = EVP_sha
1
();
if(get_config_int(lookup_config(myself->connection->config_tree, "MACLength"), &myself->inmaclength)) {
if(myself->indigest) {
if(myself->inmaclength > myself->indigest->md_size) {
if(get_config_int(lookup_config(myself->connection->config_tree, "MACLength"), &myself->inmaclength)) {
if(myself->indigest) {
if(myself->inmaclength > myself->indigest->md_size) {
- logger(LOG_ERR,
_("MAC length exceeds size of digest!")
);
+ logger(LOG_ERR,
"MAC length exceeds size of digest!"
);
return false;
} else if(myself->inmaclength < 0) {
return false;
} else if(myself->inmaclength < 0) {
- logger(LOG_ERR,
_("Bogus MAC length!")
);
+ logger(LOG_ERR,
"Bogus MAC length!"
);
return false;
}
}
return false;
}
}
@@
-411,7
+409,7
@@
bool setup_myself(void)
if(get_config_int(lookup_config(myself->connection->config_tree, "Compression"), &myself->incompression)) {
if(myself->incompression < 0 || myself->incompression > 11) {
if(get_config_int(lookup_config(myself->connection->config_tree, "Compression"), &myself->incompression)) {
if(myself->incompression < 0 || myself->incompression > 11) {
- logger(LOG_ERR,
_("Bogus compression level!")
);
+ logger(LOG_ERR,
"Bogus compression level!"
);
return false;
}
} else
return false;
}
} else
@@
-461,7
+459,7
@@
bool setup_myself(void)
err = getaddrinfo(address, myport, &hint, &ai);
if(err || !ai) {
err = getaddrinfo(address, myport, &hint, &ai);
if(err || !ai) {
- logger(LOG_ERR,
_("System call `%s' failed: %s")
, "getaddrinfo",
+ logger(LOG_ERR,
"System call `%s' failed: %s"
, "getaddrinfo",
gai_strerror(err));
return false;
}
gai_strerror(err));
return false;
}
@@
-483,7
+481,7
@@
bool setup_myself(void)
ifdebug(CONNECTIONS) {
hostname = sockaddr2hostname((sockaddr_t *) aip->ai_addr);
ifdebug(CONNECTIONS) {
hostname = sockaddr2hostname((sockaddr_t *) aip->ai_addr);
- logger(LOG_NOTICE,
_("Listening on %s")
, hostname);
+ logger(LOG_NOTICE,
"Listening on %s"
, hostname);
free(hostname);
}
free(hostname);
}
@@
-494,9
+492,9
@@
bool setup_myself(void)
freeaddrinfo(ai);
if(listen_sockets)
freeaddrinfo(ai);
if(listen_sockets)
- logger(LOG_NOTICE,
_("Ready")
);
+ logger(LOG_NOTICE,
"Ready"
);
else {
else {
- logger(LOG_ERR,
_("Unable to create any listening socket!")
);
+ logger(LOG_ERR,
"Unable to create any listening socket!"
);
return false;
}
return false;
}
@@
-506,10
+504,7
@@
bool setup_myself(void)
/*
initialize network
*/
/*
initialize network
*/
-bool setup_network(void)
-{
- cp();
-
+bool setup_network(void) {
now = time(NULL);
init_events();
now = time(NULL);
init_events();
@@
-543,22
+538,26
@@
bool setup_network(void)
/*
close all open network connections
*/
/*
close all open network connections
*/
-void close_network_connections(void)
-{
+void close_network_connections(void) {
avl_node_t *node, *next;
connection_t *c;
char *envp[5];
int i;
avl_node_t *node, *next;
connection_t *c;
char *envp[5];
int i;
- cp();
-
for(node = connection_tree->head; node; node = next) {
next = node->next;
c = node->data;
for(node = connection_tree->head; node; node = next) {
next = node->next;
c = node->data;
- c->outgoing =
false
;
+ c->outgoing =
NULL
;
terminate_connection(c, false);
}
terminate_connection(c, false);
}
+ for(list_node_t *node = outgoing_list->head; node; node = node->next) {
+ outgoing_t *outgoing = node->data;
+
+ if(outgoing->event)
+ event_del(outgoing->event);
+ }
+
list_delete_list(outgoing_list);
if(myself && myself->connection) {
list_delete_list(outgoing_list);
if(myself && myself->connection) {