chiark / gitweb /
tripe
8 years agoserver/tests.at: Fix TRIPECTL_INTERACT argument order.
Mark Wooding [Mon, 27 Jun 2011 07:57:21 +0000 (08:57 +0100)]
server/tests.at: Fix TRIPECTL_INTERACT argument order.

For some reason, the TRIPECTL_INTERACT macro reverses its arguments,
making the first be an argument to `tripectl' and the second be the
script to connect to it.  Only neither call site actually passes the
second argument; instead, both of them pass the script in the first.
Since actually the script begins with a newline, it gets run after
`tripectl' finishes in the same side of the coprocess lash-up.

I have no idea how this has ever worked in the past.  I certainly know
that it doesn't work any more.  So fix it.

8 years agoinit/tripe-init.in: Whitespace fixups.
Mark Wooding [Mon, 27 Jun 2011 01:09:20 +0000 (02:09 +0100)]
init/tripe-init.in: Whitespace fixups.

8 years agoclient/tripectl.c, debian: Fix logging privileges disaster.
Mark Wooding [Mon, 27 Jun 2011 01:00:42 +0000 (02:00 +0100)]
client/tripectl.c, debian: Fix logging privileges disaster.

Previous behaviour: tripectl starts as root, opens logfile, starts tripe
server, drops privileges, logs happily to file, receives signal,
attempts to open new logfile, and fails miserably.  It therefore
continues logging to the old logfile, which may well have been deleted
by this point.

New behaviour: fix Debianization to put logs in a /var/log/tripe
directory, and arrange for this to be writable by the tripe user; create
the log file after dropping privileges.  If tripectl can't open the log,
it fails, and the tripe server quits due to EOF on stdin.

8 years agoVersion 1.0.0pre10. 1.0.0pre10
Mark Wooding [Fri, 22 Apr 2011 15:48:51 +0000 (16:48 +0100)]
Version 1.0.0pre10.

8 years agosvc/conntrack: Add magic `down' peer tags.
Mark Wooding [Fri, 22 Apr 2011 15:41:38 +0000 (16:41 +0100)]
svc/conntrack: Add magic `down' peer tags.

The tags `down' and `down/ANYTHING' mean that no peer from the group
should be selected.

8 years agoserver/keymgmt.c: Trivial whitespace fix.
Mark Wooding [Sun, 10 Apr 2011 21:04:17 +0000 (22:04 +0100)]
server/keymgmt.c: Trivial whitespace fix.

9 years agoBuild system: Use Automake 1.11 `silent-rules'.
Mark Wooding [Sat, 22 May 2010 11:43:56 +0000 (12:43 +0100)]
Build system: Use Automake 1.11 `silent-rules'.

This makes warnings much easier to spot in the build transcript.

9 years agoVarious C files: Ignore write errors of UDP and IP datagrams.
Mark Wooding [Sat, 22 May 2010 11:42:46 +0000 (12:42 +0100)]
Various C files: Ignore write errors of UDP and IP datagrams.

These packets are expected to go missing periodically and everyone will
cope.  Unfortunately, GCC wants us to do something with the return code
from write(2), so we explicitly assign it to a write-only variable and
hope that its data-flow analysis is done after it checks for return-code
ignoring.

9 years agoserver/tun-slip.c, server/tripe-admin.5.in: Handle write errors.
Mark Wooding [Sat, 22 May 2010 11:40:34 +0000 (12:40 +0100)]
server/tun-slip.c, server/tripe-admin.5.in: Handle write errors.

The error handling here is a little delicate.  SLIP pipes are marked
nonblocking, so that a slow driver won't hold up the server.  We ignore
EWOULDBLOCK/EAGAIN on the grounds that a dropped packet isn't particularly
disastrous and SLIP is pretty good at resynchronizing.  Other errors
break the tunnel; we issue a warning and stop bothering to write
packets at all until the interface is released and reassigned.  Obviously
dynamic interfaces will be discarded completely; static ones might be
left broken, but at least we'll retry.

Also, add the new warning to the documentation, since write errors weren't
previously something we worried about.

9 years agoserver/tun-slip: Refactor state handling somewhat.
Mark Wooding [Sat, 22 May 2010 11:04:06 +0000 (12:04 +0100)]
server/tun-slip: Refactor state handling somewhat.

Introduce a new ST_MASK which masks off the state-machine bits.  Use this
when reading SL_END or when setting ST_EOF, so as to preserve any other
state bits which might happen to have been set.  Not that I'm promising
anything...

9 years agoserver/tun-*.c: Include tunnel name in read-error warnings.
Mark Wooding [Sat, 22 May 2010 11:33:19 +0000 (12:33 +0100)]
server/tun-*.c: Include tunnel name in read-error warnings.

For some reason, all of these messages omit the tunnel name, which is
contrary to the documentation (and unlike all of the other tunnel
warning messages).

9 years agoMore minor cleanups.
Mark Wooding [Sat, 22 May 2010 09:13:18 +0000 (10:13 +0100)]
More minor cleanups.

  * priv/helper.c: Fix `itrace' comment header.

  * server/tripe.h: Remove unused type `admin_greetop'.

9 years agopriv: Remove references to transferring `tunnel_ops *' pointers.
Mark Wooding [Wed, 19 May 2010 23:46:53 +0000 (00:46 +0100)]
priv: Remove references to transferring `tunnel_ops *' pointers.

None of that happens since the helper became a separate executable;
instead, tunnel driver names are passed.  I've taken the opportunity to
fix other fossils in the privilege-separation commentary.

No substantive changes.

9 years agodebian/changelog: Another version. 1.0.0pre9
Mark Wooding [Mon, 17 May 2010 19:28:01 +0000 (20:28 +0100)]
debian/changelog: Another version.

9 years agoDisassociate public key tags from peer names.
Mark Wooding [Mon, 17 May 2010 16:14:09 +0000 (17:14 +0100)]
Disassociate public key tags from peer names.

Peer names are being used for too much now.  Originally, they /only/
identified the public key.  The peer management services muddy the issue
greatly by mapping peer names to database records.

I propose to resolve this mess in favour of the peer management
services.  The ADD command now takes an optional argument naming the
public key to use to authenticate the peer (defaulting to the peer name,
as before).  The `connect' service consults the peer database to find
which key to pass to the server.

This change modifies the server to support a new `-key' option to ADD,
and use the value of this option in preference to the peer name if it's
supplied.  It also updates the `connect' service to use this option if
necessary.  Finally, there's documentation of the various protocol and
database structure changes, and a small tweak to the test suite to make
sure the whole thing stands a chance of working.

9 years agosvc/conntrack: Make the kickpeers coroutine more robust.
Mark Wooding [Mon, 17 May 2010 16:35:50 +0000 (17:35 +0100)]
svc/conntrack: Make the kickpeers coroutine more robust.

There are inevitable races between where conntrack enumerates the peers
and when it submits the commands to modify the list.  Also, there's no
guarantee that `connect' -- which we use for initiating peer connections
-- is running at all.  So trap exceptions from the relevant commands and
issue warnings as appropriate.

9 years agosvc/conntrack.8.in: Document the D-Bus connection state notifications.
Mark Wooding [Mon, 17 May 2010 16:34:53 +0000 (17:34 +0100)]
svc/conntrack.8.in: Document the D-Bus connection state notifications.

These probably aren't very useful for other services, but they're useful
for diagnostics.

9 years agopeerdb/peers.in.5.in: Fix formatting.
Mark Wooding [Mon, 17 May 2010 16:12:51 +0000 (17:12 +0100)]
peerdb/peers.in.5.in: Fix formatting.

It seems that there's some missing text around here.  This probably
wants filling in before we commit this.

9 years agoTag version 1.0.0pre8.1. 1.0.0pre8.1
Mark Wooding [Sat, 15 May 2010 19:08:13 +0000 (20:08 +0100)]
Tag version 1.0.0pre8.1.

9 years agopy/rmcr.py: Handle stray exceptions from coroutines more sensibly.
Mark Wooding [Sat, 15 May 2010 18:42:08 +0000 (19:42 +0100)]
py/rmcr.py: Handle stray exceptions from coroutines more sensibly.

With a little luck this means that they won't just vanish silently.

9 years agosvc/conntrack.in: Force reconnection on local IP address changes.
Mark Wooding [Sat, 15 May 2010 18:41:07 +0000 (19:41 +0100)]
svc/conntrack.in: Force reconnection on local IP address changes.

ICd or NetworkManager might roam to a new network, and tell us about it;
but if we decided that we wanted to stick with the same peer
specification then our peer will continue with the wrong IP address until
watch gets a ping timeout.

Of course, this doesn't trap other reasons we might change IP addresses
without anyone noticing, such as roaming to a different 3G NAT thingummy.

9 years agosvc/conntrack.in: Fix DBusManager._reconnect to accept bus argument.
Mark Wooding [Sat, 15 May 2010 18:35:57 +0000 (19:35 +0100)]
svc/conntrack.in: Fix DBusManager._reconnect to accept bus argument.

The disconnection upcall gets given an argument, whether it wants one
or not.  Accept and ignore it.

9 years agosvc/conntrack.in: Better diagnostic equipment for D-Bus reconnection.
Mark Wooding [Sat, 15 May 2010 18:34:56 +0000 (19:34 +0100)]
svc/conntrack.in: Better diagnostic equipment for D-Bus reconnection.

Send out notifications about the D-Bus connection status.  Also, inspect
some environment variables and decide which bus to connect to, so that
I can have it connect to a special test bus which I can bounce up and
down without destroying the world.

9 years agosvc/conntrack.in: Keep the D-Bus monitor alive.
Mark Wooding [Sat, 15 May 2010 18:29:06 +0000 (19:29 +0100)]
svc/conntrack.in: Keep the D-Bus monitor alive.

Turns out nothing actually tried to keep the monitor alive.  After a
(rather random) interval, the bus just got dropped and we didn't get
any more notifications from anyone.

Stash it in a global variable.

9 years agodebian/changelog: Long overdue for a new version. 1.0.0pre8
Mark Wooding [Sun, 9 May 2010 14:33:22 +0000 (15:33 +0100)]
debian/changelog: Long overdue for a new version.

9 years agopython: Better diagnostics for coroutines.
Mark Wooding [Sun, 9 May 2010 14:06:18 +0000 (15:06 +0100)]
python: Better diagnostics for coroutines.

Provide meaningful names for coroutines, and report switches in the
debug output.

9 years agosvc/conntrack.in: New service to track connection status.
Mark Wooding [Sat, 8 May 2010 23:58:19 +0000 (00:58 +0100)]
svc/conntrack.in: New service to track connection status.

Works through D-Bus and suchlike overly modern things.

9 years agosvc/watch.in: Bug fix: addpeer on correct coroutine.
Mark Wooding [Sun, 9 May 2010 11:49:44 +0000 (12:49 +0100)]
svc/watch.in: Bug fix: addpeer on correct coroutine.

9 years agosvc/watch.in: Check that the crypto is working in adopted peers.
Mark Wooding [Sun, 9 May 2010 11:36:30 +0000 (12:36 +0100)]
svc/watch.in: Check that the crypto is working in adopted peers.

Previously we only checked for transport.  This can leave a duff peer
running without being fixed.  The downside is that this may end up
repeatedly kicking a no-hoper connection.  Treat crypto setup failure as
grounds for reconnection.

9 years agopython: Refactoring of I/O events and suchlike.
Mark Wooding [Sat, 8 May 2010 13:46:52 +0000 (14:46 +0100)]
python: Refactoring of I/O events and suchlike.

There are a number of problems with the current arrangement.

  * The service manager main loop is tied to getting I/O events through
    mLib.  There's a new service coming up which wants to collect D-Bus
    signals, and that involves using the glib event loop instead.

  * Some services seem to (still) have coroutine scheduling bugs:
    they're calling functions from the wrong coroutine.  The utilities
    in tripemon would be useful, but they're tied to the glib event
    loop.

So here's the proposed fix.

  * SelCommandDispatcher is a mistake.  Split its functionality out into
    a separate class which can be plugged into TripeConnection or one of
    its descendants, so that clients which want a glib-based dispatcher
    can replace it without having to overturn the class hierarchy.

  * Move the scheduling utilities (`idly', `aside') from tripemon into
    tripe.py.  Make them available from services by providing a main
    loop in TripeConnection.

A few more wrinkles.

  * `idly' is renamed `defer' because that's what it does now: rather
    than waiting until there are no events incoming, it clears the decks
    of all deferred operations before looking for more events.

  * The interface of `spawn' has changed.  You provide a function to
    call in a new coroutine rather than a freshly minted coroutine that
    needs hacking.  All uses of `spawn' fit this pattern, so it's not a
    big deal, but it's worth mentioning.

9 years agopy/rmcr.py: More useful diagnostics for uncaught exceptions.
Mark Wooding [Sat, 8 May 2010 18:43:18 +0000 (19:43 +0100)]
py/rmcr.py: More useful diagnostics for uncaught exceptions.

Well, at least if you turn debugging on.

9 years agodebian: Lintian fixes.
Mark Wooding [Mon, 19 Apr 2010 21:01:00 +0000 (22:01 +0100)]
debian: Lintian fixes.

  * Build-Depends on python-central.

  * tripe Depends on udev.

  * tripe-wireshark needs shlibs:Depends.  (This doesn't seem to work,
    though.)

Lots more work to go on this, though.

9 years agopkstream/pkstream.1.in: Fix synopsis misformatting.
Mark Wooding [Mon, 19 Apr 2010 21:01:00 +0000 (22:01 +0100)]
pkstream/pkstream.1.in: Fix synopsis misformatting.

A trailing tab got clobbered in e04c2d50fd96f3f31bc96851c55c6efecc10469c
and this messed up the formatting.  Restore the tab and put `\c' after
it to make this not go wrong again.

9 years agobuild: Install some more files to their eventual locations.
Mark Wooding [Mon, 19 Apr 2010 21:01:00 +0000 (22:01 +0100)]
build: Install some more files to their eventual locations.

Install the base peers.in file as ${configdir}/peers.d/10base as a
convenience to users.  It's correct to clobber the user's old file,
since there's a fierce warning at the top of the file.  (Make the
warning more fierce.)

Install the startup script configuration file (but not the script
itself), only if there isn't one already.  This prevents us from
overwriting a user's customized configuration.

To prevent distcheck from failing, change the default of `initconfig' to
be ${sysconfdir}/tripe.conf; this is probably the right thing anyway.

9 years agoinit: Add some rudimentary support for SLIP interfaces.
Mark Wooding [Mon, 19 Apr 2010 21:01:00 +0000 (22:01 +0100)]
init: Add some rudimentary support for SLIP interfaces.

This isn't strictly necessary, but it's probaby good form for those
systems which aren't as fortunate.

9 years agoinit/tripe-init.in: Make init script more readable.
Mark Wooding [Mon, 19 Apr 2010 21:00:59 +0000 (22:00 +0100)]
init/tripe-init.in: Make init script more readable.

Restyle to follow newer commenting conventions.  Reorganize the
pre-flight check into a single `case' rather than nested ones.  Also add
an LSB header to shut up annoying warnings.

9 years agodebian: Run the server as `tripe' rather than `root'.
Mark Wooding [Mon, 19 Apr 2010 21:00:59 +0000 (22:00 +0100)]
debian: Run the server as `tripe' rather than `root'.

We have the fancy privilege separation machinery now, so we might as
well actually use it.  This involves (a) slightly hacking the
/etc/default/tripe file to set the user and group, and (b) actually
creating the necessary user and group accounts in the postinst script.

9 years agoREADME: Rewrite.
Mark Wooding [Mon, 19 Apr 2010 21:00:59 +0000 (22:00 +0100)]
README: Rewrite.

The old version was almost completely useless.  The new one is much more
informative, though maybe a little on the chatty side.

9 years agoinit/tripe.conf: Reformat, and make comments more useful (and truthful).
Mark Wooding [Mon, 19 Apr 2010 21:00:59 +0000 (22:00 +0100)]
init/tripe.conf: Reformat, and make comments more useful (and truthful).

9 years agoMake `tripe' be the default key type.
Mark Wooding [Mon, 19 Apr 2010 21:00:59 +0000 (22:00 +0100)]
Make `tripe' be the default key type.

Rather than using the key type to tell us which key-exchange group type
to use, read it out of an attribute on the key.  This makes the whole
finding keys thing much simpler to explain (although the code becomes
slightly more complicated).  Fall back to the old behaviour of parsing
the group type out of the key type if there's no attribute.

Reorganize the tripe(8) manual page somewhat.  Remove the tutorial-ish
part, which is now out of place and not very useful; there's a proper
Texinfo manual coming soon.

9 years agoBuild: Kill $(mkdir_p); use $(MKDIR_P).
Mark Wooding [Mon, 19 Apr 2010 21:00:59 +0000 (22:00 +0100)]
Build: Kill $(mkdir_p); use $(MKDIR_P).

Remove definition from vars.am; use MKDIR_P in Makefiles.

9 years agoserver/tun-slip.c: Pass correct stdout to child process.
Mark Wooding [Mon, 19 Apr 2010 21:41:50 +0000 (22:41 +0100)]
server/tun-slip.c: Pass correct stdout to child process.

Botched when introducing mdup in b9537f3be...

9 years agotripemon: Major reworking to use new module and coroutines.
Mark Wooding [Fri, 5 Jun 2009 15:13:16 +0000 (16:13 +0100)]
tripemon: Major reworking to use new module and coroutines.

The old version was a bit of a crock, really.  This one's slightly
shorter, as well as probably being easier to maintain (which is
surprising, given the brain-wrenching nature of the flow control).

9 years agosvc: Peer management services.
Mark Wooding [Mon, 19 Apr 2010 20:11:05 +0000 (21:11 +0100)]
svc: Peer management services.

  * connect arranges to connect to named peers, and respond to incoming
    connections.

  * watch detects newly added peers, and configures interfaces and makes
    outgoing connections accordingly.

Also update the init script so as to start services found in
/etc/tripe/services.

9 years agoinit: Introduce the peer database.
Mark Wooding [Mon, 19 Apr 2010 20:11:04 +0000 (21:11 +0100)]
init: Introduce the peer database.

Our services will require information about the various possible peers.
This is held in a CDB file with an open-ended format, and constructed
from a text database by a Python utility tripe-newpeers.

This stuff doesn't yet have a Debian package to live in.  That will
appear in a few patches' time.

9 years agopy: New Python module for writing services and suchlike
Mark Wooding [Mon, 19 Apr 2010 20:11:04 +0000 (21:11 +0100)]
py: New Python module for writing services and suchlike

Also rmcr: coroutines in terms of threads.

Other changes:

  * The new module uses Python 2.4 features, so make sure we have that
    version.

9 years agodoc/tripe-service.5: New manpage describing service providers.
Mark Wooding [Mon, 19 Apr 2010 20:11:04 +0000 (21:11 +0100)]
doc/tripe-service.5: New manpage describing service providers.

General command-line and documentation conventions, that sort of thing.

9 years agoserver/tripe-admin.5.in: Change `recognise' to `recognize' etc.
Mark Wooding [Sun, 20 Dec 2009 23:15:13 +0000 (23:15 +0000)]
server/tripe-admin.5.in: Change `recognise' to `recognize' etc.

Oxford spellings, you know.

9 years agoserver/tripe-admin.5.in: Document `unknown-jobid' error code.
Mark Wooding [Sun, 20 Dec 2009 23:13:44 +0000 (23:13 +0000)]
server/tripe-admin.5.in: Document `unknown-jobid' error code.

Not quite sure how come this was omitted in the first place.

9 years agoserver/tripe-admin.5.in: Some typo fixes.
Mark Wooding [Sun, 20 Dec 2009 23:11:35 +0000 (23:11 +0000)]
server/tripe-admin.5.in: Some typo fixes.

10 years agoUse new mdup(3mLib) function.
Mark Wooding [Sun, 4 Jan 2009 17:48:43 +0000 (17:48 +0000)]
Use new mdup(3mLib) function.

It makes descriptor juggling much more reliable.  Increase version
requirement on mLib to 2.1.0.

10 years agopathmtu: Reset the timeout on each packet.
Mark Wooding [Sat, 3 Jan 2009 20:35:29 +0000 (20:35 +0000)]
pathmtu: Reset the timeout on each packet.

Linux actually has the correct behaviour and updates the timeout
argument to reflect the time remaining.  Unfortunately we don't actually
want to do that.  So reset it each time.

10 years agoBuild: Fix construction of manual pages.
Mark Wooding [Tue, 30 Dec 2008 15:01:50 +0000 (15:01 +0000)]
Build: Fix construction of manual pages.

Firstly, there was a bug in vars.am: the suffix rule used to construct
manpages was broken because suffix rules aren't allowed to have
dependencies of their own.  So purge defs.man.in (we now just have
defs.man) and confsubst the entire manpage each time.

Secondly, in preparation for new manpages for services, consolidate the
summary-building machinery into vars.am.  The server makefile no longer
needs a special case for tripe-admin.8.

To keep things tidy, defs.man and make-summary have been stashed in
common.  This seems as good a place as any.

10 years agokeys: Fix defaults and documentation.
Mark Wooding [Thu, 1 Jan 2009 23:49:29 +0000 (23:49 +0000)]
keys: Fix defaults and documentation.

A small number of related changes.

  * Make the default encryption algorithm be Rijndael (AES) rather than
    Blowfish.  I think this is now the right recommendation to make,
    even if it's not my personal taste.  (I'm actually using Twofish
    nowadays anyway.)

  * Make the default field size for Schnorr groups be 3072 bits rather
    than 2048, which reflects the advice given by NIST and IEEE 1363.

  * Reformat the tripe-keys.master file in line with current thinking.

  * Fix a minor typo in tripe-keys.conf.5.in.

10 years agomaint-utils/keysubst: A monstrously unpleasant sed hack.
Mark Wooding [Thu, 1 Jan 2009 17:21:59 +0000 (17:21 +0000)]
maint-utils/keysubst: A monstrously unpleasant sed hack.

This parses tripe-admin(5)-format key/value pairs and converts them into
sh(1)-style variable assignments, which can be interpreted using the
eval builtin.

10 years agoserver/tripe-admin.5: Describe the quoting convention.
Mark Wooding [Wed, 31 Dec 2008 13:19:09 +0000 (13:19 +0000)]
server/tripe-admin.5: Describe the quoting convention.

Even though the admin interface has handled quoted arguments on input,
and became careful about quoting results in f43df81, the convention
has never been documented.  Fix this appalling lapse!

10 years agoManpages: Fix substitutions.
Mark Wooding [Tue, 30 Dec 2008 01:19:07 +0000 (01:19 +0000)]
Manpages: Fix substitutions.

The manfix utility in fc916a0942e6ef8f63aefb96119d0e4fd7c7efbb botched
all the \*(/x splats, with the result that they were left them in the
final output.

10 years agopriv: Fix build.
Mark Wooding [Mon, 29 Dec 2008 21:54:42 +0000 (21:54 +0000)]
priv: Fix build.

This fixes a logical conflict between the privilege separation branch
and commit 7bd7331ea55fc27573035d343fe949cc15fa9047.

10 years agoMerge branch 'privsep'
Mark Wooding [Tue, 30 Dec 2008 14:51:07 +0000 (14:51 +0000)]
Merge branch 'privsep'

* privsep:
  server: Introduce privilege separation.
  server: Zap spurious space output by a_vformat.
  server: Make a_vformat public.
  server: Set admin socket permissions to match user.
  client: Capture server stderr and send it to the logfile.
  client: Better logging infrastructure.
  client: Clean up variable declarations.
  client: New options for setting user and group identities.
  client: Function for inserting arguments.
  peer, tunnels: New file-descriptor opening interface.

Conflicts:

server/Makefile.am

10 years agoMerge branch 'public'
Mark Wooding [Tue, 30 Dec 2008 14:50:50 +0000 (14:50 +0000)]
Merge branch 'public'

* public:
  pathmtu: New program for determining the MTU to a host.
  server/admin: New ALGS command.
  Build: Explicitly link against mLib or catacomb.
  tripe-keys: Add a subcommand to print the correct tunnel MTU.
  client/tripectl.c: Fix format string bug in tripectl.
  init/Makefile.am: Switch install-hook to install-data-hook.
  configure.ac: Use AM_PATH_GLIB_2_0.

10 years agopathmtu: New program for determining the MTU to a host.
Mark Wooding [Mon, 29 Dec 2008 19:37:17 +0000 (19:37 +0000)]
pathmtu: New program for determining the MTU to a host.

Eventually, this will be used automatically when configuring network
interfaces.

10 years agoserver: Introduce privilege separation.
Mark Wooding [Mon, 29 Dec 2008 20:07:04 +0000 (20:07 +0000)]
server: Introduce privilege separation.

During initialization, we fork off a child which retains its root
privileges, and maintain communication with it via a Unix-domain socket
pair.  To open a new tunnel, we send it a request and it responds by
passing back the appropriate file descriptor.

The helper process running as root is implemented in a separate program,
tripe-privhelper.  This is done (a) to reduce memory use, (b) to trigger
close-on-exec behaviour and (c) to provide a clear boundary in the
source code for the parts which still run with superuser privileges.

This entails moving our tunnel-open functions into a separate program,
and doing the necessary build-system hacking.  The changes to existing
code aren't as invasive as they at first appear.

10 years agoserver: Zap spurious space output by a_vformat.
Mark Wooding [Sat, 20 Dec 2008 17:06:11 +0000 (17:06 +0000)]
server: Zap spurious space output by a_vformat.

10 years agoserver: Make a_vformat public.
Mark Wooding [Sat, 20 Dec 2008 17:06:11 +0000 (17:06 +0000)]
server: Make a_vformat public.

We'll need it soon enough.

10 years agoserver: Set admin socket permissions to match user.
Mark Wooding [Sat, 20 Dec 2008 17:06:11 +0000 (17:06 +0000)]
server: Set admin socket permissions to match user.

We create the socket before dropping privileges so that we can create it
somewhere we might not be able to write to later.  This change will make
it possible for other processes running with reduced privilege to
connect and issue administration requests.

10 years agoclient: Capture server stderr and send it to the logfile.
Mark Wooding [Sat, 20 Dec 2008 17:06:11 +0000 (17:06 +0000)]
client: Capture server stderr and send it to the logfile.

10 years agoserver/admin: New ALGS command.
Mark Wooding [Mon, 29 Dec 2008 17:52:32 +0000 (17:52 +0000)]
server/admin: New ALGS command.

Returns information about crypto algorithms in use.  Can be used to
compute MTUs, for example.

10 years agoBuild: Explicitly link against mLib or catacomb.
Mark Wooding [Mon, 29 Dec 2008 10:21:35 +0000 (10:21 +0000)]
Build: Explicitly link against mLib or catacomb.

This avoids an ugly double-link in the server.  Doesn't make anything
actually work better, though.

10 years agotripe-keys: Add a subcommand to print the correct tunnel MTU.
Mark Wooding [Wed, 24 Dec 2008 23:29:15 +0000 (23:29 +0000)]
tripe-keys: Add a subcommand to print the correct tunnel MTU.

This probably isn't the right place for it, but it was easy.  The right
thing to do is to add path-MTU discovery to the server, but that will
get really messy.

10 years agopkstream/pkstream.1: Rename `fw' to `fwd'.
Mark Wooding [Tue, 23 Dec 2008 01:19:08 +0000 (01:19 +0000)]
pkstream/pkstream.1: Rename `fw' to `fwd'.

This happened a while ago, but I was too stupid to notice.

10 years agoclient/tripectl.c: Fix format string bug in tripectl.
Mark Wooding [Tue, 23 Dec 2008 00:55:29 +0000 (00:55 +0000)]
client/tripectl.c: Fix format string bug in tripectl.

OK, I'm seriously embarrassed about this one.

10 years agoinit/Makefile.am: Switch install-hook to install-data-hook.
Mark Wooding [Tue, 23 Dec 2008 00:54:45 +0000 (00:54 +0000)]
init/Makefile.am: Switch install-hook to install-data-hook.

Automake 10 is even pettier!

10 years agoconfigure.ac: Use AM_PATH_GLIB_2_0.
Mark Wooding [Tue, 23 Dec 2008 00:54:12 +0000 (00:54 +0000)]
configure.ac: Use AM_PATH_GLIB_2_0.

Duh.  I'm impressed it worked, really.

10 years agobuild: Use new separate auto-version tool.
Mark Wooding [Sun, 21 Dec 2008 20:23:55 +0000 (20:23 +0000)]
build: Use new separate auto-version tool.

10 years agoclient: Better logging infrastructure.
Mark Wooding [Sat, 20 Dec 2008 17:06:11 +0000 (17:06 +0000)]
client: Better logging infrastructure.

Logging is currently done in a rather ad-hoc fashion.  This wants
tidying up.

10 years agoclient: Clean up variable declarations.
Mark Wooding [Sat, 20 Dec 2008 17:06:11 +0000 (17:06 +0000)]
client: Clean up variable declarations.

The current code for main is somewhat messy, with inner blocks for
declaring variables in.  We actually need some of these variables to
have wider scopes now, so it makes sense to just lift them out to
toplevel.

In particular, we promote the main sel_state to a static, and the
sel_files to top-level in main.

10 years agoclient: New options for setting user and group identities.
Mark Wooding [Sat, 20 Dec 2008 17:06:10 +0000 (17:06 +0000)]
client: New options for setting user and group identities.

10 years agoclient: Function for inserting arguments.
Mark Wooding [Sat, 20 Dec 2008 17:06:10 +0000 (17:06 +0000)]
client: Function for inserting arguments.

We will shortly need fancier formatting than previously.

10 years agopeer, tunnels: New file-descriptor opening interface.
Mark Wooding [Sat, 20 Dec 2008 17:06:10 +0000 (17:06 +0000)]
peer, tunnels: New file-descriptor opening interface.

Separate initializing tunnel devices into distinct stages of obtaining
an appropriate file descriptor, and configuring it and plumbing it into
the select loop.  Alas, this reduces the quality of error reporting when
tunnel acquisition fails.

This is a preliminary stage to implementing privilege separation in the
TrIPE server.

10 years agoserver/keyset.c, server/keymgmt.c: Variable data limits.
Mark Wooding [Sat, 20 Dec 2008 11:39:33 +0000 (11:39 +0000)]
server/keyset.c, server/keymgmt.c: Variable data limits.

The old static data volume limit isn't acceptable when trying to keep up
with LANs (e.g., wireless LANs) or other fast networks.  This change
configures a variable volume limit based on the width of the underlying
block cipher.  (That means it doesn't do anything sensible with stream
ciphers, but as currently implemented in Catacomb they're a bad idea
anyway.)

10 years agoserver/peer.c, server/keyset.c: Fix key renegotiation behaviour.
Mark Wooding [Sat, 20 Dec 2008 11:39:33 +0000 (11:39 +0000)]
server/peer.c, server/keyset.c: Fix key renegotiation behaviour.

The existing behaviour is just wrong.  Whenever an encryption fails, the
key exchange gets kicked politely.  If the challenge is still valid,
this does nothing very useful, so fix it so that it forces a new
challenge.  If there are no keys left at all, this results in a
pointless flood of key-exchange packets.

This change introduces error codes for the ks_* and ksl_* functions, so
that callers can work out what's wrong.  (This isn't strictly necessary:
there was enough information before, but it wasn't a good idea.)  I took
the opportunity to improve the header comments on the ks_* and ksl_*
functions.

It also changes peer.c to distinguish between the various cases.  This
change provides new peer-level convenience functions for doing the
symmetric crypto, which reduces the amount of duplicated code lying
around.

10 years agoserver/keyexch.c: Lower the validity time for a challenge.
Mark Wooding [Sat, 20 Dec 2008 11:39:33 +0000 (11:39 +0000)]
server/keyexch.c: Lower the validity time for a challenge.

If the server is busy dealing with LAN-speed traffic, it can easily
exhaust the 32 MB data limit within the 2 minutes allowed.  The result
of this is that another switch or switch-ok gets sent and ignored, and
no new keys are negotiated.  The only thing to do is lower the validity
time.  One key-exchange every 20 seconds isn't going to break the bank.

10 years agouslip: New options for flooding tripe.
Mark Wooding [Sat, 20 Dec 2008 11:39:32 +0000 (11:39 +0000)]
uslip: New options for flooding tripe.

I have a bug to hunt which manifests under heavy load.

10 years agouslip: Associate a done-function with gobblers.
Mark Wooding [Sat, 20 Dec 2008 11:39:32 +0000 (11:39 +0000)]
uslip: Associate a done-function with gobblers.

These work just like the dribbler done-functions.  We're going to need
this soon.

10 years agouslip: Don't let gobblers leak file descriptors.
Mark Wooding [Sat, 20 Dec 2008 11:39:32 +0000 (11:39 +0000)]
uslip: Don't let gobblers leak file descriptors.

The otherwise aptly-named gobbler_close function neglected to actually
close its file descriptor.

10 years agouslip: Fix SLIP escape handling.
Mark Wooding [Sat, 20 Dec 2008 11:39:32 +0000 (11:39 +0000)]
uslip: Fix SLIP escape handling.

In particular, do_slip_in failed to leave ESC mode having handled the
escaped character.

10 years agoserver/admin: Fix client destruction some more.
Mark Wooding [Sun, 14 Dec 2008 22:03:21 +0000 (22:03 +0000)]
server/admin: Fix client destruction some more.

It's possible that finally destroying a client can kill others.  For
example, if the second client (a) has sent EOF, and (b) has a background
command outstanding with the first; then when the first sends EOF, the
second gets taken down too.

Unfortunately, what actually happens in this case is that the newly
defunct clients get put on the dead list -- and then ignored because the
dead list is silently killed at the end of a_destroypending.  Fix by
clearing the list at the top of a_destroypending, and doing the whole
job repeatedly until there are no more cascades.

The change is mostly indenting a loop: it looks less scary with -b.

10 years agoserver/keyexch: Store check-value key hash in the right place.
Mark Wooding [Sun, 14 Dec 2008 04:20:30 +0000 (04:20 +0000)]
server/keyexch: Store check-value key hash in the right place.

Another botch from de7bd20be1c41f8f70e98ab498ffb4a82800a9d8.  The
respond function stashes a hash of the peer's check value so we can
recognize it again without having to verify it fully.  Unfortunately, it
stashes it in the wrong slot, so (a) it gets overwritten immediately
afterwards, and (b) the code which actually tries to do the checking
finds some rubbish instead.

The most prominent symptom of this bug under normal circumstances is a
large number of bad-expected-reply-log warnings in the log file.  What
happens is that, after a successful key exchange, the two peers end up
quite precisely synchronized -- so much so, indeed, that they're very
likely to run the entire key exchange protocol truly simultaneously.  As
a result, we have to process both a full challenge and a reply, both of
which contain a check field.  The second time, this fails because of the
bug.  This continues until the two fall out of lock-step with each
other.

10 years agoserver/keyexch: Fix message name table in trace output.
Mark Wooding [Sun, 14 Dec 2008 04:14:54 +0000 (04:14 +0000)]
server/keyexch: Fix message name table in trace output.

In de7bd20be1c41f8f70e98ab498ffb4a82800a9d8, I removed the pre-challenge
message in order to streamline the protocol.  Unfortunately, I forgot to
update the pkname table which maps message numbers to human-readable
name strings, which makes decoding trace messages rather difficult.

10 years agomaint-utils: Handy script to make the `bleeding' branch.
Mark Wooding [Sat, 13 Dec 2008 17:54:51 +0000 (17:54 +0000)]
maint-utils: Handy script to make the `bleeding' branch.

10 years agoserver/admin: Brown-paper-bag fix.
Mark Wooding [Mon, 8 Dec 2008 20:14:24 +0000 (20:14 +0000)]
server/admin: Brown-paper-bag fix.

Commit 165efde7 changed a_resolve to not require a port number.
Unfortunately, I botched it and wrote a test for av[i + 1] as
av[i + i].  Result with i = 0: very different.

While investigating this bug, I became nervous about the number of
is-av[i]-null tests going on when str_qsplit doesn't actually guarantee
to leave a null terminator behind if it uses all the array slots.  So
I've allocated an extra slot and zeroed it explicitly.

10 years agoinit/tripe-init: Pass correct options for setting the user and group.
Mark Wooding [Mon, 8 Dec 2008 13:56:19 +0000 (13:56 +0000)]
init/tripe-init: Pass correct options for setting the user and group.

They're capitals, -U and -G, not -u and -g.

10 years agovars.am: Actually apply PACKAGE and VERSION substitutions.
Mark Wooding [Mon, 8 Dec 2008 13:35:55 +0000 (13:35 +0000)]
vars.am: Actually apply PACKAGE and VERSION substitutions.

How embarrassing to have forgotten this!

10 years agoserver: Test script.
Mark Wooding [Mon, 8 Dec 2008 12:11:28 +0000 (12:11 +0000)]
server: Test script.

10 years agoserver: Option `-F' to run the server in the `foreground'.
Mark Wooding [Mon, 8 Dec 2008 12:11:28 +0000 (12:11 +0000)]
server: Option `-F' to run the server in the `foreground'.

This means that the server will quit when it sees EOF on standard
input.  Useful for testing, since it means that your processes aren't
going to continue running after you let them off the leash.

Also make tripectl pass `-F' to a tripe that it's starting up so that it
won't continue without (say) logging.

10 years agoserver: Actually recognize -n on the command line.
Mark Wooding [Mon, 8 Dec 2008 12:11:28 +0000 (12:11 +0000)]
server: Actually recognize -n on the command line.

For some reason this got missed out of the short-options list.  I've now
eyeballed the long- and short-options lists and checked that there
aren't any other missing entries.

10 years agoserver: Introduce another temporary buffer for debugging output.
Mark Wooding [Mon, 8 Dec 2008 12:11:28 +0000 (12:11 +0000)]
server: Introduce another temporary buffer for debugging output.

Debugging output trashed important things like hashes in buf_t.
Introduce a new buf_u and use that in functions like mpstr and gestr.

10 years agouslip: New program providing a fake SLIP interface.
Mark Wooding [Mon, 8 Dec 2008 12:11:20 +0000 (12:11 +0000)]
uslip: New program providing a fake SLIP interface.

This is useful for doing testing on a single machine.  We'll work out
how to test the system-specific tunnel drivers later, but that really
will need multiple machines.

10 years agoserver, common: New header slip.h contains definitions for SLIP.
Mark Wooding [Mon, 8 Dec 2008 12:10:40 +0000 (12:10 +0000)]
server, common: New header slip.h contains definitions for SLIP.

This will be needed by another program as well.

10 years agokeys: Add test script.
Mark Wooding [Mon, 8 Dec 2008 12:10:39 +0000 (12:10 +0000)]
keys: Add test script.

I've recently found a number of bugs in this area, so it's probably
worth writing a test script to make sure they stay dead.

This wouldn't be complete without some edits to the tripe-keys script,
so (a) make it executable in the build tree, and (b) flush output before
running subprocesses so that the output appears in the correct order
even when it's redirected to a file.