oweals/tinc.git
11 years agoFix CTR mode.
Guus Sliepen [Fri, 30 Aug 2013 11:43:23 +0000 (13:43 +0200)]
Fix CTR mode.

11 years agoAdd an option to test datagram SPTPS with packet loss.
Guus Sliepen [Fri, 30 Aug 2013 11:04:14 +0000 (13:04 +0200)]
Add an option to test datagram SPTPS with packet loss.

11 years agoWhen generating invitations, handle any order of Port and Adress statements.
Guus Sliepen [Wed, 28 Aug 2013 12:24:07 +0000 (14:24 +0200)]
When generating invitations, handle any order of Port and Adress statements.

11 years agoCall WSAStartup() in main().
Guus Sliepen [Tue, 27 Aug 2013 19:19:50 +0000 (21:19 +0200)]
Call WSAStartup() in main().

The tinc utility defered calling WSAStartup() until it tried to connect to a
running tinc daemon. However, socket functions are now also used for other
things (like joining another VPN using an invitation). Now we just
unconditionally call WSAStartup() early in main().

11 years agoTell invited node about Mode and Broadcast settings.
Guus Sliepen [Fri, 23 Aug 2013 22:48:24 +0000 (00:48 +0200)]
Tell invited node about Mode and Broadcast settings.

Since these settings really should be the same for all nodes in a VPN.

11 years agoUse PATHEXT when checking for the presence of scripts on Windows.
Guus Sliepen [Fri, 23 Aug 2013 17:24:36 +0000 (19:24 +0200)]
Use PATHEXT when checking for the presence of scripts on Windows.

It seems like a lot of overhead to call access() for every possible extension
defined in PATHEXT, but apparently this is what Windows does itself too. At
least this avoids calling system() when the script one is looking for does not
exist at all.

Since the tinc utility also needs to call scripts, execute_script() is now
split off into its own source file.

11 years agoExecute scripts when invitations are created or accepted.
Guus Sliepen [Tue, 20 Aug 2013 22:24:55 +0000 (00:24 +0200)]
Execute scripts when invitations are created or accepted.

11 years agoEnsure the invitation filenames do not reveal the secret cookie.
Guus Sliepen [Tue, 20 Aug 2013 21:09:36 +0000 (23:09 +0200)]
Ensure the invitation filenames do not reveal the secret cookie.

Since filenames could potentially leak to unprivileged users (for example,
because of locatedb), it should not contain the cookie used for invitations.
Instead, tinc now uses the hash of the cookie and the invitation key as the
filename to store pending invitations in.

11 years agoLet a server explicitly send a notification when the invitation protocol succeeded.
Guus Sliepen [Tue, 20 Aug 2013 20:36:31 +0000 (22:36 +0200)]
Let a server explicitly send a notification when the invitation protocol succeeded.

11 years agoUse our own infrastructure for finding out the local node's externally visible host...
Guus Sliepen [Tue, 20 Aug 2013 14:49:03 +0000 (16:49 +0200)]
Use our own infrastructure for finding out the local node's externally visible host name.

11 years agoResolve the local host name before generating the invitation file.
Guus Sliepen [Tue, 20 Aug 2013 14:47:07 +0000 (16:47 +0200)]
Resolve the local host name before generating the invitation file.

11 years agoBind outgoing sockets again.
Guus Sliepen [Sun, 18 Aug 2013 21:55:40 +0000 (23:55 +0200)]
Bind outgoing sockets again.

Commit cff5a84 removed the feature of binding outgoing TCP sockets to a local
address. We now call bind() again, but only if there is exactly one listening
socket with the same address family as the destination address of the outgoing
socket.

11 years agoRemove broadcast of KEY_CHANGED message during tinc's initialization.
Guus Sliepen [Sun, 18 Aug 2013 20:43:55 +0000 (22:43 +0200)]
Remove broadcast of KEY_CHANGED message during tinc's initialization.

11 years agoFix order of tincd's initialization.
Guus Sliepen [Sun, 18 Aug 2013 20:35:27 +0000 (22:35 +0200)]
Fix order of tincd's initialization.

The order in which tinc initialized things was not completely correct. Now, it
is done as follows:

- Load and parse configuration files.
- Create all TCP and UDP listening sockets.
- Create PID file and UNIX socket.
- Run the tinc-up script.
- Drop privileges.
- Start outgoing connections.
- Run the main loop.

The PID file can only be created correctly if the listening sockets have been
set up ,as it includes the address and port of the first listening socket. The
tinc-up script has to be run after the PID file and UNIX socket have been
created so it can change their permissions if necessary. Outgoing connections
should only be started right before the main loop, because this is not really
part of the initialization.

11 years agoDon't force a .bat extension for scripts under Windows.
Guus Sliepen [Sun, 18 Aug 2013 16:20:41 +0000 (18:20 +0200)]
Don't force a .bat extension for scripts under Windows.

11 years agoCreate UNIX socket at the same time as the PID file is created.
Guus Sliepen [Sun, 18 Aug 2013 15:02:49 +0000 (17:02 +0200)]
Create UNIX socket at the same time as the PID file is created.

The PID file was created before tinc-up was called, but the UNIX socket was
created afterwards, which meant one could not change the UNIX socket's owner or
permissions from the tinc-up script.

11 years agoRemove texi2html rule in docs/Makefile.
Guus Sliepen [Wed, 14 Aug 2013 14:20:32 +0000 (16:20 +0200)]
Remove texi2html rule in docs/Makefile.

According to Debian, texi2html is deprecated and makeinfo --html should be used
instead. Automake already provides a html target that invokes makeinfo.

11 years agoStop using EXTRA_DIST in src/Makefile.am.
Guus Sliepen [Wed, 14 Aug 2013 14:17:12 +0000 (16:17 +0200)]
Stop using EXTRA_DIST in src/Makefile.am.

Automake finds the files in the subdirectories of src/ now that they are
properly declared in the _SOURCES variables. Using EXTRA_DIST would now cause
.o files to be included in the tarball.

11 years agoReleasing 1.1pre8. release-1.1pre8
Guus Sliepen [Tue, 13 Aug 2013 20:05:43 +0000 (22:05 +0200)]
Releasing 1.1pre8.

11 years agoDon't typedef the same struct in two header files.
Guus Sliepen [Tue, 13 Aug 2013 18:40:40 +0000 (20:40 +0200)]
Don't typedef the same struct in two header files.

Some (older?) versions of GCC don't like this.

11 years agoUpdate copyright notices.
Guus Sliepen [Tue, 13 Aug 2013 18:38:57 +0000 (20:38 +0200)]
Update copyright notices.

11 years agoBuild .tar.gz instead of .tar.xz.
Guus Sliepen [Tue, 13 Aug 2013 18:37:55 +0000 (20:37 +0200)]
Build .tar.gz instead of .tar.xz.

Only FreeBSD's tar supports xz compression, the other BSDs do not. NetBSD doesn't even
like bzip2.

11 years agoMove .h files from noinst_HEADERS to tincd_SOURCES.
Guus Sliepen [Tue, 13 Aug 2013 18:35:48 +0000 (20:35 +0200)]
Move .h files from noinst_HEADERS to tincd_SOURCES.

This is the recommended way according to the Automake manual.

11 years agoDon't echo broadcast packets back when Broadcast = direct.
Guus Sliepen [Thu, 8 Aug 2013 15:40:15 +0000 (17:40 +0200)]
Don't echo broadcast packets back when Broadcast = direct.

11 years agoFix a typo.
Guus Sliepen [Fri, 2 Aug 2013 21:51:55 +0000 (23:51 +0200)]
Fix a typo.

11 years agoNon-zero exit code when reloading config file fails after SIGHUP.
Guus Sliepen [Fri, 2 Aug 2013 21:46:19 +0000 (23:46 +0200)]
Non-zero exit code when reloading config file fails after SIGHUP.

When reloading the configuration file via the tinc command, the user will get
an error message if reloading has failed. However, no such warning exists when
sending a HUP signal. Previously, tincd would exit in both cases, but with a
zero exit code. Now it will exit with code 1 when reloading fails after a
SIGHUP, but tincd will keep running if it is signaled via the tinc command.
Instead, the tinc command will exit with a non-zero exit code.

11 years agoReally retry outgoing connections immediately if requested.
Guus Sliepen [Fri, 2 Aug 2013 18:53:54 +0000 (20:53 +0200)]
Really retry outgoing connections immediately if requested.

The retry() function would only abort connections that were in progress of
being made, it wouldn't reschedule the outgoing connections that had been
sleeping.

11 years agoClean up the SIGINT handler.
Guus Sliepen [Fri, 2 Aug 2013 18:50:19 +0000 (20:50 +0200)]
Clean up the SIGINT handler.

11 years agoUse umask() to set file and UNIX socket permissions without race conditions.
Guus Sliepen [Fri, 2 Aug 2013 17:27:06 +0000 (19:27 +0200)]
Use umask() to set file and UNIX socket permissions without race conditions.

As mentioned by Erik Tews, calling fchmod() after fopen() leaves a small window
for exploits. As long as tinc is single-threaded, we can use umask() instead to
reduce file permissions. This also works when creating the AF_UNIX control socket.

The umask of the user running tinc(d) is used for most files, except for the
private keys, invitation files, PID file and control socket.

11 years agoDefer handling netname conflicts when accepting an invitation.
Guus Sliepen [Fri, 26 Jul 2013 13:48:52 +0000 (15:48 +0200)]
Defer handling netname conflicts when accepting an invitation.

In case no explicit netname of configuration directory is specified when
accepting an invitation, the netname specified in the invitation data is
used. However, this new netname is only known after making the connection
to the server. If the new netname conflicts with an existing one at the
client, we ask the user for a netname that doesn't conflict. However, we
should first finish accepting the invitation, so we don't run into the
problem that the server times out and cancels the invitation. So, we create
a random netname and store the files there, and only after we finish
accepting the invitation we ask the user for a better netname, and then
just rename the temporary directory to the final name.

11 years agoMake absolutely sure we can write config files before accepting an invitation.
Guus Sliepen [Fri, 26 Jul 2013 13:44:05 +0000 (15:44 +0200)]
Make absolutely sure we can write config files before accepting an invitation.

11 years agoChoose a different Port when 655 isn't available when doing "tinc join".
Guus Sliepen [Fri, 26 Jul 2013 12:53:36 +0000 (14:53 +0200)]
Choose a different Port when 655 isn't available when doing "tinc join".

11 years agoChoose a different Port when 655 isn't available when doing "tinc init".
Guus Sliepen [Fri, 26 Jul 2013 12:17:15 +0000 (14:17 +0200)]
Choose a different Port when 655 isn't available when doing "tinc init".

If port 655 cannot be bound to when using the init command, tinc will try to
find a random port number that can be bound to, and will add the appropriate
Port variable to its host config file. A warning will be printed as well.

11 years agoDon't forget the Port variable when creating an invitation URL.
Guus Sliepen [Thu, 25 Jul 2013 15:17:33 +0000 (17:17 +0200)]
Don't forget the Port variable when creating an invitation URL.

11 years agoAllow control-C to stop tincd without stopping the tinc shell.
Guus Sliepen [Thu, 25 Jul 2013 15:14:07 +0000 (17:14 +0200)]
Allow control-C to stop tincd without stopping the tinc shell.

11 years agoWarn when incorrect use of add or set causes variables to be removed.
Guus Sliepen [Thu, 25 Jul 2013 14:21:11 +0000 (16:21 +0200)]
Warn when incorrect use of add or set causes variables to be removed.

11 years agoFix compression when using the SPTPS protocol.
Guus Sliepen [Wed, 24 Jul 2013 18:48:31 +0000 (20:48 +0200)]
Fix compression when using the SPTPS protocol.

11 years agoHonour umask, let temporary key files inherit original's permissions.
Guus Sliepen [Mon, 22 Jul 2013 20:58:13 +0000 (22:58 +0200)]
Honour umask, let temporary key files inherit original's permissions.

During the init command, tinc changed the umask to 077 when writing the public
and private key files, to prevent the temporary copies from being world
readable. However, subsequently created files would therefore also be
unreadable for others. Now we don't change the umask anymore, therefore
allowing the user to choose whether the files are world readable or not by
setting the umask as desired. The private key files are still made unreadable
for others of course. Temporary files now inherit the permissions of the
original, and the tinc-up script's permissions now also honour the umask.

11 years agoFurther improve bandwidth estimation for type 2 MTU probe replies.
Etienne Dechamps [Mon, 22 Jul 2013 20:22:26 +0000 (21:22 +0100)]
Further improve bandwidth estimation for type 2 MTU probe replies.

This patch adds timestamp information to type 2 MTU probe replies. This
timestamp can then be used by the recipient to estimate bandwidth more
accurately, as jitter in the RX direction won't affect the results.

11 years agoIntroduce lightweight PMTU probe replies.
Etienne Dechamps [Sun, 21 Jul 2013 12:05:42 +0000 (13:05 +0100)]
Introduce lightweight PMTU probe replies.

When replying to a PMTU probe, tinc sends a packet with the same length
as the PMTU probe itself, which is usually large (~1450 bytes). This is
not necessary: the other node wants to know the size of the PMTU probes
that have been received, but encoding this information as the actual
reply length is probably the most inefficient way to do it. It doubles
the bandwidth usage of the PMTU discovery process, and makes it less
reliable since large packets are more likely to be dropped.

This patch introduces a new PMTU probe reply type, encoded as type "2"
in the first byte of the packet, that indicates that the length of the
PMTU probe that is being replied to is encoded in the next two bytes of
the packet. Thus reply packets are only 3 bytes long.

(This also protects against very broken networks that drop very small
packets - yes, I've seen it happen on a subnet of a national ISP - in
such a case the PMTU probe replies will be dropped, and tinc won't
enable UDP communication, which is a good thing.)

Because legacy nodes won't understand type 2 probe replies, the minor
protocol number is bumped to 3.

Note that this also improves bandwidth estimation, as it is able to
measure bandwidth in both directions independently (the node receiving
the replies is measuring in the TX direction) and the use of smaller
reply packets might decrease the influence of jitter.

11 years agoDisable PMTU discovery when TCPOnly is set.
Etienne Dechamps [Sat, 20 Jul 2013 21:59:57 +0000 (22:59 +0100)]
Disable PMTU discovery when TCPOnly is set.

Obviously, PMTU discovery doesn't make much sense when we know we'll be
using TCP anyway.

11 years agoAllow extra options to be passed to "tinc restart" again.
Guus Sliepen [Sat, 20 Jul 2013 22:20:54 +0000 (00:20 +0200)]
Allow extra options to be passed to "tinc restart" again.

11 years agoForbid protocol version rollback.
Guus Sliepen [Sat, 20 Jul 2013 22:13:38 +0000 (00:13 +0200)]
Forbid protocol version rollback.

When we know a node's ECDSA key, we only allow communication via the SPTPS
protocol.

11 years agoAttribution for Etienne Dechamps.
Guus Sliepen [Sat, 20 Jul 2013 21:41:01 +0000 (23:41 +0200)]
Attribution for Etienne Dechamps.

11 years agoFix hash_function().
Etienne Dechamps [Sat, 20 Jul 2013 13:50:28 +0000 (14:50 +0100)]
Fix hash_function().

The hashing function that tinc uses is currently broken as it only looks
at the first 4 bytes of data.

This leads to interesting bugs, like the node UDP address cache being
subtly broken because two addresses with the same protocol and port (but
not the same IP address) will override each other. This is because
the first four bytes of sockaddr_in contains the IP protocol and port,
while the IP address itself is contained in the four remaining bytes
that are never used when the hash is computed.

11 years agoDon't use vasprintf() anymore on Windows.
Guus Sliepen [Wed, 17 Jul 2013 16:06:56 +0000 (18:06 +0200)]
Don't use vasprintf() anymore on Windows.

Windows doesn't actually support it, but MinGW provides it. However, with some versions of
MinGW it doesn't work correctly. Instead, we vsnprintf() to a local buffer and xstrdup() the
results.

11 years agoDon't search in local directories for include files.
Guus Sliepen [Wed, 17 Jul 2013 16:02:07 +0000 (18:02 +0200)]
Don't search in local directories for include files.

Tinc's source code doesn't rely on this anymore, and this gets rid of potential conflicts with
system headers.

11 years agoAdd missing definitions on Windows.
Guus Sliepen [Wed, 17 Jul 2013 16:00:40 +0000 (18:00 +0200)]
Add missing definitions on Windows.

11 years agoFix warning "Both netname and configuration directory given" on Windows.
Guus Sliepen [Mon, 15 Jul 2013 12:48:43 +0000 (14:48 +0200)]
Fix warning "Both netname and configuration directory given" on Windows.

11 years agoFix combination of Mode = router and DeviceType = tap on Linux.
Etienne Dechamps [Sat, 13 Jul 2013 22:34:42 +0000 (23:34 +0100)]
Fix combination of Mode = router and DeviceType = tap on Linux.

I believe I have found a bug in tinc on Linux when it is used with
Mode = router and DeviceType = tap. This combination is useful because
it allows global broadcast packets to be used in router mode. However,
when tinc receives a packet in this situation, it needs to make sure its
destination MAC address matches the address of the TAP adapter, which is
typically not the case since the sending node doesn't know the MAC
address of the recipient. Unfortunately, this is not the case on Linux,
which breaks connectivity.

11 years agoAdd connection rate limiting.
Guus Sliepen [Thu, 11 Jul 2013 21:38:38 +0000 (23:38 +0200)]
Add connection rate limiting.

Tinc now strictly limits incoming connections from the same host to 1 per
second. For incoming connections from multiple hosts short bursts of incoming
connections are allowed (by default 100), but on average also only 1 connection
per second is allowed.

When an incoming connection exceeds the limit, tinc will keep the connection in
a tarpit; the connection will be kept open but it is ignored completely. Only
one connection is in a tarpit at a time to limit the number of useless open
connections.

11 years agoSet $NAME when calling host-up/down and subnet-up/down scripts.
Guus Sliepen [Fri, 5 Jul 2013 19:36:51 +0000 (21:36 +0200)]
Set $NAME when calling host-up/down and subnet-up/down scripts.

11 years agoAdd the LocalDiscoveryAddress option.
Guus Sliepen [Fri, 31 May 2013 16:50:34 +0000 (18:50 +0200)]
Add the LocalDiscoveryAddress option.

When LocalDiscovery is enabled, tinc normally sends broadcast packets during
PMTU discovery to the broadcast address (255.255.255.255 or ff02::1). This
option lets tinc use a different address.

At the moment only one LocalDiscoveryAddress can be specified.

11 years agoUse strerror() instead of gai_strerror() when err == EAI_SYSTEM.
Guus Sliepen [Fri, 31 May 2013 15:23:00 +0000 (17:23 +0200)]
Use strerror() instead of gai_strerror() when err == EAI_SYSTEM.

11 years agoAllow the log output to be stopped with control-C in tinc's shell.
Guus Sliepen [Thu, 30 May 2013 15:38:48 +0000 (17:38 +0200)]
Allow the log output to be stopped with control-C in tinc's shell.

11 years agoBetter optional argument handling.
Guus Sliepen [Thu, 30 May 2013 14:53:16 +0000 (16:53 +0200)]
Better optional argument handling.

Some options can take an optional argument. However, in this case GNU getopt
requires that the optional argument is right next to the option without
whitespace inbetween. If there is whitespace, getopt will treat it as a
non-option argument, but tincd ignored those without a warning. Now tincd will
allow optional arguments with whitespace inbetween, and will give an error when
it encounters any other non-option arguments.

The tinc binary now requires that all options for itself are given before the
command.

11 years agoAdd an invitation protocol.
Guus Sliepen [Wed, 29 May 2013 16:31:10 +0000 (18:31 +0200)]
Add an invitation protocol.

Using the tinc command, an administrator of an existing VPN can generate
invitations for new nodes. The invitation is a small URL that can easily
be copy&pasted into email or live chat. Another person can have tinc
automatically setup the necessary configuration files and exchange keys
with the server, by only using the invitation URL.

The invitation protocol uses temporary ECDSA keys. The invitation URL
consists of the hostname and port of the server, a hash of the server's
temporary ECDSA key and a cookie. When the client wants to accept an
invitation, it also creates a temporary ECDSA key, connects to the server
and says it wants to accept an invitation. Both sides exchange their
temporary keys. The client verifies that the server's key matches the hash
in the invitation URL. After setting up an SPTPS connection using the
temporary keys, the client gives the cookie to the server. If the cookie
is valid, the server sends the client an invitation file containing the
client's new name and a copy of the server's host config file. If everything
is ok, the client will generate a long-term ECDSA key and send it to the
server, which will add it to a new host config file for the client.

The invitation protocol currently allows multiple host config files to be
send from the server to the client. However, the client filters out
most configuration variables for its own host configuration file. In
particular, it only accepts Name, Mode, Broadcast, ConnectTo, Subnet and
AutoConnect. Also, at the moment no tinc-up script is generated.

When an invitation has succesfully been accepted, the client needs to start
the tinc daemon manually.

11 years agoFix port number in pidfile.
Guus Sliepen [Tue, 28 May 2013 11:41:53 +0000 (13:41 +0200)]
Fix port number in pidfile.

11 years agoAdd a newline when logging to stderr in the tinc binary.
Guus Sliepen [Tue, 28 May 2013 11:40:32 +0000 (13:40 +0200)]
Add a newline when logging to stderr in the tinc binary.

11 years agoImprove base64 encoding/decoding, add URL-safe variant.
Guus Sliepen [Tue, 28 May 2013 11:39:15 +0000 (13:39 +0200)]
Improve base64 encoding/decoding, add URL-safe variant.

b64decode() now returns length 0 when an invalid character was encountered.

11 years agoAnnotate the xalloc functions.
Guus Sliepen [Tue, 28 May 2013 11:36:26 +0000 (13:36 +0200)]
Annotate the xalloc functions.

Most important is the annotation of xasprintf() with the format attribute,
which allows the compiler to give warnings about the format string and
arguments.

11 years agoSend a new key when we receive packets from a node we don't have a valid key for.
Guus Sliepen [Sat, 18 May 2013 14:11:30 +0000 (16:11 +0200)]
Send a new key when we receive packets from a node we don't have a valid key for.

11 years agoEnable and fix warnings from automake.
Guus Sliepen [Wed, 15 May 2013 11:55:06 +0000 (13:55 +0200)]
Enable and fix warnings from automake.

11 years agoModified some error messages in src/sptps.c.
Sven-Haegar Koch [Tue, 14 May 2013 00:57:35 +0000 (02:57 +0200)]
Modified some error messages in src/sptps.c.

11 years agoDon't try to handle incoming data if sptps_start() has not been called yet.
Guus Sliepen [Sun, 12 May 2013 11:39:22 +0000 (13:39 +0200)]
Don't try to handle incoming data if sptps_start() has not been called yet.

11 years agoFix potential NULL pointer dereferences.
Guus Sliepen [Sat, 11 May 2013 14:54:50 +0000 (16:54 +0200)]
Fix potential NULL pointer dereferences.

11 years agoDon't free ephemeral ECDH keys twice.
Guus Sliepen [Sat, 11 May 2013 12:13:23 +0000 (14:13 +0200)]
Don't free ephemeral ECDH keys twice.

ecdh_compute_shared() was changed to immediately delete the ephemeral key after
the shared secret was computed.  Therefore, the pointer to the ecdh_t struct
should be zeroed so it won't be freed again when a struct sptps_t is freed.

11 years agoUse read_host_config() where appropriate.
Guus Sliepen [Sat, 11 May 2013 12:05:28 +0000 (14:05 +0200)]
Use read_host_config() where appropriate.

11 years agoFix check for presence of ECDSA public key for outgoing connections.
Guus Sliepen [Sat, 11 May 2013 12:04:39 +0000 (14:04 +0200)]
Fix check for presence of ECDSA public key for outgoing connections.

At this point, c->config_tree may or may not be NULL, but this does not tell us whether it is an
outgoing connection or not. For incoming connections, we do not know the peer's name yet,
so we always have to claim ECDSA support. For outgoing connections, we always need to check
whether we have the peer's ECDSA public key, so that if we don't, we correctly tell the peer that
we want to upgrade.

11 years agoEnable the SPTPS protocol by default.
Guus Sliepen [Fri, 10 May 2013 19:11:45 +0000 (21:11 +0200)]
Enable the SPTPS protocol by default.

11 years agoAdd a few more checks and warnings in the crypto functions.
Guus Sliepen [Fri, 10 May 2013 18:55:52 +0000 (20:55 +0200)]
Add a few more checks and warnings in the crypto functions.

11 years agoFix warnings for functions marked __attribute((warn_unused_result)).
Guus Sliepen [Fri, 10 May 2013 18:30:47 +0000 (20:30 +0200)]
Fix warnings for functions marked __attribute((warn_unused_result)).

11 years agoAdd __attribute__((warn_unused_result)) to crypto functions.
Guus Sliepen [Fri, 10 May 2013 18:23:01 +0000 (20:23 +0200)]
Add __attribute__((warn_unused_result)) to crypto functions.

11 years agoAdd more __attribute__((malloc)) where appropriate.
Guus Sliepen [Fri, 10 May 2013 18:15:27 +0000 (20:15 +0200)]
Add more __attribute__((malloc)) where appropriate.

11 years agoAdd generic crypto headers.
Guus Sliepen [Wed, 1 May 2013 15:45:38 +0000 (17:45 +0200)]
Add generic crypto headers.

They should have been included in commit 9b9230a.

11 years agoRename xmalloc_and_zero() to xzalloc().
Guus Sliepen [Wed, 1 May 2013 15:31:33 +0000 (17:31 +0200)]
Rename xmalloc_and_zero() to xzalloc().

The former name is more or less only used by tinc, the latter is used by other
projects as well, and shorter as well.

11 years agoUse conditional compilation for cryptographic functions.
Guus Sliepen [Wed, 1 May 2013 15:17:22 +0000 (17:17 +0200)]
Use conditional compilation for cryptographic functions.

This gets rid of the rest of the symbolic links. However, as a consequence, the
crypto header files have now moved to src/, and can no longer contain
library-specific declarations. Therefore, cipher_t, digest_t, ecdh_t, ecdsa_t
and rsa_t are now all opaque types, and only pointers to those types can be
used.

11 years agoUse conditional compilation for device.c.
Guus Sliepen [Wed, 1 May 2013 10:20:06 +0000 (12:20 +0200)]
Use conditional compilation for device.c.

This requires the automake option "subdir-objects" to be enabled, and it
becomes more critical to specify the exact path to local header files.

11 years agoModernize the configure script a bit.
Guus Sliepen [Wed, 1 May 2013 09:46:40 +0000 (11:46 +0200)]
Modernize the configure script a bit.

11 years agoDon't try to create tinc.conf when using set or add commands.
Guus Sliepen [Sun, 28 Apr 2013 17:33:04 +0000 (19:33 +0200)]
Don't try to create tinc.conf when using set or add commands.

It is almost certainly an error. If one really wants to create a new tinc.conf
file, one should use the init command.

11 years agoReleasing 1.1pre7. release-1.1pre7
Guus Sliepen [Mon, 22 Apr 2013 13:54:05 +0000 (15:54 +0200)]
Releasing 1.1pre7.

11 years agoDrop packets forwarded via TCP if they are too big (CVE-2013-1428).
Guus Sliepen [Fri, 12 Apr 2013 15:15:05 +0000 (17:15 +0200)]
Drop packets forwarded via TCP if they are too big (CVE-2013-1428).

Normally all requests sent via the meta connections are checked so that they
cannot be larger than the input buffer. However, when packets are forwarded via
meta connections, they are copied into a packet buffer without checking whether
it fits into it. Since the packet buffer is allocated on the stack, this in
effect allows an authenticated remote node to cause a stack overflow.

This issue was found by Martin Schobert.

11 years agoFix completion of add/del/get/set commands.
Guus Sliepen [Tue, 12 Mar 2013 10:28:40 +0000 (11:28 +0100)]
Fix completion of add/del/get/set commands.

11 years agoDescribe the SPTPS protocol in the manual.
Guus Sliepen [Tue, 12 Mar 2013 09:49:45 +0000 (10:49 +0100)]
Describe the SPTPS protocol in the manual.

Also mention that Cipher, Digest and MACLength have no influence on the SPTPS protocol,
since that uses a fixed ciphersuite.

11 years agoRemove references to the config keyword.
Guus Sliepen [Fri, 8 Mar 2013 15:26:21 +0000 (16:26 +0100)]
Remove references to the config keyword.

11 years agoRename tincctl to tinc.
Guus Sliepen [Fri, 8 Mar 2013 15:22:56 +0000 (16:22 +0100)]
Rename tincctl to tinc.

11 years agoInclude README.android in the tarballs.
Guus Sliepen [Fri, 8 Mar 2013 13:12:48 +0000 (14:12 +0100)]
Include README.android in the tarballs.

11 years agoAvoid calling time(NULL).
Guus Sliepen [Fri, 8 Mar 2013 13:11:15 +0000 (14:11 +0100)]
Avoid calling time(NULL).

In most cases we can use the cached time.

11 years agoAllow changing configuration with tincctl without the "config" keyword.
Guus Sliepen [Fri, 8 Mar 2013 10:40:40 +0000 (11:40 +0100)]
Allow changing configuration with tincctl without the "config" keyword.

This saves typing some characters, and forces one to be more explicit about the
desired command (get, set).

11 years agoBetter default output file for generated public keys.
Guus Sliepen [Fri, 8 Mar 2013 10:24:37 +0000 (11:24 +0100)]
Better default output file for generated public keys.

11 years agoFlush output buffers in the tap reader thread on Windows.
Guus Sliepen [Fri, 1 Mar 2013 16:15:26 +0000 (17:15 +0100)]
Flush output buffers in the tap reader thread on Windows.

This is basically a port of commit 50fcfea1 to 1.1.

11 years agoUse UDP when using sptps_test in datagram mode.
Guus Sliepen [Fri, 22 Feb 2013 14:37:48 +0000 (15:37 +0100)]
Use UDP when using sptps_test in datagram mode.

11 years agoReleasing 1.1pre6. release-1.1pre6
Guus Sliepen [Wed, 20 Feb 2013 14:35:19 +0000 (15:35 +0100)]
Releasing 1.1pre6.

11 years agoFix compiler warnings on some BSD variants.
Guus Sliepen [Wed, 20 Feb 2013 14:35:08 +0000 (15:35 +0100)]
Fix compiler warnings on some BSD variants.

11 years agoFix compiler warnings on Windows.
Guus Sliepen [Wed, 20 Feb 2013 13:39:24 +0000 (14:39 +0100)]
Fix compiler warnings on Windows.

11 years agoFix a tiny memory leak.
Guus Sliepen [Wed, 20 Feb 2013 12:59:50 +0000 (13:59 +0100)]
Fix a tiny memory leak.

Found by cppcheck.

11 years agoDon't expect a response from tincd after sending REQ_STOP.
Guus Sliepen [Fri, 8 Feb 2013 15:44:50 +0000 (16:44 +0100)]
Don't expect a response from tincd after sending REQ_STOP.

11 years agoLet the GUI use UNIX sockets if available.
Guus Sliepen [Thu, 7 Feb 2013 14:27:16 +0000 (15:27 +0100)]
Let the GUI use UNIX sockets if available.

11 years agoDerive UNIX socket filename from PID filename.
Guus Sliepen [Thu, 7 Feb 2013 14:26:56 +0000 (15:26 +0100)]
Derive UNIX socket filename from PID filename.

11 years agoDon't send proxy requests for incoming connections.
Guus Sliepen [Thu, 7 Feb 2013 13:22:28 +0000 (14:22 +0100)]
Don't send proxy requests for incoming connections.