chiark / gitweb /
hippotat.git
2 years agoREADME.config: fix units
Ian Jackson [Wed, 4 Aug 2021 10:27:38 +0000 (11:27 +0100)]
README.config: fix units

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agouse proper client http timeout
Ian Jackson [Wed, 4 Aug 2021 10:26:26 +0000 (11:26 +0100)]
use proper client http timeout

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoPROTOCOL: note re nonce based auth being hard
Ian Jackson [Wed, 4 Aug 2021 10:20:07 +0000 (11:20 +0100)]
PROTOCOL: note re nonce based auth being hard

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agometadata
Ian Jackson [Wed, 4 Aug 2021 01:04:41 +0000 (02:04 +0100)]
metadata

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agosome done todos
Ian Jackson [Wed, 4 Aug 2021 01:01:28 +0000 (02:01 +0100)]
some done todos

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agosome done todos
Ian Jackson [Wed, 4 Aug 2021 01:00:30 +0000 (02:00 +0100)]
some done todos

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agodebug flag
Ian Jackson [Wed, 4 Aug 2021 00:59:32 +0000 (01:59 +0100)]
debug flag

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient logger config
Ian Jackson [Wed, 4 Aug 2021 00:43:35 +0000 (01:43 +0100)]
client logger config

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoprovide for client opts
Ian Jackson [Wed, 4 Aug 2021 00:37:35 +0000 (01:37 +0100)]
provide for client opts

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoreport, set target
Ian Jackson [Wed, 4 Aug 2021 00:24:03 +0000 (01:24 +0100)]
report, set target

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoreport, wip
Ian Jackson [Wed, 4 Aug 2021 00:21:26 +0000 (01:21 +0100)]
report, wip

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoreport, reorg
Ian Jackson [Wed, 4 Aug 2021 00:03:52 +0000 (01:03 +0100)]
report, reorg

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoreport, plan
Ian Jackson [Tue, 3 Aug 2021 23:56:26 +0000 (00:56 +0100)]
report, plan

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoreport, hook in success
Ian Jackson [Tue, 3 Aug 2021 23:55:10 +0000 (00:55 +0100)]
report, hook in success

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoRevert "prep for moving lock into reporter"
Ian Jackson [Tue, 3 Aug 2021 23:50:04 +0000 (00:50 +0100)]
Revert "prep for moving lock into reporter"

Actually, keep it out there

This reverts commit 9c229f46f9d6c4b5b86c701cc4e7de61c603d1af.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoprep for moving lock into reporter
Ian Jackson [Tue, 3 Aug 2021 23:46:25 +0000 (00:46 +0100)]
prep for moving lock into reporter

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agorx queue add delimiters
Ian Jackson [Tue, 3 Aug 2021 23:44:12 +0000 (00:44 +0100)]
rx queue add delimiters

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agogenericise Queue
Ian Jackson [Tue, 3 Aug 2021 23:26:10 +0000 (00:26 +0100)]
genericise Queue

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agorx queue, prep, Cervine
Ian Jackson [Tue, 3 Aug 2021 23:22:27 +0000 (00:22 +0100)]
rx queue, prep, Cervine

maybe-owned is no good because it wants &Box<[u8]> but we want &[u8]

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agorx queue, missing boundaries
Ian Jackson [Tue, 3 Aug 2021 23:07:28 +0000 (00:07 +0100)]
rx queue, missing boundaries

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agomove rx check
Ian Jackson [Tue, 3 Aug 2021 23:02:16 +0000 (00:02 +0100)]
move rx check

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agorx queue
Ian Jackson [Tue, 3 Aug 2021 22:58:16 +0000 (23:58 +0100)]
rx queue

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agocheckn: skip empty containers
Ian Jackson [Tue, 3 Aug 2021 18:44:45 +0000 (19:44 +0100)]
checkn: skip empty containers

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoqueue debug
Ian Jackson [Tue, 3 Aug 2021 18:43:53 +0000 (19:43 +0100)]
queue debug

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agouse queue
Ian Jackson [Tue, 3 Aug 2021 18:40:04 +0000 (19:40 +0100)]
use queue

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoprovide queue
Ian Jackson [Tue, 3 Aug 2021 18:31:45 +0000 (19:31 +0100)]
provide queue

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agopass SlipMime also as value
Ian Jackson [Tue, 3 Aug 2021 18:04:37 +0000 (19:04 +0100)]
pass SlipMime also as value

Reduces type clutter

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agouse slip::check1 on already-split frames
Ian Jackson [Tue, 3 Aug 2021 18:02:22 +0000 (19:02 +0100)]
use slip::check1 on already-split frames

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agointroduce slip::check1
Ian Jackson [Tue, 3 Aug 2021 17:59:17 +0000 (18:59 +0100)]
introduce slip::check1

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agodosngrade to GPLv3+
Ian Jackson [Tue, 3 Aug 2021 17:48:01 +0000 (18:48 +0100)]
dosngrade to GPLv3+

We don't want to impose AGPLv3+ on the users of the client.

this is possible becuse all files here are either entirely by me
recently and/or from GPL (non-AGPL) parts of the Python hippotat.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agomessages
Ian Jackson [Tue, 3 Aug 2021 17:43:30 +0000 (18:43 +0100)]
messages

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip rx
Ian Jackson [Mon, 2 Aug 2021 10:07:08 +0000 (11:07 +0100)]
wip rx

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip rx, fix, mime
Ian Jackson [Mon, 2 Aug 2021 02:17:29 +0000 (03:17 +0100)]
wip rx, fix, mime

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip rx, fix, mime
Ian Jackson [Mon, 2 Aug 2021 01:49:14 +0000 (02:49 +0100)]
wip rx, fix, mime

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip rx, debug
Ian Jackson [Mon, 2 Aug 2021 01:28:08 +0000 (02:28 +0100)]
wip rx, debug

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip rx
Ian Jackson [Mon, 2 Aug 2021 01:26:22 +0000 (02:26 +0100)]
wip rx

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip rx
Ian Jackson [Mon, 2 Aug 2021 01:02:05 +0000 (02:02 +0100)]
wip rx

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agotidy up errors
Ian Jackson [Mon, 2 Aug 2021 00:51:58 +0000 (01:51 +0100)]
tidy up errors

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agosome debug
Ian Jackson [Mon, 2 Aug 2021 00:46:35 +0000 (01:46 +0100)]
some debug

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoaddr chk
Ian Jackson [Mon, 2 Aug 2021 00:40:30 +0000 (01:40 +0100)]
addr chk

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoprep for addr chk
Ian Jackson [Mon, 2 Aug 2021 00:27:34 +0000 (01:27 +0100)]
prep for addr chk

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agonote about Box vs Vec
Ian Jackson [Sun, 1 Aug 2021 23:55:01 +0000 (00:55 +0100)]
note about Box vs Vec

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agocompletely redo check() and main client loop
Ian Jackson [Sun, 1 Aug 2021 23:50:56 +0000 (00:50 +0100)]
completely redo check() and main client loop

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agochange mimeswap error handling
Ian Jackson [Sun, 1 Aug 2021 19:51:51 +0000 (20:51 +0100)]
change mimeswap error handling

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip get address
Ian Jackson [Sun, 1 Aug 2021 19:46:43 +0000 (20:46 +0100)]
wip get address

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agofix slip mimeification
Ian Jackson [Sun, 1 Aug 2021 19:18:00 +0000 (20:18 +0100)]
fix slip mimeification

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip debug, make it a Debug
Ian Jackson [Sun, 1 Aug 2021 19:04:44 +0000 (20:04 +0100)]
wip debug, make it a Debug

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agomime slip tests, currently failing
Ian Jackson [Sun, 1 Aug 2021 18:38:20 +0000 (19:38 +0100)]
mime slip tests, currently failing

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip debug
Ian Jackson [Sun, 1 Aug 2021 18:28:30 +0000 (19:28 +0100)]
wip debug

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip debug
Ian Jackson [Sun, 1 Aug 2021 18:28:19 +0000 (19:28 +0100)]
wip debug

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agodrop empty frames before xmit
Ian Jackson [Sun, 1 Aug 2021 18:27:42 +0000 (19:27 +0100)]
drop empty frames before xmit

Server hates them!

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agofix
Ian Jackson [Sun, 1 Aug 2021 18:20:14 +0000 (19:20 +0100)]
fix

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip refactor body, pass content-length
Ian Jackson [Sun, 1 Aug 2021 17:56:32 +0000 (18:56 +0100)]
wip refactor body, pass content-length

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip refactor body, move ok
Ian Jackson [Sun, 1 Aug 2021 17:49:52 +0000 (18:49 +0100)]
wip refactor body, move ok

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip refactor body, move type
Ian Jackson [Sun, 1 Aug 2021 17:49:08 +0000 (18:49 +0100)]
wip refactor body, move type

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip refactor body
Ian Jackson [Sun, 1 Aug 2021 17:45:57 +0000 (18:45 +0100)]
wip refactor body

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoFixes
Ian Jackson [Sun, 1 Aug 2021 17:15:48 +0000 (18:15 +0100)]
Fixes

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoDisplay error body
Ian Jackson [Sun, 1 Aug 2021 17:02:30 +0000 (18:02 +0100)]
Display error body

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoAdd token
Ian Jackson [Sun, 1 Aug 2021 11:42:10 +0000 (12:42 +0100)]
Add token

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoown hmac, tests, pass, note origin
Ian Jackson [Sun, 1 Aug 2021 00:25:33 +0000 (01:25 +0100)]
own hmac, tests, pass, note origin

Copyrightwise this is fine because IETF licences code in RFCs
appropriately.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoown hmac, tests, pass
Ian Jackson [Sun, 1 Aug 2021 00:12:35 +0000 (01:12 +0100)]
own hmac, tests, pass

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoown hmac, tests, fail
Ian Jackson [Sun, 1 Aug 2021 00:03:17 +0000 (01:03 +0100)]
own hmac, tests, fail

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoown hmac, Digest one's key length rules are annoying
Ian Jackson [Sat, 31 Jul 2021 22:36:01 +0000 (23:36 +0100)]
own hmac, Digest one's key length rules are annoying

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agodocument hmac algorithm
Ian Jackson [Sat, 31 Jul 2021 21:54:23 +0000 (22:54 +0100)]
document hmac algorithm

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoprep for hmac
Ian Jackson [Sat, 31 Jul 2021 21:54:18 +0000 (22:54 +0100)]
prep for hmac

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip request mime
Ian Jackson [Sat, 31 Jul 2021 18:10:27 +0000 (19:10 +0100)]
wip request mime

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip request mime
Ian Jackson [Sat, 31 Jul 2021 17:55:41 +0000 (18:55 +0100)]
wip request mime

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip request mime
Ian Jackson [Sat, 31 Jul 2021 17:31:32 +0000 (18:31 +0100)]
wip request mime

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip request mime
Ian Jackson [Sat, 31 Jul 2021 17:29:38 +0000 (18:29 +0100)]
wip request mime

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agobreak out Frames
Ian Jackson [Sat, 31 Jul 2021 13:18:05 +0000 (14:18 +0100)]
break out Frames

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agomimeswap
Ian Jackson [Sat, 31 Jul 2021 13:05:47 +0000 (14:05 +0100)]
mimeswap

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agowip mimeswap
Ian Jackson [Sat, 31 Jul 2021 12:48:50 +0000 (13:48 +0100)]
wip mimeswap

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoReporter has ic
Ian Jackson [Sat, 31 Jul 2021 11:27:43 +0000 (12:27 +0100)]
Reporter has ic

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agointroduce ClientContext
Ian Jackson [Sat, 31 Jul 2021 11:24:15 +0000 (12:24 +0100)]
introduce ClientContext

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoReport when http req fails, not after retry delay
Ian Jackson [Sat, 31 Jul 2021 11:20:01 +0000 (12:20 +0100)]
Report when http req fails, not after retry delay

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoKeep some requests outstanding
Ian Jackson [Fri, 30 Jul 2021 18:43:31 +0000 (19:43 +0100)]
Keep some requests outstanding

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoconfig: Note a todo
Ian Jackson [Fri, 30 Jul 2021 18:41:42 +0000 (19:41 +0100)]
config: Note a todo

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agotidying
Ian Jackson [Fri, 30 Jul 2021 18:30:14 +0000 (19:30 +0100)]
tidying

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agobreak out submit_request
Ian Jackson [Fri, 30 Jul 2021 18:25:47 +0000 (19:25 +0100)]
break out submit_request

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agofix error
Ian Jackson [Fri, 30 Jul 2021 17:33:26 +0000 (18:33 +0100)]
fix error

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agorename client binary
Ian Jackson [Fri, 30 Jul 2021 17:32:46 +0000 (18:32 +0100)]
rename client binary

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient: fix tiny bug
Ian Jackson [Thu, 29 Jul 2021 00:50:17 +0000 (01:50 +0100)]
client: fix tiny bug

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient: wip code, compiles
Ian Jackson [Thu, 29 Jul 2021 00:48:47 +0000 (01:48 +0100)]
client: wip code, compiles

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient: wip code
Ian Jackson [Thu, 29 Jul 2021 00:47:45 +0000 (01:47 +0100)]
client: wip code

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient: wip code
Ian Jackson [Thu, 29 Jul 2021 00:37:12 +0000 (01:37 +0100)]
client: wip code

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient: wip code
Ian Jackson [Thu, 29 Jul 2021 00:31:29 +0000 (01:31 +0100)]
client: wip code

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient: wip code
Ian Jackson [Thu, 29 Jul 2021 00:15:58 +0000 (01:15 +0100)]
client: wip code

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient: wip code
Ian Jackson [Thu, 29 Jul 2021 00:03:22 +0000 (01:03 +0100)]
client: wip code

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient: wip code
Ian Jackson [Wed, 28 Jul 2021 23:54:17 +0000 (00:54 +0100)]
client: wip code

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient: wip code
Ian Jackson [Tue, 27 Jul 2021 00:17:05 +0000 (01:17 +0100)]
client: wip code

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient: wip code
Ian Jackson [Mon, 26 Jul 2021 23:59:55 +0000 (00:59 +0100)]
client: wip code

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoconfig: check batch vs mtu sizes
Ian Jackson [Mon, 26 Jul 2021 18:35:59 +0000 (19:35 +0100)]
config: check batch vs mtu sizes

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoconfig: Introduce u32.sat()
Ian Jackson [Mon, 26 Jul 2021 01:03:02 +0000 (02:03 +0100)]
config: Introduce u32.sat()

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient: wip
Ian Jackson [Sun, 25 Jul 2021 23:50:53 +0000 (00:50 +0100)]
client: wip

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoclient: wip
Ian Jackson [Sun, 25 Jul 2021 22:42:50 +0000 (23:42 +0100)]
client: wip

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoconfig: Substitutions prefer %{...} to %(...)s, document, etc.
Ian Jackson [Sun, 25 Jul 2021 18:38:06 +0000 (19:38 +0100)]
config: Substitutions prefer %{...} to %(...)s, document, etc.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoconfig: Add missing ' ' around %(rnets)s in docs
Ian Jackson [Sun, 25 Jul 2021 18:37:01 +0000 (19:37 +0100)]
config: Add missing ' ' around %(rnets)s in docs

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoconfig: No longer substitute ifname_*; (more) breaking change
Ian Jackson [Sun, 25 Jul 2021 18:27:56 +0000 (19:27 +0100)]
config: No longer substitute ifname_*; (more) breaking change

The docs didn't mention this.  Technically it's a breaking change that
unlike in Python, stuff doesn't gets substituted willy nilly into
every variable from every other variable.  Here we just delete (again)
the code to specially do this for ifname_client and ifname_server.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoconfig: Substutiton, improve docs
Ian Jackson [Sun, 25 Jul 2021 18:29:10 +0000 (19:29 +0100)]
config: Substutiton, improve docs

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
2 years agoconfig: Refactor substutiton
Ian Jackson [Sun, 25 Jul 2021 18:26:56 +0000 (19:26 +0100)]
config: Refactor substutiton

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