projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Correctly check if subnet owner exists.
[tinc]
/
src
/
net.c
diff --git
a/src/net.c
b/src/net.c
index
230f2ba
..
b7d340f
100644
(file)
--- a/
src/net.c
+++ b/
src/net.c
@@
-17,7
+17,7
@@
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id: net.c,v 1.35.4.14
4 2001/10/31 12:50:24
guus Exp $
+ $Id: net.c,v 1.35.4.14
7 2001/11/03 22:53:01
guus Exp $
*/
#include "config.h"
*/
#include "config.h"
@@
-439,8
+439,19
@@
cp
int setup_outgoing_connection(char *name)
{
connection_t *c;
int setup_outgoing_connection(char *name)
{
connection_t *c;
+ node_t *n;
struct hostent *h;
cp
struct hostent *h;
cp
+ n = lookup_node(name);
+
+ if(n)
+ if(n->connection)
+ {
+ if(debug_lvl >= DEBUG_CONNECTIONS)
+ syslog(LOG_INFO, _("Already connected to %s"), name);
+ return 0;
+ }
+
c = new_connection();
c->name = xstrdup(name);
c = new_connection();
c->name = xstrdup(name);
@@
-494,7
+505,6
@@
int read_rsa_public_key(connection_t *c)
FILE *fp;
char *fname;
char *key;
FILE *fp;
char *fname;
char *key;
- void *result;
cp
if(!c->rsa_key)
c->rsa_key = RSA_new();
cp
if(!c->rsa_key)
c->rsa_key = RSA_new();
@@
-520,9
+530,9
@@
cp
fname);
return -1;
}
fname);
return -1;
}
-
result
= PEM_read_RSAPublicKey(fp, &c->rsa_key, NULL, NULL);
+
c->rsa_key
= PEM_read_RSAPublicKey(fp, &c->rsa_key, NULL, NULL);
fclose(fp);
fclose(fp);
- if(!
result
)
+ if(!
c->rsa_key
)
{
syslog(LOG_ERR, _("Reading RSA public key file `%s' failed: %m"),
fname);
{
syslog(LOG_ERR, _("Reading RSA public key file `%s' failed: %m"),
fname);
@@
-536,19
+546,16
@@
cp
/* Else, check if a harnessed public key is in the config file */
/* Else, check if a harnessed public key is in the config file */
- result = NULL;
-
asprintf(&fname, "%s/hosts/%s", confbase, c->name);
if((fp = fopen(fname, "r")))
{
asprintf(&fname, "%s/hosts/%s", confbase, c->name);
if((fp = fopen(fname, "r")))
{
-
result
= PEM_read_RSAPublicKey(fp, &c->rsa_key, NULL, NULL);
+
c->rsa_key
= PEM_read_RSAPublicKey(fp, &c->rsa_key, NULL, NULL);
fclose(fp);
fclose(fp);
- free(fname);
}
free(fname);
}
free(fname);
- if(
result
)
+ if(
c->rsa_key
)
return 0;
else
{
return 0;
else
{
@@
-560,14
+567,11
@@
cp
int read_rsa_private_key(void)
{
FILE *fp;
int read_rsa_private_key(void)
{
FILE *fp;
- void *result;
char *fname, *key;
cp
char *fname, *key;
cp
- if(!myself->connection->rsa_key)
- myself->connection->rsa_key = RSA_new();
-
if(get_config_string(lookup_config(config_tree, "PrivateKey"), &key))
{
if(get_config_string(lookup_config(config_tree, "PrivateKey"), &key))
{
+ myself->connection->rsa_key = RSA_new();
BN_hex2bn(&myself->connection->rsa_key->d, key);
BN_hex2bn(&myself->connection->rsa_key->e, "FFFF");
}
BN_hex2bn(&myself->connection->rsa_key->d, key);
BN_hex2bn(&myself->connection->rsa_key->e, "FFFF");
}
@@
-579,9
+583,9
@@
cp
fname);
return -1;
}
fname);
return -1;
}
-
result = PEM_read_RSAPrivateKey(fp, &myself->connection->rsa_key
, NULL, NULL);
+
myself->connection->rsa_key = PEM_read_RSAPrivateKey(fp, NULL
, NULL, NULL);
fclose(fp);
fclose(fp);
- if(!
result
)
+ if(!
myself->connection->rsa_key
)
{
syslog(LOG_ERR, _("Reading RSA private key file `%s' failed: %m"),
fname);
{
syslog(LOG_ERR, _("Reading RSA private key file `%s' failed: %m"),
fname);
@@
-842,13
+846,13
@@
cp
c->address = ntohl(ci.sin_addr.s_addr);
c->hostname = hostlookup(ci.sin_addr.s_addr);
c->address = ntohl(ci.sin_addr.s_addr);
c->hostname = hostlookup(ci.sin_addr.s_addr);
- c->port = htons(ci.sin_port);
/* This one will be overwritten later */
+ c->port = htons(ci.sin_port);
c->socket = sfd;
c->last_ping_time = time(NULL);
if(debug_lvl >= DEBUG_CONNECTIONS)
syslog(LOG_NOTICE, _("Connection from %s port %d"),
c->socket = sfd;
c->last_ping_time = time(NULL);
if(debug_lvl >= DEBUG_CONNECTIONS)
syslog(LOG_NOTICE, _("Connection from %s port %d"),
- c->hostname,
htons(ci.sin_port)
);
+ c->hostname,
c->port
);
c->allow_request = ID;
cp
c->allow_request = ID;
cp
@@
-1096,6
+1100,12
@@
cp
get_config_string(cfg, &name);
cfg = lookup_config_next(config_tree, cfg); /* Next time skip to next ConnectTo line */
get_config_string(cfg, &name);
cfg = lookup_config_next(config_tree, cfg); /* Next time skip to next ConnectTo line */
+ if(check_id(name))
+ {
+ syslog(LOG_ERR, _("Invalid name for outgoing connection in %s line %d"), cfg->file, cfg->line);
+ continue;
+ }
+
if(setup_outgoing_connection(name)) /* function returns 0 when there are no problems */
retry = 1;
if(setup_outgoing_connection(name)) /* function returns 0 when there are no problems */
retry = 1;