X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=lib%2FHACKING;h=83a91b5060d8f359aeb62a5be83abdd4474b1687;hb=6d2889ba0a558100ebf7616f9769864daf5ece8e;hp=6708c19c3c8fc45bafb850e426624024cb5c136a;hpb=6703d5727a51dec8d076b783c6f40bcdc069de86;p=libradsec.git diff --git a/lib/HACKING b/lib/HACKING index 6708c19..83a91b5 100644 --- a/lib/HACKING +++ b/lib/HACKING @@ -1,45 +1,91 @@ HACKING file for libradsec (in Emacs -*- org -*- mode). -Status as of libradsec-0.0.1-dev (2011-02-28). +Status as of libradsec-0.0.2.dev (2013-01-25). * Build instructions -cd libradsec/lib sh autogen.sh -./configure +./configure #--enable-tls make - -examples/client -r examples/client-tls.conf blocking-tls ; echo $? +examples/client -r examples/client.conf blocking-tls; echo $? * Design of the API -- There are three usage modes - - You use the send and receive calls (blocking mode) - - You register callbacks and run the libevent dispatch loop (user - dispatch mode) - - You run your own event loop, using fd's for select and do the I/O - using the libradsec send/receive calls (on-your-own mode) -- Fully reentrant (FIXME: any issues with libfreeradius-radius?) +- There are three usage modes: + + - Application uses blocking send and receive calls (blocking + mode). This is typically fine for a simple client. + + - Application registers callbacks with libradsec and runs the + libevent dispatch loop (a.k.a. user dispatch mode). This would + probably how to implement a server or a proxy. + + - Application runs its own event loop, using fd's for select and + performs I/O using libradsec send/receive functions + (a.k.a. on-your-own mode). Might be useful for an application + which already has an event loop that wants to add RadSec + functionality. + +- Apart from configuration and error handling, an application + shouldn't need to handle TCP and UDP connections + differently. Similarly, the use of TLS/DTLS or not shouldn't + influence the libradsec calls made by the application. + +- Configuration is done either by using the API or by pointing at a + configuration file which is parsed by libradsec. + +- Fully reentrant. + +- Application chooses allocation regime. + +Note that as of 0.0.2.dev libradsec suffers from way too much focus on +the behaviour of a blocking client and is totally useless as a server. +Not only does it lack most of the functions needed for writing a +server but it also contains at least one architectural mishap which +kills the server idea -- a connection timeout (TCP) or a retransmit +timeout (UDP) will result in the event loop being broken. The same +thing will happen if there's an error on a TCP connection, f.ex. a +failing certificate validation (TLS). * Dependencies -- libfreeradius-radius -- no i/o used -- libconfuse -- libevent 2.0.x +Details (within parentheses) apply to Debian Wheezy. -* Functionality and quality -** Tested and verified +- libconfuse (2.7-4) + sudo apt-get install libconfuse-dev libconfuse0 +- libevent2 (2.0.19-stable-3) + sudo apt-get install libevent-dev libevent-2.0-5 +- OpenSSL (1.0.1c-4) -- optional, for TLS and DTLS support + sudo apt-get install libssl-dev libssl1.0.0 + +* Functionality and quality in 0.0.x ** Not well tested - reading config file -- short read -- short write -- basic tls support +- [TCP] short read +- [TCP] short write +- [TLS] basic tls support +- [TLS] preshared key support +- [TLS] verification of CN + ** Known issues -- leaking memory -- udp issues with libevent -- error stack is one entry deep +- error stack is only one entry deep +- custom allocation scheme is not used in all places + ** Not implemented -- client: udp (resending packets), access-challenge, read/write timeout -- custom allocation scheme used in all places -- server failover -- TLS: verify CNAME -- TLS preshared key support -- DTLS support +- dispatch mode (planned for 0.1) +- [client] server failover / RFC3539 watchdog (planned for 0.1) +- [server] support (planned for 0.2) +- [client] TCP keepalive +- on-your-own mode +- [DTLS] support + +* Found a bug? +Please report it. That is how we improve the quality of the code. + +If possible, please build the library with DEBUG defined (CFLAGS="-g +-DDEBUG") and reproduce the problem. With DEBUG defined, lots of +asserts are enabled which might give a hint about what's gone wrong. + +Running the library under gdb is another good idea. If you experience +a crash, catching the crash in gdb and providing a backtrace is highly +valuable for debugging. + +Contact: mailto:linus+libradsec@nordu.net