Skip to main content

OpenBSD Authentication plugin for Radicale

This connects a radicale install to the local OpenBSD's authenticate(3) system that it is installed on. It means you can access your calendars with the same password you use for ssh and, perhaps, email, chat, etc.

Installation

This has only been tested against radicale>=3, which is not yet packaged for OpenBSD, so you must install that version manually (below) if it's not already.

Then install the plugin:

doas uv tool install 'radicale>=3' --with radicale-bsdauth

In order to function, you also need to grant radicale access to authenticate(3):

usermod -G auth _radicale

And then tell radicale to use it by editing /etc/radicale/config or /var/lib/radicale/.config/radicale/config to add

[auth]
type = radicale_bsdauth

And restart:

doas rcctl restart radicale

Install Radicale 3 on OpenBSD

(these have been tested for OpenBSD 7.7, but may need adjusting for a different version)

If you are currently using version 2, you should backup your calendars before proceeding because upgrading risks breaking something. It's unlikely, but possible.

doas -u _radicale tar -jcvf - /var/lib/radicale/collections | (umask 027; cat > radicale-collections.tgz) # for example

Then install radicale 3:

doas pkg_add uv
doas UV_TOOL_DIR=/usr/local/lib UV_TOOL_BIN_DIR=/usr/local/bin uv tool install "radicale>=3"

# Set up radicale's environment
# ( these rest of these steps would normally be handled by pkg_add(1) )
doas useradd -d /var/lib/radicale -m -L daemon -r 1..999 _radicale # if you don't already have this user

You need to put this in /etc/rc.d/radicale:

daemon="/usr/local/bin/radicale"
daemon_user="_radicale"

. /etc/rc.d/rc.subr

pexp=".*/python(3)? ${daemon}${daemon_flags:+ ${daemon_flags}}"
rc_reload=NO
rc_bg=YES

rc_cmd $1

and

doas chmod +x /etc/rc.d/radicale

Finally turn it on:

doas rcctl enable radicale
doas rcctl start radicale

You can monitor it with:

tail -f /var/log/daemon | grep radicale

Related Work

  • radicale-auth-PAM:

    OpenBSD's authenticate(3) is like Linux's PAM(8): a way to enable multiple ways to prove your identity, from passwords to LDAP to YubiKeys.

    So radicale-auth-PAM provides the same basic feature to radicale as radicale-bsdauth, and if you're using Linux you should use it.

Release files for radicale-bsdauth 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for radicale-bsdauth 1.1.0
File Size Uploaded
radicale_bsdauth-1.1.0.tar.gz 6.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for radicale-bsdauth 1.1.0
File Interpreter ABI Platform
radicale_bsdauth-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 10.2 kB

Release files / radicale_bsdauth-1.1.0.tar.gz

Download URL radicale_bsdauth-1.1.0.tar.gz
Size 6.0 kB
Tags Source
SHA-256 checksum
How to use checksums
d78fa6451b8a031f90957366e019c74dd692a5fa68aa9ef6be7fcf24f1351f1c
BLAKE2b-256 checksum
How to use checksums
a7ac61ac3264956e57fa6e81aec39b0c139589702cf2b6034f528d9ccac917dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / radicale_bsdauth-1.1.0-py3-none-any.whl

Download URL radicale_bsdauth-1.1.0-py3-none-any.whl
Size 4.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4bcc779e364a0c9d897e4291ecbbca1c5c267f0309cb06910ad354d18b090628
BLAKE2b-256 checksum
How to use checksums
9ce0ec3264b91e8477662a7521ae3740c99b1a2af34e86b1a45ed7232c7f0d4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page