kinda fork of catgirl irc client with bx's personal tweeks, original client: https://git.causal.agency/catgirl/
3d931d0f5a
catgirl needs: - "stdio tty" at all times - "rpath inet dns" once at startup for terminfo(5) and ssl(8) - "proc exec" iff -R/restrict options is disabled - "rpath wpath cpath" iff -s/save or -l/log options is enabled Status quo: catgirl starts with the superset of all possible promises "stdio rpath wpath cpath inet dns tty proc exec", drops offline with "stdio rpath wpath cpath tty proc exec" and possibly drops to either of "stdio rpath wpath cpath tty", "stdio tty proc exec" or "stdio tty" depending on the options used. Such step-by-step reduction is straight forward and easy to model along the process runtime, but it comes with the drawback of starting with too broad promises right from the beginning, i.e. `catgirl -R -h host' is able to execute code and write to filesystems even though it must never do so according the (un)used options. Lay out required promises up front and pledge in two stages: 1. initial setup, i.e. fixed "stdio tty" plus temporary "rpath inet dns" plus potential "rpath wpath cpath" plus potential "proc exec" 2. final rutime, i.e. fixed "stdio tty" plus potential "rpath wpath cpath" plus potential "proc exec" This way the above mentioned usage example can never execute or write files, hence less potential for bugs and more accurate modelling of catgirl's runtime -- dropping "inet dns" alone in between also becomes obsolete with this approach. |
||
---|---|---|
scripts | ||
.gitignore | ||
LICENSE | ||
Makefile | ||
README.7 | ||
buffer.c | ||
catgirl.1 | ||
chat.c | ||
chat.h | ||
command.c | ||
complete.c | ||
config.c | ||
configure | ||
edit.c | ||
filter.c | ||
handle.c | ||
irc.c | ||
log.c | ||
ui.c | ||
url.c | ||
xdg.c |
README.7
.Dd May 4, 2021 .Dt README 7 .Os "Causal Agency" .\" To view this file, run: man ./README.7 . .Sh NAME .Nm catgirl .Nd IRC client . .Sh DESCRIPTION .Xr catgirl 1 is a TLS-only terminal IRC client. . .Ss Notable Features .Bl -bullet .It Tab complete: most recently seen or mentioned nicks are completed first. Commas are inserted between multiple nicks. .It Prompt: the prompt clearly shows whether input will be interpreted as a command or sent as a message. .It Split scroll: keeps the latest messages in view while scrolling. .It URL detection: recent URLs from a particular user or matching a substring can be opened or copied. .It Nick coloring: color generation based on usernames remains stable across nick changes. Mentions of users in messages are colored. .It Topic diffing: the modified portion of a channel topic change is highlighted. .It Ignore: visibility of filtered messages can be toggled. .El . .Ss Non-features .Bl -bullet .It Dynamic configuration: all configuration happens in a simple text file or on the command line. .It Multi-network: a terminal multiplexer such as .Xr screen 1 or .Xr tmux 1 (or just your regular terminal emulator tabs) can be used to connect .Nm to multiple networks. .It Reconnection: when the connection to the server is lost, .Nm exits. It can be run in a loop or connected to a bouncer, such as .Lk https://git.causal.agency/pounce "pounce" . .It CTCP: apart from .Sy ACTION , this protocol is useless at best and enables abuse at worst. .It Protocol coverage: IRCv3 extensions are implemented only where they contribute to the intended user experience. .It Cleartext IRC: TLS is now ubiquitous and certificates are easy to obtain. .El . .Sh INSTALLING .Nm requires ncurses and .Sy libtls , provided by either .Lk https://git.causal.agency/libretls/about LibreTLS (for OpenSSL) or by LibreSSL. .Nm and .Sy libtls may be packaged for your system. Check the Repology pages for .Lk https://repology.org/project/catgirl/versions catgirl and .Lk https://repology.org/project/libretls/versions libretls . . .Pp .Nm targets .Fx , .Ox , macOS and Linux. On .Ox , .Xr pledge 2 is used to limit system operations, and with .Nm Fl R , .Xr unveil 2 is used to limit filesystem access. . .Bd -literal -offset indent \&./configure make all sudo make install .Ed . .Pp If installing .Sy libtls manually to .Pa /usr/local , for example, make sure .Pa /usr/local/lib appears in .Pa /etc/ld.so.conf or .Pa /etc/ld.so.conf.d/* and be sure to run .Xr ldconfig 8 once the library is installed. Set .Ev PKG_CONFIG_PATH for .Nm ./configure to find it. .Bd -literal -offset indent PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure .Ed . .Pp The .Nm sandman wrapper is provided for macOS to stop and start .Nm on system sleep and wake. Install it as follows: .Bd -literal -offset indent make scripts/sandman sudo make install-sandman .Ed . .Sh FILES .Bl -tag -width "complete.c" -compact .It Pa chat.h global state and declarations .It Pa chat.c startup and event loop .It Pa irc.c IRC connection and parsing .It Pa ui.c curses interface .It Pa handle.c IRC message handling .It Pa command.c input command handling .It Pa buffer.c line wrapping .It Pa edit.c line editing .It Pa complete.c tab complete .It Pa url.c URL detection .It Pa filter.c message filtering .It Pa log.c chat logging .It Pa config.c configuration parsing .It Pa xdg.c XDG base directories .El . .Pp .Bl -tag -width "scripts/notify-send.scpt" -compact .It Pa scripts/chat.tmux.conf example .Xr tmux 1 configuration for multiple networks and automatic reconnects .It Pa scripts/sandman.m sleep/wake wrapper for macOS .It Pa scripts/notify-send.scpt .Xr notify-send 1 in AppleScript .It Pa scripts/chroot-prompt.sh name prompt wrapper for chroot .It Pa scripts/chroot-man.sh .Xr man 1 implementation for chroot .It Pa scripts/sshd_config .Xr sshd 8 configuration for public chroot .El . .Sh CONTRIBUTING The upstream URL of this project is .Aq Lk https://git.causal.agency/catgirl . Contributions in any form can be sent to .Aq Mt list+catgirl@causal.agency . For sending patches by email, see .Aq Lk https://git-send-email.io . . .Pp Monetary contributions can be .Lk https://liberapay.com/june/donate "donated via Liberapay" . . .Sh SEE ALSO .Xr catgirl 1 . .Pp IRC bouncer: .Lk https://git.causal.agency/pounce "pounce" . .Rs .%A June Bug .%T IRC Suite .%U https://text.causal.agency/010-irc-suite.txt .%D June 19, 2020 .Re . .\" To view this file, run: man ./README.7