NSD ACL Plugin

Colm MacCarthaigh colm.maccarthaigh at heanet.ie
Thu Jul 10 13:37:16 UTC 2003

On Thu, Jul 10, 2003 at 03:10:16PM +0200, Erik Rozendaal wrote:
> Colm MacCarthaigh wrote:
> >After having enough time to put some finishing touches to an ACL plugin
> >for NSD I know have something suitable for looking at. It isnt entirely
> >functionaly just yet, but it does compile, load and work to certain
> >extent.
> >
> >After untarring the source, it needs to be configured as follows:
> Is there a place I can get the source? :)

Gah! This has been happening me the least few days, Mutt plus our
virus scanner hasnt been playing nicely. I've attached it now, from
a different machine. Please shout if it isnt attached :)

> >for example. The current implementation has two main limitations,
> >I'm hoping someone may be able to help me rectify these. The plugin
> >currently only honours "all" type ACLs, ie you can't block just
> >"NS", "MX" .. or whatever queries. This is because I can't find
> >an easy way to determine query_type from with the plugin. Is there
> >an easy way ?
> Not yet.  Right now the class and type of the query are passed explicitly 
> to functions that need it inside NSD.  They should be stored in "struct 
> query" after the query has been analyzed.  Another problem is that 
> currently the query is overwritten with the answer... so by the time your 
> plugin is called the original class and type are no longer available :-(
> Finally, what do you plan to do when a client issues a query for type "ANY" 
> but is not allowed to see MX records?  Filter out the MX records from the 
> answer?  Reject the original ANY query?

I was planning on simply rejecting the ANY. I'm not sure how useful
denying specific record types is, but since it was so easy to add
, I did :)

> >Rules are currently not honoured for subzones. So, if you have
> >a rule that says:
> >
> >	deny all for example.com from 
> >
> >"host -t any example.com" will be refused by the plugin, but 
> >"host -t any www.example.com" will not. 
> >
> >Fixing this is a matter of finding out how to get a list of all the 
> >records in a particular zone and registering data for each. Since the AXFR 
> >code
> >must have method of finding out all this data, I'm assuming this will
> >be relatively doable. I just havnt figured out how yet. Though the
> >plugin has been written with this approach in mind. (see the top of
> >nsd_acl_plugin.c). I'd appreciate any insights anyone has to offer in
> >this regard.
> Probably the easiest way is to use the HEAP_WALK macro in heap.h (which 
> redefines RBTREE_WALK in rbtree.h) on interface->nsd->db->heap.  This will 
> give you all the domains (not just the ones specific to a zone).

O.k., I'll give that a go.

> Obviously the internal plugin APIs aren't very well defined yet.  That's 
> one reason the plugin support is marked experimental :)  But it will be a 
> good thing to make more of the internal functionality of NSD available to 
> plugins in a documented manner.  But this will take some time.

Completely understandable!

Colm MacCárthaigh  /  HEAnet, Teach Brooklawn,  / Innealtóir Ghréasáin
+353 1 6609040    / Bóthar Shelbourne, BÁC, IE /   http://www.hea.net/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: nsd_acl_plugin.tar.gz
Type: application/octet-stream
Size: 62873 bytes
Desc: not available
URL: <http://lists.nlnetlabs.nl/pipermail/nsd-users/attachments/20030710/af8edc46/attachment.obj>

More information about the nsd-users mailing list