Skip to content

Commit

Permalink
Remove documentation on dynamic lookup since it doesn't work.
Browse files Browse the repository at this point in the history
Also, add some notes about dynamic lookup esp. wrt. freeing of resources to develdoc.txt.
  • Loading branch information
Linus Nordberg committed Feb 18, 2012
1 parent b1414bf commit a0008e2
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 8 deletions.
63 changes: 63 additions & 0 deletions develdoc.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
radsecproxy documentation for developers

1. Overall design
=================

At startup client and server configurations are read. Two lists
are created, called clconfs and srvconfs. Both contain clsrvconf
Expand Down Expand Up @@ -35,7 +36,9 @@ xxxserverrd, where xxx is the transport name. The server reader
is responsible for creating a server writer thread that takes care
of sending RADIUS replies to a client.


2. RADIUS message processing
============================

In 1 we described the threads used and the high level operations.
We will now describe how RADIUS messages are processed and flow
Expand Down Expand Up @@ -277,3 +280,63 @@ addresses after initial startup.
Can be defined it extra initialisation is needed for the transport.

};


3. Dynamic servers
==================

A server block can contain the 'dynamicLookupCommand' option, naming
an executable file which will be executed (fork, exec) with the realm
of the user being authenticated as its only argument. The output from
the program (read from stdout) is used as configuration text and
parsed as if it was read from a configuration file.

[XXX describe what happens when config is read -- set in
createsubrealmservers() if the server block has the
'dynamicLookupCommand' option]

[XXX describe what happens when a packet is handled -- findserver()
creating a realm object]

Dynamic freeing of resources
----------------------------

At the end of clientwr(), if server->dynamiclookuparg != NULL, the
removeserversubrealms(list, server) function is called and normally
so is freeclsrvconf(server).

removeserversubrealms() traverses the list of realms (taking a lock on
each realm) and calls _internal_removeserversubrealms(subrealm,
server) on each subrealm. If the list of subrealms is empty after
this, it's being destroyed.

The _internal_removeserversubrealms(realm list, SERVER) function
traverses the list of realms and for each realm:

- increase the refcount on the realm

- take the lock on the realm

- for srv in realm->srvconfs: if srv == SERVER: decrease ref on realm

- free all servers in realm->srvconfs matching SERVER
(list_removedata() TODO: is this function correct?)

- same thing for realm->accsrvconfs as for srvconfs

- if none of the realm->srvconfs nor the realm->accsrvonfs has a
dynamiclookupcommand:

- for each srv in realm->srvconfs: free srv and decrease ref on realm

- destroy realm->srvconfs

- same thing for realm->accsrvconfs as for srvconfs

- release the realm lock

- decrease the refcount on the realm

freeclsrvconf() performs 15 calls to free() and also invokes
freegconfmstr(), freehostports(), regfree() and
pthread_mutex_destroy().
9 changes: 1 addition & 8 deletions radsecproxy.conf.5.xml
Original file line number Diff line number Diff line change
Expand Up @@ -633,8 +633,7 @@ blocktype name {
<literal>AddTTL</literal>, <literal>rewrite</literal>,
<literal>rewriteIn</literal>, <literal>rewriteOut</literal>,
<literal>statusServer</literal>, <literal>retryCount</literal>,
<literal>retryInterval</literal>,
<literal>dynamicLookupCommand</literal> and
<literal>retryInterval</literal> and
<literal>LoopPrevention</literal>.
</para>
<para>
Expand Down Expand Up @@ -668,12 +667,6 @@ blocktype name {
should wait between each retry. The defaults are 2 retries and
an interval of 5s.
</para>
<para>
The option <literal>dynamicLookupCommand</literal> can be used
to specify a command that should be executed to dynamically
configure and use a server. The use of this feature will be
documented separately/later.
</para>
<para>
Using the <literal>LoopPrevention</literal> option here
overrides any basic setting of this option. See section
Expand Down

0 comments on commit a0008e2

Please sign in to comment.