kcaldav is a simple, safe, and minimal CalDAV server running on the BCHS software stack.
This repository consists of bleeding-edge code between versions: to keep up to date with the current stable release of kcaldav, visit the website. The website also contains canonical installation, deployment, examples, and usage documentation.
What follows describes using the bleeding-edge version of the system.
To use the bleeding-edge version of kcaldav (instead of from your system's packages or a stable version), the process it the similar as for source releases.
Begin by cloning or downloading. Then configure with
make (BSD make, so it may be
bmake on your system),
make install (or use
doas, if applicable).
If not done yet, optionally create a Makefile.local to override values in Makefile for your target file-system.
./configure make install make installcgi
The database hasn't updated in a long, long time, so there are no special commands for updating it. When updates do happen, I'll work out a process for doing so.
To create the database for initial use (or to manage it), follow kcaldav.passwd(1).
Regression and fuzzing
To contribute to kcaldav, write regression tests!
Right now, the regression suite only parses valid iCalendar files from ical4j, but in no way makes sure that the information has been properly parsed. Same with the CalDAV tests. To run these:
A major missing component is a series of regression tests that actually makes sure that parsed content is sane.
Most of the critical infrastructure can also be run through AFL. To do this, run:
make clean make afl CC=afl-clang
afl-gcc instead---it shouldn't matter. This installs AFL-built
binaries into the afl directory. To run these on the iCalendar
cd ical sh ./dict.sh # Generates dictionary files. afl-fuzz -i in -x dict -o out -- ../test-ical @@
cd caldav afl-fuzz -i in -o out -- ../test-caldav @@
I'd love for more tests on the server infrastructure itself, but am not sure how to effect this properly.
The source code is laid out fairly consistently and easily.
The database interface is db.h, manipulating the schema in kcaldav.sql. This is used by server and by the built programs and manages users, collections, resources, proxies, etc. It internally uses the libkcaldav.h functions. It is implemented in db.c.
The command-line utility is the standalone kcaldav.passwd.c.
The portability glue throughout the system (e.g.,
config.h, etc.) is managed by
All sources use the ISC (like OpenBSD) license. See the LICENSE.md file for details.