PRAYER.CF(5)
okay bestie, welcome to prayer.cf(5) β that's the manual page for the main Prayer config file, filed under LOCAL. She's long, she's detailed, and she's about to be your whole personality. Let's go. π
β¨
π NAME π
prayer.cf β main Prayer configuration file
That's it. Short name, huge impact. She ate. π
πΈ DESCRIPTION πΈ
prayer.cf is the configuration file of prayer(8) and prayer-session(8).
Like, that's the whole vibe. Both of those programs read this file. She's the main character and they're the supporting cast. π
π¦ SYNTAX π¦
okay so for the most part, prayer.cf is just option = value pairs. Simple. Clean. But some config items are more complex, because of course they are. π
All values may be enclosed in double quotes, which are stripped. Quotes must be used if a value contains a # character. Otherwise, everything following it is treated as a comment. Yes, everything. So if you forget those quotes, your carefully-typed value becomes a little gossip comment and vanishes. π
Any line can be folded using a \ character at the end of the line; any linear white space at the beginning of the next line is removed. So you can wrap long lines and it just works. Slay.
Simple options can be of the following types:
stringβ No particular restrictions. She's free. She contains multitudes. β¨pathβ A file or directory name. The configuration parser expands occurences of a few macros in settings of this type. Seeprefixandvar_prefixbelow. ποΈbooleanβ The following forms are interpreted as true:true,t, and1. The following forms are interpreted as false:false,nil,0. Capitalisation does not matter. So like, spell it however, she's not judging. π«Άnumberβ An integer number (sequence of digits 0-9), optionally immediately followed by a single letterK, causing the number to be multiplied by 1024, orMmultiplying it by 1024 Β· 1024.timeβ An integer number (sequence of digits 0-9) of seconds, optionally immediately followed by a single case-insignificant letters, which has no effect,m, causing the number to be multiplied by 60,h, multiplying it by 60 Β· 60, ord, for a multiple of 24 Β· 60 Β· 60.permβ A file permission mode; an octal number of exactly four digits, where the first digit must be0. Four digits, first one's a zero, no negotiations. π
β¨ OPTIONS β¨
prefix(string),var_prefix(string) β The values of these options can be referred to as$prefix(or${prefix}), and$var_prefix(or${var_prefix}), respectively, in settings of typepathin the rest of the file. Default: none. Need to be set only if referenced later. So like, if nobody's calling for her, she doesn't need to show up. πprayer_user(string),prayer_uid(number) β User name or ID tosetuid(2)to if started as root. Either, but not both, must be set and must not specify uid 0. Default: none.
fr fr, this one matters. Pick a name OR an ID, never both, and do not point her at uid 0. That's the whole point of dropping privileges, bestie. π
prayer_group(string),prayer_gid(number) β Group name or ID tosetgid(2)to if we start off as root. In addition, prayer callsinitgroups(3)ifprayer_useris set. Default: none.prayer_background(boolean) β Run prayer as background process. If true, prayer will return as soon as valid configuration is found. Default:truefile_perms(perm) β Create mode for new files. Default:0640ifprayer_uidorprayer_useris set, otherwise0644.directory_perms(perm) β Create mode for new directories. Default:0750ifprayer_uidorprayer_useris set, otherwise0755.check_directory_perms(boolean) β Check existing directories under${var_prefix}?
π¬ Mail server settings
imapd_server(string) β Specifies the default IMAP server(s) using libc-client syntax:
host[:port][/flag[/flag]...]
Multiple server specifications can be listed, separated by commas. Common flags are:
/sslβ Use SSL-on-connect (on port 993 by default)./tlsβ Force use of TLS (using STARTTLS on the normal IMAP port) to encrypt the session. Recommended if the server is remote, since otherwise a downgrade attack is possible./notlsβ Don't issue STARTTLS even if the server supports it. Recommended if the server is localhost./novalidate-certβ Don't check the integrity of the server certificate.
For the full list of flags, see naming.txt.gz in the current libc-client package.
imapd_user_map(path) β CDB lookup map overriding defaultimapd_serverlocation. For information on CDB, seeprefs_folder_name(string) β Name of Prayer user preferences folder on IMAP server.use_namespace(boolean) β Use IMAP NAMESPACE command to findpersonal_hierarchyandhiersep. Default:true.personal_hierarchy(string) β If not supplied by NAMESPACE. Default:"".hiersep(string) β If not supplied by NAMESPACE. Default:"/".dualuse(boolean) β Hint to Prayer that new mailboxes are dual use (i.e. can contain both mail and inferior mailboxes). Things will mostly work ifdualuseset to false on a server which supports it, but people will be unable to create children of newly created mailboxes without refreshing the view.
Default: false.
sieved_server(string) β Talk to Cyrus timsieved using MANAGESIEVE protocol. Syntax is similar toimapd_server, except the only recognised flag is/ssl.sieved_user_map(path) β Can be used to provide individualisedimapd_serversettings in the form of a CDB file.sieved_timeout(time) β Default timsieved timeout is 10 minutes
π Mail domain configuration
local_domainβ Define a valid local domain, and optionally the valid local parts in that domain. This is a special directive that can appear multiple times and does not use an equals sign:
local_domain domain [map]
Without map, local_domain simply defines a domain which will appear on the list visible to user preferences. With map, it also defines a list a CDB map file which defines valid entries in that domain; used for personal name expansion and checking for valid addresses: The keys are the valid local parts and the values are the corresponding full names of the users.
Default: A single entry which corresponds to default_domain.
return_path_domain(string) β Domain used in the return address given tosendmail(8). Default: the default domain.filter_domain_pattern(string) β A filter pattern which is equivalent to, or at least approximates the list of local domains. Default: the default domain.hostname(string) β Hostname is the canonical name for this particular system, used in session and icon URLs which are generated by Prayer. This is derived automatically usinggethostname(2)andgethostbyname(3)if no value is provided. However, there are situations, especially involving SSL certificates, where the default hostname may not be appropriate. The special value__UNDEFINED__here means the startup script or command line must provide a hostname using a--config-optionoverride or via the environment variablePRAYER_HOSTNAME. This is just a safeguard for systems which use DNS round robining to distribute load across a number of machines.hostname_service(string) β Host name common for all Prayer installations part of the same webmail service. (Only) useful for large installations using DNS round robin for load balancing (example:webmail.hermes.cam.ac.ukis an alias forwebmail[123].hermes.cam.ac.uk). This setting is used for two things: The user is redirected to this hostname after logging out, and HTTP requests are sanity checked against it in addition to the canonical hostname.
Default: none
fix_from_address(boolean) β suppresses the From address option from the Preferences and Roles screens. Default:false.lookup_rpasswd(path) β Path to a CDB file that maps arbitrary search keys to colon- or comma-separated lists of user names. Note: Keys must be lowercase; Prayer converts search strings to lowercase in order to provide case-insensitive lookup.lookup_rusername(path) β Path to a second CDB file that maps arbitrary search keys to colon- or comma-separated lists of user names.
If the user enters a valid and existing username according to getpwnam(3), Prayer does not search these first two CDB files, but skips directly to the second stage of looking up user information.
lookup_username(path) β Path to a CDB file that maps usernames to records consisting of the user's βregistered nameβ and his/her affiliation (department), separated by a vertical bar (|). Additionally, if a second vertical bar follows, the account is regarded as cancelled.
When presenting the search results, the usernames found are combined with the default_domain to form email addresses. It is not possible at this time to let users search for addresses in more than one domain using this facility.
lookup_fullname(path) β Path to a CDB file that maps usernames to βdisplay namesβ, possibly provided by the users themselves in some way. The display name of a user is used together with the email address in recipient fields
Note that all four lookup options must be set to valid CDB files for the local lookup to work, but more than one option may conceivably point to the same file.
ldap_server(string) β Name or address of LDAP server.ldap_base_dn(string) β Base DN to search. After binding anonymously, Prayer performs a one-level-scope search for entries with surname or mail attributes containing the search string. The following attributes are fetched and presented:uiddisplayNamecn(βregistered nameβ)ou(βaffiliationβ)mailtelephoneNumber
ldap_timeout(time) β Search timeout. Default:30s.
π HTTP and other frontend settings
use_http_port,use_https_portβ Define a single HTTP[S] port to bind to. You can define an arbitary list of ports of both kinds by using a series of separateuse_http_portanduse_https_portdirectives, with one port on each line. Syntax:
use_http_port [interface:]port
use_https_port [interface:]port
can be an IP (v4 or v6) address or a hostname, bestie. If you actually give it one, that string gets handed straight to getaddrinfo(3) to be resolved, and the first address that comes back is the one it binds to. Don't give it one and prayer(8) just binds to port on every single interface. π
ssl_default_port(number) β when a browser shows up over plain HTTP and HTTPS sessions are also on offer, Prayer puts a little warning on the login page. This is the port that warning links to for the SSL version of the service; normally it defaults to port443, or if that's not available, the first HTTPS port that's actually defined. Setssl_default_portand you override all that built-in logic. π
Lowkey you'll rarely need this now, because Prayer works out a suitable port by itself when you don't hand it one here. β¨
ssl_cert_file(path) β where your SSL certificate file lives (only used if SSL ports are defined). If you're serving SSL at all, this one is required. πssl_privatekey_file(path) β where your SSL private key file lives (only used if SSL ports are defined). Also required if SSL services are happening. ποΈssl_rsakey_lifespan(time) β the master server regenerates the shared RSA key on this interval. Default:15m. β³ssl_rsakey_freshen(time) β the RSA key stays fresh in a child process for this long after it's first actually used. Default:15m. π±ssl_session_timeout(time) β the SSL session cache TTL. Default:0, i.e. the SSL session cache isn't used at all. If you do use it, runprayer-ssl-prune(8)on the regular so stale session data gets purged out of the DBD database. π§Ήegd_socket(path) β path to the entropy gathering daemon socket. Give it one and it gets used in place of or in addition to/dev/urandom. π²contact_email(string) β the system administrator's email address. Heads up: this setting is currently not used. If you want support info visible to your users, go customise the templates instead. π§fatal_dump_core(boolean) β dump core on afatal()error. Default:false. πlog_debug(boolean) β turn on somewhat more verbose logging, mostly SSL-related stuff. Default:false. πfix_client_ipaddr(boolean) β the client has to connect from consistent IP addresses. Can be a useful security measure on a LAN. It is painful for dialup users, whose connections may just drop out on them. Default:false. πgzip_allow_nets(string),gzip_deny_nets(string) βprayer-session(8)gzip-compresses the pages it sends to clients only if all of these are true:- gzip compression was enabled at compile time,
use_gzipis set in the user's preferences,- the user agent is known to support
Content-Encoding: gzip, - the user agent asks for
Content-Encoding: gziporx-gzip, - the client's IP address appears in
gzip_allow_nets, or the client's IP address does not appear ingzip_deny_nets.
The format of both options is a sequence of ipaddr[/masklen] items, separated by colons and whitespace (colons and spaces both, so IPv6 addresses stay easy to parse). Leave masklen off and the item is read as a full host address. π¦
log_name_nets(string) β a network list in the exact same format asgzip_allow_netsabove. So that logging in isn't delayed,prayer-session(8)only does a reverse lookup of the remote address if that address matches this list. Default: empty, meaning no reverse lookups get performed at all. πΈlimit_vm(number) β a virtual memory limit slapped onto every process, so one runaway process can't take down the whole system. Seesetrlimit(2). Default: no limit. πhttp_max_method_size(number) β in theory Prayer copes with input of any size. In practice the incoming request has to be stored somewhere, and with no limits an attacker can eat all your memory and hand you a denial of service attack. This sets the maximum size of the initial line of an HTTP request. Default: no limit. π¬http_max_hdr_size(number) β the maximum for the headers associated with this request. π¨http_max_body_size(number) β the maximum for the HTTP payload. This is the most significant one in normal use. π¦draft_att_single_max(number) β max size of a single attachment when composing a mail. Default:0(unlimited). πdraft_att_total_max(number) β max size of all attachments put together. Default:0(unlimited). ππhttp_min_servers(number) β minimum number of preforkedprayer(8)HTTP servers. The master process forks new slave processes whenever the number of idle slaves drops below this, unless the total number of slaves would go overhttp_max_servers. Default:4. πhttp_max_servers(number) β maximum number of preforkedprayer(8)HTTP servers, counting both active and idle ones. The master process does not enforce any maximum on idle slave processes though β they have to bow out voluntarily, either by timing out or by serving their maximum number of connections. Default:64. π«Άhttp_max_connections(number) β maximum number of connections each frontend server will process. Default:0(no limit). πhttp_timeout_idle(time) β timeout for a (dirty) spare server waiting around for another HTTP connection. Default:30s. β±οΈhttp_timeout_icons(time) β timeout for an HTTP connection that last served static content. Default:10s. πΌοΈhttp_timeout_session(time) β timeout for an HTTP connection that last served a session URL, or that hasn't served anything yet. Default:60s. π°οΈhttp_cookie_use_port(boolean) β hand HTTP cookies to the browser asusername:port=valueinstead ofusername=value. This lets one client browser run simultaneous login sessions. Downside: it can leave a trail of cookies behind you. You probably don't want this long term β right now it's here for experimentation purposes only. πicon_expire_timeout(time) β how far into the future to set the HTTPExpires:field for static content. Default:7d. (By contrast, session URLs expire immediately: browsers really shouldn't be trying to cache this stuff, especially when it's coming in over HTTPS.) π§
π Session specific configuration π
session_idle_time(time) β the session switches into idle mode after this much time, and connections to IMAP and accountd servers get shut down. Default:0(idle mode disabled). π΄session_timeout(time) β the session terminates after this much idle time.0means the session never times out. Default:4h. βsession_timeout_compose(time) β the session terminates after this much idle time instead, when the last command wascomposeorsieve. It should probably not be set lower thansession_timeout. Default:0(always use the same timeout). βοΈstream_ping_interval(time) β ping the INBOX, Other, and Draft streams at this interval. Default:5m. π‘stream_checkpoint(boolean) β useCHECKPOINTinstead ofPINGto "ping" streams. Default:true. βstream_misc_timeout(time) β shut down the Postponed, Preferences and Transfer streams entirely after this much idle time, but only if idle mode doesn't beat us to it first. Default:0(disabled). πͺlog_ping_interval(time) βstat(2)the log files at this interval to see whether the target file has been renamed or removed.0smeansstat()the log file every single time something is logged. Default:5m. ποΈdb_ping_interval(time) β the interval at which to re-read the CDB files containing the local domain. Default:30m. ποΈrecips_max_msg(number) β maximum number of recipients per message. Default:0(unlimited). πrecips_max_session(number) β maximum number of recipients per session. If the limit gets hit andsending_block_diris defined, a file is automatically created insending_block_dir. Default:0(unlimited). π§Ύsending_allow_dir(path) β create an empty file named user in this directory to disablerecips_max_sessionfor that user. ποΈsending_block_dir(path) β create an empty file named user in this directory to disable outgoing email for that user (it's an automatic defense against phishing attacks). π«
πΈ Display specific configuration πΈ
login_banner(string) β used in the<title>and the heading of the login page. Default:"Webmail Service Login". π·οΈlogin_service_name(string) β used in the<title>and elsewhere to refer to the webmail system after the user has logged in. Default:"Prayer". πlogin_template(string) β the template to use on the login screen. π¨login_insert1_path(path) β optional file to include in the login page template (as$login_insert1). π§©login_insert2_path(path) β optional file to include in the login page template (as$login_insert2). π§©motd_path(path) β the file to use as the part of the login page immediately following the login form. πssl_encouraged(boolean) β if the user connects over unencrypted HTTP, don't show the login form on the start (/) page. A link to/login, where the form is still displayed, is still provided. Default:false. This is ignored ifssl_redirectorssl_requiredis true. πssl_redirect(boolean) β if the user connects over unencrypted HTTP, return a302redirect to the default SSL port. Only the start (/) page is redirected, and it may be possible to switch between http and https after logging in, subject to cookie rules. Default:false. βͺοΈssl_required(boolean) β return a403 Forbiddenerror if the user tries to access anything at all over unencrypted HTTP.ssl_redirectstill has effect, however. βlist_addr_maxlen(number) β the maximum number of characters to show from addresses on the mailbox list screen. Default:30. βοΈlist_subject_maxlen(number) β the maximum number of characters to show from the subject on the mailbox list screen. Default:30. βοΈchange_max_folders(number) β the maximum number of folders allowed in the quick folder change dropdown list. If there would be too many folders, the quick list is disabled altogether. Only folders that are expanded in the folder view get included. Default:20. πtemplate_path(path) β path to the uncompiled template sets (directories). Default:"../templates"(relative totmp_dir). πΊοΈtemplate_set(string) β the template set Prayer should use. Default:"xhtml_strict".template_use_compiled(boolean) β rock the templates that are baked right into the binary and straight-up ignoretemplate_path. Default:true.themeβ bestie, this one defines themes and their colors. It's semi-deprecated ngl π β the colours you set with this directive are only used by thexhtml_transitionaltemplate set. Thexhtml_stricttemplate set, and the login screen too, use CSS instead. But you still gotta tell Prayer which themes are available. That part's non-negotiable.
Syntax:
theme name description description
theme name element colour
theme name element colour
...
description is the label that shows up in the theme dropdown lists on the General Preferences page.
element is one of fgcolor, fgcolor_link, bgcolor, bgcolor_banner, bgcolor_row1, bgcolor_row2, bgcolor_status, bgcolor_status_none, fgcolor_quote1, fgcolor_quote2, fgcolor_quote3, and fgcolor_quote4. The first three aren't used by any standard template set, but they're available if you want them. Please go study the templates to understand how the rest are used π.
colour is any valid HTML %Color value. Remember that strings containing hash marks need to be quoted. Yes really. Quote them.
theme_default_main(string) β the name of the default theme.theme_default_main(string) β the name of the default theme in help mode.
ok so yes, this manpage genuinely lists theme_default_main twice with two different descriptions. That's not me glitching, that's just what it says. Keep both in mind. π«Ά
use_ispell_languageβ the ispell languages we want to support, each with some descriptive text for the preferences screen. Syntax:
use_ispell_language wordlist description
Example:
use_ispell_language british "British English"
π€οΈ Paths etc. π€οΈ
aspell_path(path) β where the Aspell binary lives. This takes precedence overispell_path.bin_dir(path) β where the Prayer binaries live (prayer(8)andprayer-session(8)). Default: none. Must be set. No exceptions, bestie.icon_dir(path) β where the icon files live. Default: none. Must be set.ispell_path(path) β where the Ispell binary lives. Backwards compatibility only, so it's giving legacy energy.log_dir(path) β where the log files live. Default: none. Must be set.pid_dir(path) β where the PID files for theprayerandprayer-sessionmaster processes live. Default: none. Must be set.sendmail_path(path) β where thesendmailbinary lives, or a drop-in replacement like Exim. Default:/usr/lib/sendmail.socket_dir(path) β where the unix domain sockets live that connectprayer(8)toprayer-session(8).socket_split_dir(boolean) β split the socket directory into 64 subdirs keyed on the first letter of the sessionID. And the cute part? You can switch back and forth without moving sockets or killing sessions, becauseprayer(8)tries both variants. So really this setting just controls whereprayer-session(8)creates the socket files. Default:false.init_socket_name(string) β the name of the Unix domain socket (insidesocket_dir) used for the initial handshake between theprayerandprayer-sessionprocesses when a user logs in. Default: none. Must be set.ssl_session_dir(path) β where the SSL session cache database lives. Default: none. Must be set β even if the SSL session cache is disabled. Yes, even then. It's required regardless π .static_dir(path) β where other static files (CSS) live. Default: none. If you leave it unset, Prayer will not serve CSS files at all.tmp_dir(path) β since this is the directory both daemonschdir(2)to at startup, it's where temporary files get written β like attachments and folders that are in transit during upload and download operations. Core files also end up here, fun. Default: none. Must be set.
π Defaults for user preferences π
confirm_logout(boolean) β confirmation dialogue when the user logs out. Default:true.confirm_expunge(boolean) β confirmation dialogue when the user hits expunge. Default:false.confirm_rm(boolean) β confirmation dialogue when the user deletes a mail folder or directory. Default:true.default_domain(string) β default domain for outgoing mail. Defaults to thehostnamesetting.expunge_on_exit(boolean) β expunge deleted messages from the inbox automatically on logout. Default:false.html_inline(boolean) β showtext/htmlbodyparts inline. The content gets scrubbed to remove dangerous tags. If this is set,text/htmlwill be displayed in preference totext/plain. Default:true.html_remote_images(boolean) β show remote images automatically. If this is not set, "Show unsafe images" links will appear on pages showing HTML mail. Default:false.html_inline_auto(boolean) β same as above, but fortext/*bodyparts which start with"<HTML>"(case-independent!). Does anyone other than spammers actually use this? π Default:true.ispell_language(string) β language for ispell. Default:"british".msgs_per_page(number) β number of messages per screen on the message list screen. Default:12.msgs_per_page_max(number) β the maximum value users are allowed to setmsgs_per_pageto. Default:50.msgs_per_page_min(number) β the minimum value users are allowed to setmsgs_per_pageto. Default:4.abook_per_page(number) β number of addressbook entries per page on the address book list screen. Default:12.abook_per_page_max(number) β the maximum value users are allowed to setabook_per_pageto. Default:50.abook_per_page_min(number) β the minimum value users are allowed to setabook_per_pageto. Default:4.maildir(string) β mail directory in the user's account. Default:"". Typically needed with uw-imap. Typically not needed with e.g. Dovecot or Courier.suppress_dotfiles(boolean) β suppress dotfiles from the directory listing. Default:true.postponed_folder(string) β name of the folder where messages to be sent later β a.k.a. drafts β are stored. Default:"postponed-msgs".sent_mail_folder(string) β name of the folder for sent mail. Default:"sent-mail".small_cols(number) β width of the small compose textarea in columns. Default:80.small_rows(number) β height of the small compose textarea in lines. Default:18.large_cols(number) β width of the large compose textarea in columns. Default:80.large_rows(number) β height of the large compose textarea in lines. Default:32.sort_mode(string) β default sort mode for the mailbox list. One ofARRIVAL,DATE,FROM,TO,CC,SIZE,SUBJECT,REFERENCES,ORDEREDSUBJECT. Default:ARRIVALis most efficient, and recommended.sort_reverse(boolean) β favour reverse sort rather than normal sort order? Default:false.abook_sort_mode(string) β default sort mode for the addressbook list. One of:ORDERED,ALIAS,NAME,COMMENT,ADDRESS. Default:ORDERED.abook_sort_reverse(boolean) β favour reverse sort rather than normal sort order? Default:false.line_wrap_len(number) β wrap lines at this many characters. Default:76.line_wrap_advanced(boolean) β enable advanced line wrap options? Default:false.line_wrap_on_reply(boolean) β line wrap automatically on reply. Default:true.line_wrap_on_spell(boolean) β line wrap automatically on spell check. Default:true.line_wrap_on_send(boolean) β line wrap automatically on send. Default:true.preserve_mimetype(boolean) β send the message Content-Type through to the browser. If false, Content-Type is replaced withβapplication/octet-streamβ, which should force download to local disk, bypassing any automatic processing of bodyparts by the User-Agent. Unclear at the moment whether we need to do this, or whether this should be done selectively based on the User-Agent. Default:true.use_sent_mail(boolean) β make the "Save copy" checkbox on the compose screen checked by default. Default:true.use_mark_persist(boolean) β use persistent mark for aggregate operations. Default:false.use_search_zoom(boolean) β zoom automatically after a successful search. Default:true.use_agg_unmark(boolean) β unmark messages after a successful aggregate operation. Default:true.use_icons(boolean) β use icons: may be overridden by the value of the User-Agent. Default:true.use_welcome(boolean) β enable the welcome screen. Default:true.use_tail_banner(boolean) β duplicate the banner icons (toolbar) at the bottom of the Message screen. Default:true.
π Hidden preferences π
The following options are internally handled as user preferences, but the Preferences screen no longer provides any means for changing them. So they're just... vibing in there. Iykyk.
use_cookie(boolean) β use an HTTP cookie for the Session-ID, if the browser supports cookies. If this is disabled, or the user rejects the cookie, then the session-ID is stored in the URL instead. Default:true.use_substitution(boolean) β use page substitution rather than HTTP redirects. Faster, but the URLs that get generated are less predictable. Page substitution and the browser history mechanism don't coexist well at the moment (Prayer would need to cache the final page value for each substitution event).
Default: true.
use_http_1_1(boolean) β allow HTTP/1.1, if the browser supports it. Default:true.use_pipelining(boolean) β allow HTTP/1.1 pipelining, if the browser supports it. Default:true.use_persist(boolean) β allow persistent HTTP/1.1 and HTTP/1.0 persistent connections, if the browser supports them. Default:true.use_short(boolean) β allow short URLs, if the browser supports them. Default:true.use_gzip(boolean) β allow gzip compression, if the browser supports it. Default:true.
β¨ SEE ALSO β¨
π AUTHORS π
This manual page was put together by Magnus Holmgren <holmgren@debian.org> using documentation written by David Carter <dpc22@cam.ac.uk>.
and that's the whole page, bestie π The Prayer Webmail Interface, dated 17 August 2008, living in section PRAYER.CF(5). Go forth and configure, you absolute icon πβ¨π¦
π¦ where this page comes from
- ubuntu jammy: prayer 1.3.5-dfsg1-8build2
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms