chiark / gitweb /
5 years agonet.lisp: net.lisp: Refactor `string-subipnet' and its friends.
Mark Wooding [Sat, 13 Jul 2013 15:34:40 +0000 (16:34 +0100)]
net.lisp: net.lisp: Refactor `string-subipnet' and its friends.

  * Kill `ipnet-subnet', which wasn't used anywhere else anyway.
    Replace with `check-subipnet', with a different interface.

  * Add `:slashp' argument to `parse-subnet', controlling whether it
    bothers to detect a `/'.

  * Introduce `parse-subipnet' as a higher-level interface to

5 years agonet.lisp: Add docstring for `string-subipnet'.
Mark Wooding [Sat, 13 Jul 2013 15:34:40 +0000 (16:34 +0100)]
net.lisp: Add docstring for `string-subipnet'.

5 years agonet.lisp: Whitespace fixup.
Mark Wooding [Sat, 13 Jul 2013 15:34:40 +0000 (16:34 +0100)]
net.lisp: Whitespace fixup.

5 years agonet.lisp: Improve error in `ipmask'.
Mark Wooding [Sat, 13 Jul 2013 15:34:40 +0000 (16:34 +0100)]
net.lisp: Improve error in `ipmask'.

5 years agonet.lisp, zone.lisp: Support for IPv6 addresses.
Mark Wooding [Tue, 15 Apr 2014 15:42:05 +0000 (16:42 +0100)]
net.lisp, zone.lisp: Support for IPv6 addresses.

This just pretty much slots in now.  After an awful lot of work making
slots which are exactly the right shape!

5 years agonet.lisp, zone.lisp: Major overhaul for multiple address families.
Mark Wooding [Tue, 15 Apr 2014 13:02:06 +0000 (14:02 +0100)]
net.lisp, zone.lisp: Major overhaul for multiple address families.

A lot of internals have changed, and some user-visible features have
been dropped.

  * IP addresses and networks are now captured in CLOS objects, and the
    low-level details of messing with them are handled in generic
    functions which live in their own separate files.

  * `ipnet-pretty' has gone.  Now `ipnet' objects are directly

  * `ipnet-changeable-bytes' has gone; there's now
    `ipnet-changeable-bits' instead.

  * `host' and `net' objects now track multiple addresses, so accessing
    them is a bit different.  `net-get-as-ipnet' has gone, replaced by
    `net-parse-to-ipnets'.  Acceptable syntaxes have mostly been
    enhanced, with the ability to control which address families are

  * Slightly painfully, support for DNS lookups has been dropped --
    because SBCL doesn't have a good way of doing IPv6 lookups.

  * The `:cidr-delegation' record parser has gone, and been replaced by
    `:multi', which can be used to achieve the same thing (and a number
    of other special effects besides).

  * For the sake of sanity, the `:a' record parser only produces A
    records.  The new `:addr' parser will produce records for all
    address families associated with its input.

5 years agonet.lisp, zone.lisp: Improve commentary and docstrings.
Mark Wooding [Tue, 15 Apr 2014 10:57:24 +0000 (11:57 +0100)]
net.lisp, zone.lisp: Improve commentary and docstrings.

Also one or two minor whitespace fixes.

5 years agozone.lisp: Change `zone-parse-records' interface to be more useful.
Mark Wooding [Tue, 15 Apr 2014 13:39:15 +0000 (14:39 +0100)]
zone.lisp: Change `zone-parse-records' interface to be more useful.

Now it returns a list of the processed records rather than appending
them to a zone object.

5 years agozone.lisp: Apply pathname templates to DKIM and SSHFP files.
Mark Wooding [Tue, 15 Apr 2014 14:02:31 +0000 (15:02 +0100)]
zone.lisp: Apply pathname templates to DKIM and SSHFP files.

Makes zone files nicer.  Alas, not compatible; sorry.

5 years agozone.lisp: Fix `:sshfp' handling of literals.
Mark Wooding [Tue, 15 Apr 2014 13:53:39 +0000 (14:53 +0100)]
zone.lisp: Fix `:sshfp' handling of literals.

It was, unfortunately, completely broken.

5 years agozone.lisp: Fix default output directory.
Mark Wooding [Tue, 15 Apr 2014 11:00:49 +0000 (12:00 +0100)]
zone.lisp: Fix default output directory.

The code used to capture `*default-pathname-defaults*' in
`*zone-output-path*' at load time, which (varying by implementation)
might indicate the calling process's working directory, or might be the
directory from which the file was loaded.  The latter is obviously
wrong, so we adopt the convention in `zone-file-name' that if
`*zone-output-path*' is nil then we use `*default-pathname-defaults'
from the time of the call.

5 years agozone.lisp: Support for SSHFP records.
Mark Wooding [Thu, 3 Apr 2014 17:44:26 +0000 (18:44 +0100)]
zone.lisp: Support for SSHFP records.

Fingerprints can be supplied explicitly or read from files in the
format written by ssh-keygen(1).

5 years agozone.lisp: Support for DKIM key records.
Mark Wooding [Thu, 3 Apr 2014 16:21:44 +0000 (17:21 +0100)]
zone.lisp: Support for DKIM key records.

Reads the key data from a PEM file.  Splits stuff into multiple lines in
a vaguely sensible way.

5 years agozone.lisp: Support multi-line TXT records.
Mark Wooding [Thu, 3 Apr 2014 16:20:25 +0000 (17:20 +0100)]
zone.lisp: Support multi-line TXT records.

5 years agozone.lisp: Mark an ignored function parameter.
Mark Wooding [Sun, 29 Dec 2013 21:21:24 +0000 (21:21 +0000)]
zone.lisp: Mark an ignored function parameter.

CLisp complains about this one, but SBCL doesn't mind.

5 years agozone.lisp: Improve commentary regarding the syntax of record forms.
Mark Wooding [Sun, 29 Dec 2013 21:18:56 +0000 (21:18 +0000)]
zone.lisp: Improve commentary regarding the syntax of record forms.

5 years agozone.lisp: Minor comment formatting.
Mark Wooding [Sun, 29 Dec 2013 20:39:28 +0000 (20:39 +0000)]
zone.lisp: Minor comment formatting.

5 years agozone.lisp: Clean up whitespace.
Mark Wooding [Sun, 29 Dec 2013 20:41:15 +0000 (20:41 +0000)]
zone.lisp: Clean up whitespace.

6 years agozone.lisp: Choose first matching record for preferred subnet.
Mark Wooding [Sat, 8 Dec 2012 15:07:43 +0000 (15:07 +0000)]
zone.lisp: Choose first matching record for preferred subnet.

The old (overly imperative) algorithm picked the last, which doesn't fit
with the fallback to the first record if none is preferred.

7 years agosys.lisp: Use OS:UNAME rather than UNIX:GET-HOST-NAME in CLisp.
Mark Wooding [Sun, 22 Apr 2012 17:55:48 +0000 (18:55 +0100)]
sys.lisp: Use OS:UNAME rather than UNIX:GET-HOST-NAME in CLisp.

The latter appears to have been withdrawn in later versions of CLisp.

7 years agozone.lisp: Rename `broadcast' to `bcast' in :NET records.
Mark Wooding [Sun, 11 Mar 2012 04:53:36 +0000 (04:53 +0000)]
zone.lisp: Rename `broadcast' to `bcast' in :NET records.

7 years agozone.lisp: Reverse delegation for multiple subnets into the same target.
Mark Wooding [Sun, 11 Mar 2012 04:50:55 +0000 (04:50 +0000)]
zone.lisp: Reverse delegation for multiple subnets into the same target.

Just a notational convenience.

7 years agozone.lisp: Better documentation for reverse-zone directives.
Mark Wooding [Sun, 11 Mar 2012 04:49:29 +0000 (04:49 +0000)]
zone.lisp: Better documentation for reverse-zone directives.

8 years agoRun via core file.
Mark Wooding [Tue, 6 Sep 2011 11:46:00 +0000 (12:46 +0100)]
Run via core file.

This gives rather faster response.  Maybe when this machinery moves to a
faster machine it'll be worth reverting this change, but right now it
seems good.

8 years agofrontend.lisp: Whitespace fixing.
Mark Wooding [Tue, 6 Sep 2011 11:44:19 +0000 (12:44 +0100)]
frontend.lisp: Whitespace fixing.

8 years agoserv.lisp: Spread exports throughout the file.
Mark Wooding [Tue, 6 Sep 2011 11:42:42 +0000 (12:42 +0100)]
serv.lisp: Spread exports throughout the file.

8 years agozone.lisp: Reformat, scattering exports.
Mark Wooding [Sun, 22 May 2011 14:28:34 +0000 (15:28 +0100)]
zone.lisp: Reformat, scattering exports.

Put the exports near the things they export.  This makes it easier to
see whether a function is exported, and keep track of exports when
things get refactored.

8 years agozone.lisp: Add support for TXT records.
Mark Wooding [Sun, 22 May 2011 14:28:14 +0000 (15:28 +0100)]
zone.lisp: Add support for TXT records.

8 years agonet.lisp, sys.lisp: Merge packages.
Mark Wooding [Sun, 22 May 2011 14:10:48 +0000 (15:10 +0100)]
net.lisp, sys.lisp: Merge packages.

Separate out the package defintion into a new file `net-package.lisp'.
Scatter the EXPORT directives so that they decorate the functions they
refer to.

This was prompted because of a dependency cycle in a CLisp-specific
part of sys.lisp.

8 years agofrontend.lisp: Hack around CLisp's bizarreness.
Mark Wooding [Sun, 22 May 2011 14:07:33 +0000 (15:07 +0100)]
frontend.lisp: Hack around CLisp's bizarreness.

Annoyingly, CLisp's PROBE-FILE signals an error if you give it a
directory name.  Bodge around this.  I pinched the basic idea from
the CL-FAD package, by Peter Seibel and Edi Weitz.

10 years agozone: Use cl-launch.
Mark Wooding [Wed, 26 Nov 2008 21:22:47 +0000 (21:22 +0000)]
zone: Use cl-launch.

It's very shiny!

11 years agodriver: Use asdf rather than CLC to start the program.
Mark Wooding [Mon, 14 Apr 2008 09:32:47 +0000 (10:32 +0100)]
driver: Use asdf rather than CLC to start the program.

This gives us more control over the verbose output.

11 years agoUpgrade everything for SBCL.
Mark Wooding [Sun, 30 Mar 2008 23:17:39 +0000 (00:17 +0100)]
Upgrade everything for SBCL.

While we're at it, isolate the system-specific stuff to its own sin-bin
for easier porting to other systems.

11 years agozone: Clean up the :cidr-delegation parser.
Mark Wooding [Sun, 16 Mar 2008 15:02:14 +0000 (15:02 +0000)]
zone: Clean up the :cidr-delegation parser.

11 years agozone, serv: Add support for SRV records.
Mark Wooding [Sun, 16 Mar 2008 14:28:48 +0000 (14:28 +0000)]
zone, serv: Add support for SRV records.

12 years agozone: Quench warnings from zone-parser functions.
Mark Wooding [Mon, 20 Aug 2007 08:13:20 +0000 (09:13 +0100)]
zone: Quench warnings from zone-parser functions.

12 years agozone: Remove unused function zone-cidr-delegation.
Mark Wooding [Mon, 20 Aug 2007 08:11:02 +0000 (09:11 +0100)]
zone: Remove unused function zone-cidr-delegation.

12 years agozone, frontend: Open up the writing of zones to files.
Mark Wooding [Tue, 26 Jun 2007 16:43:12 +0000 (17:43 +0100)]
zone, frontend: Open up the writing of zones to files.

All file writing is now done using generic functions, parameterized by a
format keyword.  Writing of the default BIND format zone files is also
handled by generic functions, dispatched based on the record types.

12 years agozone: New macro preferred-subnet-case.
Mark Wooding [Mon, 25 Jun 2007 16:55:27 +0000 (17:55 +0100)]
zone: New macro preferred-subnet-case.

A pleasant way to make decisions based on which subnets are preferred.

12 years agofrontend: Allow use of new zone machinery.
Mark Wooding [Fri, 15 Jun 2007 14:19:29 +0000 (15:19 +0100)]
frontend: Allow use of new zone machinery.

New options --subnet declares preferred subnets and --directory sets an
output directory.  Also --feature inserts a keyword into *features* for
use by #+/#- reader macros in zone files.

12 years agozone: Change default subnet selection.
Mark Wooding [Fri, 15 Jun 2007 14:16:26 +0000 (15:16 +0100)]
zone: Change default subnet selection.

We now have a concept of `preferred subnets'.  If a record has a subnet
whose name is on the list *preferred-subnets*, and no explicit default
record, then the record for the first such subnet is used as the
default.  If no preferred subnet is found, then the first listed subnet
is used, as before.

The objective is to make describing split-horizon DNS systems easier.

12 years agozone: New record type :svc creates A records without PTR records.
Mark Wooding [Fri, 15 Jun 2007 14:15:27 +0000 (15:15 +0100)]
zone: New record type :svc creates A records without PTR records.

The :svc record type inserts an A record into the zone without inserting
a matching PTR record into the reverse zone(s).  This is useful for
service role addresses.

To make this work, we add a new slot make-ptr-p to zone records which is
used to label those A records which are eligible to be turned into
PTRs.  This mechanism is, I hope, considerably simpler than the old
defsubp system.

12 years agozone: Allow record parsers more control over the names they produce.
Mark Wooding [Fri, 15 Jun 2007 14:12:16 +0000 (15:12 +0100)]
zone: Allow record parsers more control over the names they produce.

Pass in the parent zone and the given prefix, rather than computing the
final name.  The defzoneparse macro wrapper computes the final name,
though parsers have access to the original data and the function to
compute the name so that they can produce different names should they so

12 years agozone: Use hash-table for reversing zones; eliminate defsubp.
Mark Wooding [Fri, 15 Jun 2007 14:07:08 +0000 (15:07 +0100)]
zone: Use hash-table for reversing zones; eliminate defsubp.

For :reverse, use a hash-table to keep track of which addresses have
been assigned PTR records so far.  Eliminate the defsubp slot of zone
records as being a bad (and confusing) idea.

12 years agozone: Allow control over output file names.
Mark Wooding [Fri, 15 Jun 2007 14:07:07 +0000 (15:07 +0100)]
zone: Allow control over output file names.

Output file names are now constructed by a dedicated function, using
Lisp pathname functions rather than format.  There's also a default
*zone-output-path* to control where the files get put.

This suggests a reordering of the code, specifically to move
make-serial-number below the new zone-file-name.

12 years agozone: Simplify zone-write.
Mark Wooding [Fri, 15 Jun 2007 11:53:35 +0000 (12:53 +0100)]
zone: Simplify zone-write.

Use ecase instead of case, and merge NS handling with PTR and CNAME.

12 years agozone: Random whitespace cleanups.
Mark Wooding [Fri, 15 Jun 2007 11:50:41 +0000 (12:50 +0100)]
zone: Random whitespace cleanups.

12 years agozone: Delete redundant functions.
Mark Wooding [Fri, 15 Jun 2007 11:50:02 +0000 (12:50 +0100)]
zone: Delete redundant functions.

I've just noticed: zone-reverse and zone-reverse-records are not used by
anything, and not exported.  Delete them.

12 years agozone, net, frontend: Kill trailing whitespaces.
Mark Wooding [Tue, 12 Jun 2007 19:38:45 +0000 (20:38 +0100)]
zone, net, frontend: Kill trailing whitespaces.

12 years agozone: Use new with-parsed-body macro.
Mark Wooding [Sun, 24 Dec 2006 18:30:01 +0000 (18:30 +0000)]
zone: Use new with-parsed-body macro.

12 years agoMerge branch 'master' of git+ssh://
Mark Wooding [Sat, 23 Dec 2006 14:54:24 +0000 (14:54 +0000)]
Merge branch 'master' of git+ssh://

12 years agonet: Fix misspelt export entry.
Mark Wooding [Tue, 19 Dec 2006 01:10:31 +0000 (01:10 +0000)]
net: Fix misspelt export entry.

12 years agoThroughout: Use shiny new macros.
Mark Wooding [Sun, 10 Dec 2006 15:03:55 +0000 (15:03 +0000)]
Throughout: Use shiny new macros.

In particular, with-parsed-body and setf-default are useful.

12 years agoportability: Supply system-specific wossname for CLisp and ECL.
Mark Wooding [Sun, 10 Dec 2006 15:11:28 +0000 (15:11 +0000)]
portability: Supply system-specific wossname for CLisp and ECL.

This involves some unpleasant CFFI hacking for ECL.

13 years agoAttempt to port the lot to CLisp.
Mark Wooding [Wed, 24 May 2006 08:20:50 +0000 (09:20 +0100)]
Attempt to port the lot to CLisp.

This is going to need more work, because CLisp is lacking an interface
to gethostbyname.  We may grow a dependency on CFFI.

13 years agoasdf: Provide more package information and dependencies.
Mark Wooding [Wed, 17 May 2006 18:58:10 +0000 (19:58 +0100)]
asdf: Provide more package information and dependencies.

13 years agofrontend: Use a temporary package rather than one with a funny name.
Mark Wooding [Wed, 17 May 2006 18:57:55 +0000 (19:57 +0100)]
frontend: Use a temporary package rather than one with a funny name.

13 years agofrontend: Track rename of `help-opts'.
Mark Wooding [Mon, 24 Apr 2006 14:42:16 +0000 (15:42 +0100)]
frontend: Track rename of `help-opts'.

13 years agoReformat the docstrings.
Mark Wooding [Sun, 23 Apr 2006 15:23:03 +0000 (16:23 +0100)]
Reformat the docstrings.

13 years agodefzoneparse: Parse the body; handle docstring and declarations properly.
Mark Wooding [Sun, 23 Apr 2006 00:47:26 +0000 (01:47 +0100)]
defzoneparse: Parse the body; handle docstring and declarations properly.

13 years agoTrack rename of `mdw.collect' package.
Mark Wooding [Sat, 22 Apr 2006 23:59:26 +0000 (00:59 +0100)]
Track rename of `mdw.collect' package.

13 years agoSplit out low-level network fiddling into a separate package.
Mark Wooding [Thu, 20 Apr 2006 21:57:18 +0000 (22:57 +0100)]
Split out low-level network fiddling into a separate package.

13 years agofrontend: Simplify using new optparse features.
Mark Wooding [Thu, 20 Apr 2006 16:10:30 +0000 (17:10 +0100)]
frontend: Simplify using new optparse features.

13 years agozone: Track rename of safely and optparse packages.
Mark Wooding [Thu, 20 Apr 2006 13:51:37 +0000 (14:51 +0100)]
zone: Track rename of safely and optparse packages.

13 years agozone: Allow definitions of subnets in defnet
Mark Wooding [Thu, 20 Apr 2006 12:25:06 +0000 (13:25 +0100)]
zone: Allow definitions of subnets in defnet

This makes it rather easier to describe the zones.

13 years agozone: Make the code prettier.
Mark Wooding [Thu, 20 Apr 2006 12:04:06 +0000 (13:04 +0100)]
zone: Make the code prettier.

13 years agoIgnore boring files.
Mark Wooding [Thu, 20 Apr 2006 10:32:19 +0000 (11:32 +0100)]
Ignore boring files.

13 years agozone: Write output to, rather than just DOMAIN.
Mark Wooding [Thu, 20 Apr 2006 10:31:48 +0000 (11:31 +0100)]
zone: Write output to, rather than just DOMAIN.

It seemed sexy to just name the zone file after the zone, but actually
it causes any number of difficulties.

13 years agoNew zone entry type :net
mdw [Mon, 13 Feb 2006 12:05:04 +0000 (12:05 +0000)]
New zone entry type :net

Automatically puts in records for the interesting factoids about the

13 years agoBugfix: Canonify the zone source name.
mdw [Mon, 13 Feb 2006 12:02:56 +0000 (12:02 +0000)]
Bugfix: Canonify the zone source name.

Expect the variable *default-zone-source* to be already dotified.

13 years agofrontend: Use CLC rather than ASDF.
mdw [Mon, 13 Feb 2006 11:59:36 +0000 (11:59 +0000)]
frontend: Use CLC rather than ASDF.

14 years agoRemove random crud.
mdw [Thu, 25 Aug 2005 09:01:02 +0000 (09:01 +0000)]
Remove random crud.

14 years agoInitial checkin.
mdw [Thu, 25 Aug 2005 08:46:39 +0000 (08:46 +0000)]
Initial checkin.