secnet
4 years agoMakefile.in: Drop dist target master
Ian Jackson [Sat, 21 Sep 2019 11:42:29 +0000 (12:42 +0100)]
Makefile.in: Drop dist target

It is much easier to do this with dgit sbuild, like the release
checklist now suggests.  People who don't want to use dgit or sbuild
could use git-archive.  dist targets are IMO obsolete.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoMakefile.in: Completely overhaul release checklist
Ian Jackson [Sat, 21 Sep 2019 11:43:35 +0000 (12:43 +0100)]
Makefile.in: Completely overhaul release checklist

This is roughly what I did for 0.4.4 and exactly what I did for 0.4.5.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoMakefile.in: VERSION: Use =, not :=
Ian Jackson [Sat, 21 Sep 2019 11:42:59 +0000 (12:42 +0100)]
Makefile.in: VERSION: Use =, not :=

This has no effect on make since this variable doesn't contain other
variable references.  But it makes the line directly c&p-able into a
shell.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agochangelog: start 0.4.6
Ian Jackson [Sat, 21 Sep 2019 11:36:20 +0000 (12:36 +0100)]
changelog: start 0.4.6

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoFinalise 0.4.5 v0.4.5
Ian Jackson [Sat, 21 Sep 2019 11:04:53 +0000 (12:04 +0100)]
Finalise 0.4.5

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agochangelog: Changes since 0.4.4
Ian Jackson [Sat, 21 Sep 2019 11:02:47 +0000 (12:02 +0100)]
changelog: Changes since 0.4.4

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoINSTALL: Mention that rsa key generation might need ssh-keygen1
Ian Jackson [Tue, 26 Apr 2016 13:23:07 +0000 (14:23 +0100)]
INSTALL: Mention that rsa key generation might need ssh-keygen1

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoudp.c: Add a comment about the salen cast
Ian Jackson [Sat, 21 Sep 2019 10:05:21 +0000 (11:05 +0100)]
udp.c: Add a comment about the salen cast

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoudp.c: Add explicit cast to muffle bogus Clang warning.
Mark Wooding [Thu, 19 Sep 2019 20:01:24 +0000 (20:01 +0000)]
udp.c: Add explicit cast to muffle bogus Clang warning.

Clang is complaining (`-Wsign-compare') about the comparison between
`salen' (`socklen_t', i.e., an `int' with a false moustache) and
`size_t' (`unsigned int' in this case).  I can see that some warnings of
this kind are useful, but not this one.  The usual arithmetic
conversions apply, so `salen' is converted to `size_t'.  If it was
negative before, it's now very positive, which will trip the the
comparison and call `FAIL' -- which seems like a plausible outcome.

Muffle the warning by adding an explicit cast.  This is ugly and
pointless, though: other suggestions are welcome.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
Acked-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agolog.c: Spray extra `FORMAT(...)' attributes to muffle Clang warnings.
Mark Wooding [Thu, 19 Sep 2019 20:01:22 +0000 (20:01 +0000)]
log.c: Spray extra `FORMAT(...)' attributes to muffle Clang warnings.

Clang gets really upset about non-literal format strings, unless it can
check from the function attributes that you're playing by the rules.

I've taken the liberty of simplifying the annotations on static
functions: rather than duplicating the entire argument list, it suffices
to attach the attribute to the start of the function definition.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
Acked-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agosite.c (we_have_priority): Fix unintended `&&'.
Mark Wooding [Thu, 19 Sep 2019 20:01:23 +0000 (20:01 +0000)]
site.c (we_have_priority): Fix unintended `&&'.

`CAPAB_PRIORITY_MOBILE' is 0x80000000, which is nonzero, so that doesn't
change the outcome.  So the code is only checking whether the local and
remote capabilities overlap at all, which seems unhelpful.

Instead, check that both advertise `CAPAB_PRIORITY_MOBILE' here.

Spotted by Clang.

The effect is that a new secnet would always think the peer had
advertised CAPAB_PRIORITY_MOBILE.  This might (with roughly 50%
probability) mess up resolution of crossed key setup attempts
involving a mobile end and mixed secnet versions.

The consequences would be mitigated by 19074a85692b
  site: Randomise key setup retry time
so the key setup would very likely eventually succeed.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
Acked-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoFix bizarre `if (!consttime_memeq(X, Y, N)!=0)' idioms.
Mark Wooding [Thu, 19 Sep 2019 20:01:22 +0000 (20:01 +0000)]
Fix bizarre `if (!consttime_memeq(X, Y, N)!=0)' idioms.

Clang thinks the `!' is in the wrong place.  I think the `!=0' isn't
doing any work, so I've deleted it.

This stems from 5ad34db2ccbb "memcmp: Introduce and use
consttime_memeq",

  -    if (memcmp(m->nR,st->remoteN,NONCELEN)!=0) {
  +    if (!consttime_memeq(m->nR,st->remoteN,NONCELEN)!=0) {

at which time the !=0 was already redundant and became more confusing.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
Acked-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoMakefile.in: Support installation from a `VPATH' build.
Mark Wooding [Thu, 19 Sep 2019 20:01:24 +0000 (20:01 +0000)]
Makefile.in: Support installation from a `VPATH' build.

I was pleasantly surprised that Secnet cross-compiles without
significant trouble, but then tripped over this at the very end.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
Acked-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agochangelog: start 0.4.5~
Ian Jackson [Sun, 8 Sep 2019 22:06:06 +0000 (23:06 +0100)]
changelog: start 0.4.5~

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agofinalise 0.4.4 v0.4.4
Ian Jackson [Sun, 8 Sep 2019 21:53:19 +0000 (22:53 +0100)]
finalise 0.4.4

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agochangelog: Document protocol incompatibility
Ian Jackson [Sun, 8 Sep 2019 21:51:14 +0000 (22:51 +0100)]
changelog: Document protocol incompatibility

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agochangelog: Document changes
Ian Jackson [Sun, 8 Sep 2019 21:43:36 +0000 (22:43 +0100)]
changelog: Document changes

... since "Administrivia: Fix erroneous GPL3+ licence notices".

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agosite: in "entering state RUN", say whether key is set up
Ian Jackson [Sat, 18 May 2019 01:25:34 +0000 (02:25 +0100)]
site: in "entering state RUN", say whether key is set up

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
---
v2: New patch

4 years agosite: Randomise key setup retry time
Ian Jackson [Sat, 18 May 2019 00:49:14 +0000 (01:49 +0100)]
site: Randomise key setup retry time

This reduces the chance that retries (at both ends of a link, or
within a single secnet) end up synchronised.  Such synchronisation is
not supposed to matter but in practice there have been some bugs where
it does, and it is undesirable anyway.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
---
v2: New patch

4 years agorandom: Admit that we will never add error checking everywhere
Ian Jackson [Sat, 18 May 2019 00:42:55 +0000 (01:42 +0100)]
random: Admit that we will never add error checking everywhere

Literally no-one checks this return value.  Abolish it.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
---
v2: New patch

4 years agosite: Replace wait_timeout variable with function
Ian Jackson [Sat, 18 May 2019 00:32:45 +0000 (01:32 +0100)]
site: Replace wait_timeout variable with function

We are going to wait for stochastic amounts.  For now, rname the
variable and change all the users to call this function instead.

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
---
v2: New patch

4 years agopolypath asymmetric routing: Handle MSG2-4 late dupes
Ian Jackson [Wed, 15 May 2019 20:59:18 +0000 (21:59 +0100)]
polypath asymmetric routing: Handle MSG2-4 late dupes

If we get a MSG2-4 and it seems too late for the protocol stage, and
it had the same nonces, it was probably an old packet via a different
route.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agopolypath asymmetric routing: Handle MSG1 late dupes
Ian Jackson [Wed, 15 May 2019 20:55:55 +0000 (21:55 +0100)]
polypath asymmetric routing: Handle MSG1 late dupes

If we get a MSG1 and it seems too late for the protocol stage, and it
had the same peer nonce, it was probably an old packet via a different
route.

In theory it might seem like we should do this in SENTMSG3 and 5 too
because we might have had concurrent setup, and higher priority, so the
peer also sent us MSG2 or 4.  But mobile peers have priority.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agopolypath asymmetric routing: Handle data packet dupes
Ian Jackson [Wed, 15 May 2019 20:40:40 +0000 (21:40 +0100)]
polypath asymmetric routing: Handle data packet dupes

If polypath has asymmetric routing, where path A upload is faster than
path B, but path A download is completely broken, then we need to
retain both paths A and B in our list of transport peers.

Stepping back, we need to treat dupes of recent packets as evidence
that the peer is at that address, even though we do not pass the
packets to the netlink.

We don't want to do this for arbitrarily old data packets.  The
heuristic we use here is rather crude: packets which are more than
32 (by default) out of order are treated as too old.  This will be too
short if path A is a high-bandwidth link and path B is quite slow, and
it will be too long if the link is very idle.  Hopefully this will not
matter in practice.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoIntroduce transform_apply_seqdupe
Ian Jackson [Tue, 14 May 2019 23:42:16 +0000 (00:42 +0100)]
Introduce transform_apply_seqdupe

This distinguishes the two cases.  Right now they are still handled
the same everywhere.

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoIntroduce transform_apply_return_badseq
Ian Jackson [Tue, 14 May 2019 23:39:42 +0000 (00:39 +0100)]
Introduce transform_apply_return_badseq

This abstraction will allow us to distinguish two problems in a
moment.

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agosite: Change return value of decrypt_msg0
Ian Jackson [Tue, 14 May 2019 23:29:24 +0000 (00:29 +0100)]
site: Change return value of decrypt_msg0

The caller is going to want to do something more subtle.

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agosite: Make return value of transforms be an enum
Ian Jackson [Tue, 14 May 2019 23:23:47 +0000 (00:23 +0100)]
site: Make return value of transforms be an enum

We are going to need to distinguish more cases.  It was always bad to
have these hardcoded values.

transform_apply_seqrange is, right now, returned even when the problem
is that the packet is recent but is a duplicate.  This is wrong.

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agopolypath asymmetric routing: Priority to mobile sites
Ian Jackson [Wed, 15 May 2019 21:42:10 +0000 (22:42 +0100)]
polypath asymmetric routing: Priority to mobile sites

It is better for the mobile peer to win the key setup priority
battle.  That makes handling the transport address implications,
particularly those of the MSG1, easier.

Since both ends must agree on who has priority, this must be
negotiated.  We use a capability bit for this.  Since the decision is
taken when we have only seen each other's MSG1, it must be an early
capability.  For compatibility with ancient (and security-buggy)
secnets, we can avoid advertising it if neither end is mobile.

In practice, in my tests, this change avoids a spurious key setup
failure when my laptop's secnet is restarted: the new secnet gets a
new NATted address, but the server has priority and insists on talking
to the old address.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
---
v2: Document in NOTES following rebase over
    "NOTES: Describe the current allocation of capability bits."

4 years agosite: Break out we_have_priority
Ian Jackson [Wed, 15 May 2019 21:26:54 +0000 (22:26 +0100)]
site: Break out we_have_priority

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agosite: Rename setup_priority to our_name_later
Ian Jackson [Wed, 15 May 2019 21:23:49 +0000 (22:23 +0100)]
site: Rename setup_priority to our_name_later

This is also used for setting the transform direction - ie,
distinguishing us and them.  We are going to make the priority system
more subtle, and don't want to mess with that bit while changing the
priority rules.

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
---
v2: Fix conflict due to rebase on top of bugfix
     "site.c: Cope with failure of transform `setkey' method."

4 years agosite: Log about crossed MSG1 with a higher priority
Ian Jackson [Fri, 17 May 2019 22:38:47 +0000 (23:38 +0100)]
site: Log about crossed MSG1 with a higher priority

This means that we normally get these messages.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
---
v2: New patch

4 years agosite: Log about crossed MSG1 ignored only once
Ian Jackson [Sat, 18 May 2019 00:28:02 +0000 (01:28 +0100)]
site: Log about crossed MSG1 ignored only once

If for some reason our peer isn't getting our MSG1s, they will
retransmit and we will ignore each retransmission.  Log this only
once.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
---
v2: New patch

4 years agosite: transport peers update: avoid nearly-trivial debug
Ian Jackson [Fri, 17 May 2019 22:10:03 +0000 (23:10 +0100)]
site: transport peers update: avoid nearly-trivial debug

When the order of peers changes, but not the total set, we probably
don't want to log it.  Actually comparing the before and after lists
setwise is rather too hard.  But we can do it fairly easily when
there's only one peer being recorded.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
---
v2: New patch

4 years agoconfigure: rerun autogen.sh with autoconf 2.69-10
Ian Jackson [Tue, 14 May 2019 23:32:08 +0000 (00:32 +0100)]
configure: rerun autogen.sh with autoconf 2.69-10

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agoNOTES: tiny fix
Ian Jackson [Wed, 15 May 2019 21:02:10 +0000 (22:02 +0100)]
NOTES: tiny fix

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
4 years agosite.c: Cope with failure of transform `setkey' method.
Mark Wooding [Wed, 26 Apr 2017 10:53:05 +0000 (11:53 +0100)]
site.c: Cope with failure of transform `setkey' method.

The `setkey' method can fail, and indicates this by returning False.
Indeed, the `serpent-cbc256' transform will fail if the shared secret
it's given is too short.

Change `set_new_transform' and its callers to propagate failures
properly.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
4 years agoREADME: Note that I've hacked on the code.
Mark Wooding [Wed, 26 Apr 2017 10:53:05 +0000 (11:53 +0100)]
README: Note that I've hacked on the code.

I shall be hacking on it further.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
4 years agosite.c: Don't overwrite `st->sharedsecret' if it's null.
Mark Wooding [Sat, 29 Apr 2017 12:55:40 +0000 (13:55 +0100)]
site.c: Don't overwrite `st->sharedsecret' if it's null.

In this case, `st->sharesecretlen' is zero, but this is still undefined
behaviour.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
4 years agosite.c: Make sure there's enough buffer space for the signature terminator.
Mark Wooding [Fri, 28 Apr 2017 21:51:36 +0000 (22:51 +0100)]
site.c: Make sure there's enough buffer space for the signature terminator.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
4 years agorsa.c transform-cbcmac.c: Fix configuration error messages.
Mark Wooding [Fri, 28 Apr 2017 21:51:20 +0000 (22:51 +0100)]
rsa.c transform-cbcmac.c: Fix configuration error messages.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
4 years agoNOTES: Describe the current allocation of capability bits.
Mark Wooding [Sat, 29 Apr 2017 12:55:40 +0000 (13:55 +0100)]
NOTES: Describe the current allocation of capability bits.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
4 years agomake-secnet-sites: Don't allow setting new VPN-level props when restricted.
Mark Wooding [Sat, 29 Apr 2017 12:55:40 +0000 (13:55 +0100)]
make-secnet-sites: Don't allow setting new VPN-level props when restricted.

Currently, one can say something like

vpn thing
renegotiate-time 1

location evil
## ...

and if the VPN admin failed to set a value for `renegotiate-time' then
everyone will spin their CPUs doing key exchange.

Fix this lacuna.  Now user input can only modify location and site
properties.  If the administrator didn't set a location-level
`restrict-nets', then a user can do this, but obviously that can't make
anything worse.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
4 years agomake-secnet-sites: Remove duplicate `address' entry in sitelevel.
Mark Wooding [Sat, 29 Apr 2017 12:55:40 +0000 (13:55 +0100)]
make-secnet-sites: Remove duplicate `address' entry in sitelevel.

It was already there, with a functionally equivalent presentation
function.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
4 years agosecnet.8: Fix wrong information.
Mark Wooding [Sat, 29 Apr 2017 12:55:40 +0000 (13:55 +0100)]
secnet.8: Fix wrong information.

No, sites don't all have to use the same DH group.  It's true that sites
have to agree pairwise to use the same group when talking to each other.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
4 years agoREADME.make-secnet-sites: Provide some documentation for this tool.
Mark Wooding [Sat, 29 Apr 2017 12:55:40 +0000 (13:55 +0100)]
README.make-secnet-sites: Provide some documentation for this tool.

Constructed by reverse-engineering.  I may well have misunderstood
things.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
4 years ago.dir-locals.el: Settings for Python code.
Mark Wooding [Sat, 29 Apr 2017 12:55:40 +0000 (13:55 +0100)]
.dir-locals.el: Settings for Python code.

This project has very weird Python style.  Even by my standards.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
4 years agoutil.c: Don't byte-swap IPv4 addresses, even if we don't have IPv6.
Mark Wooding [Fri, 28 Apr 2017 21:51:36 +0000 (22:51 +0100)]
util.c: Don't byte-swap IPv4 addresses, even if we don't have IPv6.

The `string_item_to_ipaddr' function returns addresses as a single
integer in host byte order.  But this isn't what's wanted for setting up
`struct sockaddr_in', for example.  The function `adns_text2addr' does
the right thing.

I think this has always been wrong for setting up UDP sockets: before
the introduction of `string_item_to_iaddr', `udp_apply' would call
`string_item_to_ipaddr' directly, and neglected to swap the bytes.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
6 years agoAdministrivia: Fix erroneous GPL3+ licence notices "version d or later" (!)
Ian Jackson [Sat, 25 Nov 2017 16:14:00 +0000 (16:14 +0000)]
Administrivia: Fix erroneous GPL3+ licence notices "version d or later" (!)

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agochangelog: start 0.4.4~
Ian Jackson [Sat, 25 Nov 2017 16:12:32 +0000 (16:12 +0000)]
changelog: start 0.4.4~

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agofinalise 0.4.3 v0.4.3
Ian Jackson [Sat, 25 Nov 2017 14:31:56 +0000 (14:31 +0000)]
finalise 0.4.3

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agochangelog, Makefile.in: burn version numbers 0.4.1 and 0.4.2
Ian Jackson [Sat, 25 Nov 2017 14:30:19 +0000 (14:30 +0000)]
changelog, Makefile.in: burn version numbers 0.4.1 and 0.4.2

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agochangelog: Retrospectively some items missing from 0.4.1 v0.4.2
Ian Jackson [Sat, 25 Nov 2017 14:23:34 +0000 (14:23 +0000)]
changelog: Retrospectively some items missing from 0.4.1

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agobuild: Release checklist fixes.
Ian Jackson [Sat, 25 Nov 2017 14:17:07 +0000 (14:17 +0000)]
build: Release checklist fixes.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agobuild: #include <limits.h>
Ian Jackson [Sat, 25 Nov 2017 14:16:32 +0000 (14:16 +0000)]
build: #include <limits.h>

Fixes the build on jessie.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agobuild: Tolerate building from a git checkout, but with git not installed.
Ian Jackson [Sat, 25 Nov 2017 14:07:31 +0000 (14:07 +0000)]
build: Tolerate building from a git checkout, but with git not installed.

This can happen in chroots.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agochangelog: start 0.4.2~
Ian Jackson [Sat, 25 Nov 2017 14:07:16 +0000 (14:07 +0000)]
changelog: start 0.4.2~

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agofinalise 0.4.1 v0.4.1
Ian Jackson [Sat, 25 Nov 2017 13:41:47 +0000 (13:41 +0000)]
finalise 0.4.1

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agoMerge remote-tracking branch 'mdw/mdw/powm-sec'
Ian Jackson [Tue, 25 Apr 2017 12:05:53 +0000 (13:05 +0100)]
Merge remote-tracking branch 'mdw/mdw/powm-sec'

6 years agoWhen turning on debug, turn on verbose too.
Ian Jackson [Sun, 23 Apr 2017 19:59:18 +0000 (20:59 +0100)]
When turning on debug, turn on verbose too.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agoWhen printing messages about dropping IPv6, do not print anything about ihl.
Ian Jackson [Sun, 23 Apr 2017 19:58:22 +0000 (20:58 +0100)]
When printing messages about dropping IPv6, do not print anything about ihl.

Check the IP version field first !

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agofixup! polypath: Introduce comm-info/dedicated
Ian Jackson [Sun, 23 Apr 2017 17:14:11 +0000 (18:14 +0100)]
fixup! polypath: Introduce comm-info/dedicated

6 years agofixup! polypath: Plumb ifname_wanted
Ian Jackson [Sun, 23 Apr 2017 17:13:55 +0000 (18:13 +0100)]
fixup! polypath: Plumb ifname_wanted

6 years agofixup! polypath: change return type of ifname_wanted
Ian Jackson [Sun, 23 Apr 2017 17:12:20 +0000 (18:12 +0100)]
fixup! polypath: change return type of ifname_wanted

6 years agochangelog: mention hippotat
Ian Jackson [Sun, 23 Apr 2017 16:25:15 +0000 (17:25 +0100)]
changelog: mention hippotat

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agopolypath: Introduce comm-info/dedicated-interface-addr
Ian Jackson [Sun, 23 Apr 2017 11:36:09 +0000 (12:36 +0100)]
polypath: Introduce comm-info/dedicated-interface-addr

Also, rename `interfs' to `interfs_general' in struct polypath, to
ensure we found everywhere this list is processed.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agopolypath: Break out polypath_sendmsg_interf
Ian Jackson [Sun, 23 Apr 2017 13:25:58 +0000 (14:25 +0100)]
polypath: Break out polypath_sendmsg_interf

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agopolypath: Plumb ifname_wanted `want' through privsep etc.
Ian Jackson [Sun, 23 Apr 2017 13:07:57 +0000 (14:07 +0100)]
polypath: Plumb ifname_wanted `want' through privsep etc.

Prepare for there being multiple interface lists, and for a new kind
of `want'.  Specifically:

* Arrange to declare the type `struct interf_list'.
* Pass the want via the privsep protocol, as a character.
* Pass the want in lots of command line arguments.
* Move assert for rogue values to the use site, which is now in
  a different process so it can't be an assert.
* Introduce a variable `interfs' in polypath_record_ifaddr to allow
  it to manipulate a different list.
* Introduce a variable `max_interfs' in polypath_record_ifaddr to
  allow a different check.
* Print the relevant want in debugging output.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agopolypath: change return type of ifname_wanted, to char
Ian Jackson [Sun, 23 Apr 2017 12:46:05 +0000 (13:46 +0100)]
polypath: change return type of ifname_wanted, to char

We are going to want to provide other answers besides just
yes (True, '+') and no (False, '!').  Prepare for this.

No functional change just yet.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agocomm clientinfo: site: Pass comm-info to comm
Ian Jackson [Sun, 23 Apr 2017 12:11:43 +0000 (13:11 +0100)]
comm clientinfo: site: Pass comm-info to comm

Call each comm's clientinfo_fn on the comm-info dict, if any.
Pass the resulting struct clientinfo to sendmsg.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agocomm clientinfo: Provide clientinfo interface
Ian Jackson [Sun, 23 Apr 2017 11:36:44 +0000 (12:36 +0100)]
comm clientinfo: Provide clientinfo interface

This will allow a comm client to provide information from its
configuration dicts to the comm, so that a comm can be shared by
multiple clients but still have client-specific configuration.

Currently, this new interface has no callers, and no consumers.
No comm clients call comm_if->_clientinfo(); they all just pass NULL.
No comms take any notice of the clientinfo information; they always
return NULL for the clientinfo*.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agosite: Introduce comm_addr_sendmsg
Ian Jackson [Sun, 23 Apr 2017 12:17:37 +0000 (13:17 +0100)]
site: Introduce comm_addr_sendmsg

This helper function currently simply sends a packet to an comm_addr,
using the addr's comm.  It will do more in a bit.

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
6 years agoconffile: Provide dict_read_dict
Ian Jackson [Sun, 23 Apr 2017 12:09:36 +0000 (13:09 +0100)]
conffile: Provide dict_read_dict

No callers yet.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
7 years agodh.c, rsa.c: use `mpz_powm_sec' for modexps.
Mark Wooding [Wed, 28 Sep 2016 11:01:26 +0000 (12:01 +0100)]
dh.c, rsa.c: use `mpz_powm_sec' for modexps.

This makes an effort to run in constant time.  It's not perfect, but
it's a lot better than nothing.

  * It uses fixed windows from the exponent rather than the traditional
    sliding windows used by `mpz_powm'.  Sliding windows are more
    efficient on low Hamming-weight exponents, which is obviously bad if
    you were hoping for constant-time behaviour.

  * It uses a cache-oblivious algorithm to pick values out of its table
    of small multiples -- i.e., it scans the entire table and plucks out
    the entry it's looking for using bitmasking.  (This is tweakable
    with a macro `WANT_CACHE_SECURITY', but that's hardwired on.)

  * It uses a constant-time conditional subtract to finish up after a
    Montgomery reduction.

On the other hand there are some rough edges.

  * The initial reduction of the exponentiand is done with a non-
    constant-time algorithm.  It /could/ be done a fancy way, using
    Montgomery reduction, but they've not done this yet.

  * I've not looked at the Secnet code to see whether there are other
    timing leaks.

The call in `rsa_sig_check' is safe to leave as the faster `mpz_powm',
since it's verifying a signature which could, in principle, be done by
anyone using only public information.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
7 years agoMakefile.in: Fix `check-ipaddrset' rule to get reference from $(srcdir).
Mark Wooding [Wed, 28 Sep 2016 11:00:24 +0000 (12:00 +0100)]
Makefile.in: Fix `check-ipaddrset' rule to get reference from $(srcdir).

Makes out-of-tree builds work properly.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
8 years agoMakefile.in: turn of -Wsign-compare for bison output
Ian Jackson [Tue, 19 Apr 2016 21:46:12 +0000 (22:46 +0100)]
Makefile.in: turn of -Wsign-compare for bison output

conffile.yy.c: In function `yy_get_next_buffer':
conffile.yy.c:1228:44: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
  if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
                                            ^

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
8 years agoKeepalive option: Start trying to rekey as soon as peer shuts down
Ian Jackson [Sat, 12 Sep 2015 23:56:06 +0000 (00:56 +0100)]
Keepalive option: Start trying to rekey as soon as peer shuts down

This avoids us ending up in state RUN with no keys and no key
initiation attempt, which with keepalive is a forbidden.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
8 years agoImplement `keepalive' site option, to try to keep link always up.
Ian Jackson [Sat, 12 Sep 2015 15:17:51 +0000 (16:17 +0100)]
Implement `keepalive' site option, to try to keep link always up.

9 years agoFinalise 0.4.0 v0.4.0
Ian Jackson [Sat, 28 Feb 2015 15:26:03 +0000 (15:26 +0000)]
Finalise 0.4.0

9 years agoReport when transport peers updated as a result of transmit.
Ian Jackson [Sat, 28 Feb 2015 15:02:32 +0000 (15:02 +0000)]
Report when transport peers updated as a result of transmit.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agosite: Packet-level debugging notes errors from transmit.
Ian Jackson [Sat, 28 Feb 2015 15:01:21 +0000 (15:01 +0000)]
site: Packet-level debugging notes errors from transmit.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agoRelease process notes from 0.4.0~beta2
Ian Jackson [Sat, 31 Jan 2015 09:03:36 +0000 (09:03 +0000)]
Release process notes from 0.4.0~beta2

9 years agoFinalise changelog for 0.4.0~beta2 v0.4.0_beta2
Ian Jackson [Sun, 28 Dec 2014 17:14:27 +0000 (17:14 +0000)]
Finalise changelog for 0.4.0~beta2

9 years agoFinalise changelog for beta2~ test build
Ian Jackson [Sun, 28 Dec 2014 17:11:38 +0000 (17:11 +0000)]
Finalise changelog for beta2~ test build

9 years agoMakefile.in: Putative dual (backport and not) release build process doc.
Ian Jackson [Sun, 28 Dec 2014 17:10:59 +0000 (17:10 +0000)]
Makefile.in: Putative dual (backport and not) release build process doc.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agoSort out changelog
Ian Jackson [Sun, 28 Dec 2014 16:48:19 +0000 (16:48 +0000)]
Sort out changelog

9 years agoBuild system: Use -lnsl only if inet_ntoa is not found otherwise.
Ian Jackson [Sun, 28 Dec 2014 16:42:06 +0000 (16:42 +0000)]
Build system: Use -lnsl only if inet_ntoa is not found otherwise.

9 years agoBuild system: Break out SECNET_C_GETFUNC macro
Ian Jackson [Sun, 28 Dec 2014 16:37:44 +0000 (16:37 +0000)]
Build system: Break out SECNET_C_GETFUNC macro

No functional change.

Verified with `git diff -b' that there is no significant change to the
generated configure.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agoBuild system: Use -lresolv only if inet_aton is not found otherwise.
Ian Jackson [Sun, 28 Dec 2014 16:34:10 +0000 (16:34 +0000)]
Build system: Use -lresolv only if inet_aton is not found otherwise.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agoBuild system: debian/rules: Do not run build for *-indep (!)
Ian Jackson [Sun, 28 Dec 2014 16:22:05 +0000 (16:22 +0000)]
Build system: debian/rules: Do not run build for *-indep (!)

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agoBuild system: debian/rules: Provide build-arch and build-indep targets.
Ian Jackson [Sun, 28 Dec 2014 16:21:08 +0000 (16:21 +0000)]
Build system: debian/rules: Provide build-arch and build-indep targets.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agoBuild system: debian/rules: Support dpkg-buildflags.
Ian Jackson [Sun, 28 Dec 2014 16:16:54 +0000 (16:16 +0000)]
Build system: debian/rules: Support dpkg-buildflags.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agoCopyright updates - update to GPLv3, etc.
Ian Jackson [Sun, 28 Dec 2014 15:55:32 +0000 (15:55 +0000)]
Copyright updates - update to GPLv3, etc.

Update to GPLv3.  secnet as actually installed is GPLv3+ anyway
because it depends on python-ipaddr (Apache 2.0, which is
GPLv2-incompatible), adns (now GPLv3+), and libgmp (now LGPLv3+).

Also:
* Add missing copyright notices and credits.
* Get rid of old FSF street address; use URL instead.
* Remove obsolete LICENCE.txt (which was for snprintf reimplementation).
* Remove obsolete references to Cendio (for old ipaddr.py, now gone).

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agoBuild system: Fix check for <linux/if_tun.h> and remove our copy
Ian Jackson [Sun, 28 Dec 2014 16:02:13 +0000 (16:02 +0000)]
Build system: Fix check for <linux/if_tun.h> and remove our copy

 * Check for <linux/if_tun.h>, not <linux/if.h>, since the former is
   what we include.

 * Remove our embedded copy of linux/if_tun.h.  We have no need of
   this any more as all recent Linux platforms will provide this as
   part of the system.  This is good because linux/if_tun.h is
   GPLv2-only and secnet as a whole has to be GPLv3+ when built
   because it contains and depends on a few GPLv3+ things.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agoBuild system: Install ipaddrset.py and secnet.8 with correct perms
Ian Jackson [Sun, 28 Dec 2014 12:38:05 +0000 (12:38 +0000)]
Build system: Install ipaddrset.py and secnet.8 with correct perms

Do not install them as executables; use INSTALL_DATA instead.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agoBuild system: debian/rules: set DESTDIR (not prefix).
Ian Jackson [Sat, 27 Dec 2014 21:35:39 +0000 (21:35 +0000)]
Build system: debian/rules: set DESTDIR (not prefix).

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agoBuild system: Makefile: support DESTDIR.
Ian Jackson [Sat, 27 Dec 2014 21:35:02 +0000 (21:35 +0000)]
Build system: Makefile: support DESTDIR.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agoChangelog update.
Ian Jackson [Sat, 27 Dec 2014 21:29:00 +0000 (21:29 +0000)]
Changelog update.

9 years agopolypath: "address to remove not found" not an error
Ian Jackson [Sun, 2 Nov 2014 15:40:32 +0000 (15:40 +0000)]
polypath: "address to remove not found" not an error

Reduce the log severity of this message.  This can happen due to a
previous error, and does not then want to be reported again (unless
debugging is turned up).

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
9 years agopolypath: Make message class an argument to bad() callbacks
Ian Jackson [Sun, 2 Nov 2014 15:38:09 +0000 (15:38 +0000)]
polypath: Make message class an argument to bad() callbacks

No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>