Port fixes from release 1.0.8.

This commit is contained in:
Guus Sliepen 2007-05-17 19:15:48 +00:00
parent 3730156165
commit 6ea1dfc995
6 changed files with 43 additions and 12 deletions

6
NEWS
View file

@ -1,3 +1,9 @@
Version 1.0.8 May 16 2007
* Fixed some memory and resource leaks.
* Made network sockets non-blocking under Windows.
Version 1.0.7 Jan 5 2007
* Fixed a bug that caused slow network speeds on Windows.

6
README
View file

@ -1,7 +1,7 @@
This is the README file for tinc version 1.0.7. Installation
This is the README file for tinc version 1.0.8. Installation
instructions may be found in the INSTALL file.
tinc is Copyright (C) 1998-2006 by:
tinc is Copyright (C) 1998-2007 by:
Ivo Timmermans,
Guus Sliepen <guus@tinc-vpn.org>,
@ -55,7 +55,7 @@ should be changed into "Device", and "Device" should be changed into
Compatibility
-------------
Version 1.0.7 is compatible with 1.0pre8, 1.0 and later, but not with older
Version 1.0.8 is compatible with 1.0pre8, 1.0 and later, but not with older
versions of tinc.

View file

@ -1,6 +1,6 @@
/*
connection.c -- connection list management
Copyright (C) 2000-2006 Guus Sliepen <guus@tinc-vpn.org>,
Copyright (C) 2000-2007 Guus Sliepen <guus@tinc-vpn.org>,
2000-2005 Ivo Timmermans
This program is free software; you can redistribute it and/or modify
@ -82,6 +82,9 @@ void free_connection(connection_t *c)
if(!c)
return;
if(c->name)
free(c->name);
if(c->hostname)
free(c->hostname);

View file

@ -76,18 +76,20 @@ DWORD WINAPI tapreader(void *bla) {
sock = socket(ai->ai_family, SOCK_STREAM, IPPROTO_TCP);
freeaddrinfo(ai);
if(sock < 0) {
logger(LOG_ERR, _("System call `%s' failed: %s"), "socket", strerror(errno));
freeaddrinfo(ai);
return -1;
}
if(connect(sock, ai->ai_addr, ai->ai_addrlen)) {
logger(LOG_ERR, _("System call `%s' failed: %s"), "connect", strerror(errno));
freeaddrinfo(ai);
return -1;
}
freeaddrinfo(ai);
logger(LOG_DEBUG, _("Tap reader running"));
/* Read from tap device and send to parent */

View file

@ -1,7 +1,7 @@
/*
net_socket.c -- Handle various kinds of sockets.
Copyright (C) 1998-2005 Ivo Timmermans,
2000-2006 Guus Sliepen <guus@tinc-vpn.org>
2000-2007 Guus Sliepen <guus@tinc-vpn.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
@ -62,6 +62,12 @@ static void configure_tcp(connection_t *c)
if(fcntl(c->socket, F_SETFL, flags | O_NONBLOCK) < 0) {
logger(LOG_ERR, _("fcntl for %s: %s"), c->hostname, strerror(errno));
}
#elif defined(WIN32)
unsigned long arg = 1;
if(ioctlsocket(c->socket, FIONBIO, &arg) != 0) {
logger(LOG_ERR, _("ioctlsocket for %s: WSA error %d"), c->hostname, WSAGetLastError());
}
#endif
#if defined(SOL_TCP) && defined(TCP_NODELAY)
@ -160,6 +166,16 @@ int setup_vpn_in_socket(const sockaddr_t *sa)
return -1;
}
}
#elif defined(WIN32)
{
unsigned long arg = 1;
if(ioctlsocket(nfd, FIONBIO, &arg) != 0) {
closesocket(nfd);
logger(LOG_ERR, _("Call to `%s' failed: WSA error %d"), "ioctlsocket",
WSAGetLastError());
return -1;
}
}
#endif
option = 1;
@ -318,7 +334,11 @@ begin:
result = connect(c->socket, &c->address.sa, SALEN(c->address.sa));
if(result == -1) {
if(errno == EINPROGRESS) {
if(errno == EINPROGRESS
#if defined(WIN32) && !defined(O_NONBLOCK)
|| WSAGetLastError() == WSAEWOULDBLOCK
#endif
) {
c->status.connecting = true;
return;
}
@ -403,7 +423,7 @@ void handle_new_meta_connection(int sock, short events, void *data)
sockaddrunmap(&sa);
c = new_connection();
c->name = NULL;
c->name = xstrdup("<unknown>");
c->outcipher = myself->connection->outcipher;
c->outdigest = myself->connection->outdigest;
c->outmaclength = myself->connection->outmaclength;

View file

@ -1,7 +1,7 @@
/*
protocol_auth.c -- handle the meta-protocol, authentication
Copyright (C) 1999-2005 Ivo Timmermans,
2000-2006 Guus Sliepen <guus@tinc-vpn.org>
2000-2007 Guus Sliepen <guus@tinc-vpn.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
@ -68,9 +68,9 @@ bool id_h(connection_t *c)
return false;
}
/* If we set c->name in advance, make sure we are connected to the right host */
/* If this is an outgoing connection, make sure we are connected to the right host */
if(c->name) {
if(c->outgoing) {
if(strcmp(c->name, name)) {
logger(LOG_ERR, _("Peer %s is %s instead of %s"), c->hostname, name,
c->name);