FUD(8)

πŸ’– FUD(8) β€” the Cyrus IMAP manual, but make it slay πŸ’–

okay bestie, sit down, hydrate, because we're about to talk about fud, the long-lived datagram daemon from the Cyrus IMAP docs. yes it's a Unix manual page. yes it's still giving group chat. we move.


✨ NAME ✨

fud β€” Cyrus IMAP documentation, and also: it hands out info about user mailboxes, like a lil gossipy birdie 🐦


🌸 SYNOPSIS 🌸

fud [ -C config-file ] [ -U uses ] [ -T timeout ] [ -D ]

πŸ¦‹ DESCRIPTION πŸ¦‹

so fud is a long lived datagram daemon that gets started from master. its whole thing β€” its main character job β€” is spilling the tea about:

  • when a user last read their mail πŸ‘€
  • when mail last arrived in a user's mailbox πŸ“¬
  • how many messages are recent for that user πŸ”’

it reads its config options out of the imapd.conf(5) file, unless you tell it otherwise with -C.

and bestie, hear me out: if fud is running on a Cyrus Murder frontend machine, it will automatically proxy any and all FUD requests to the appropriate backend server. no cap. it just handles it for you. πŸ’…


πŸŽ€ setting it up

to set up the FUD daemon, add this to your cyrus.conf:

fud           cmd="fud" listen="fud" prefork=1 proto="udp"

and this goes in /etc/services:

fud             4201/udp                        # Cyrus IMAP FUD Daemon

🧚 Client

okay so plot twist: there is no specific FUD client. but here's a lil demo of how one might access FUD. she's giving DIY energy:

#!/usr/bin/perl

use Socket;

print( "Enter fud hostname: " );
$hostname = <>;
chomp( $hostname );

print( "Enter username to query: " );
$username = <>;
chomp( $username );

socket( FUD, PF_INET, SOCK_DGRAM, getprotobyname( "udp" ) )
   or die( "failed to create udp socket: $!" );

$ipaddr = inet_aton( $hostname );
$portaddr = sockaddr_in( '4201', $ipaddr );

$fud_query = $username . '|user.' . $username;

send( FUD, "$fud_query", 0, $portaddr ) == length( $fud_query )
   or die( "failed to send fud query: $!" );

recv( FUD, $fud_response, 512, 0 )
   or die( "recv() failed: $!" );

print( "FUD responded: $fud_response\n" );

exit( 0 );

πŸ‘‘ OPTIONS πŸ‘‘

every single one of them, we are NOT skipping a single icon here:

  • -C config-file β€” use the config file config-file that you specified instead of the default imapd.conf(5). like bringing your own snack instead of eating the communal one πŸ“
  • -U uses β€” the max number of times the process should be used for new connections before it shuts down. default is 250. she has a limit, respect it.
  • -T timeout β€” how many seconds the process will wait for a new connection before shutting down. ok important ⚠️: a value of 0 (zero) will disable the timeout entirely. default is 60.
  • -D β€” run the external debugger specified in debug_command. πŸ›

🌈 FILES 🌈

  • /etc/imapd.conf, /etc/cyrus.conf

πŸ’€ BUGS πŸ’€

okay so these are the "bugs" and honestly they're barely bugs, but we're keeping the receipts:

  • though not really a bug, fud will silently ignore any requests that it does not consider valid. she's ghosting them, respectfully. πŸ™ˆ
  • also not really a bug: fud requires that the anonymous user has the 0 (zero) right on the mailbox in question. this is only a "bug" because 0 is not a standard IMAP ACL bit. iykyk 😭
  • fud is an experimental interface, meant to provide information to build a finger-like service around. eventually it should be superseded by a more standards-based protocol. so like… she's a phase. but a cute one. periodt.

⭐ SEE ALSO ⭐


🫢 AUTHOR 🫢

The Cyrus Team, Nic Bernstein (Onlight) β€” absolute legends, no notes πŸ’œ


1993–2026, The Cyrus Team


and that's the whole page bestie!! go forth, query those mailboxes, stay iconic ✨

this has been Cyrus IMAP 3.12.3, brought to you on Jul 15, 2026 β€” mwah, love u, bye πŸŽ€πŸ¦‹πŸ’…

πŸ“¦ where this page comes from