wm: ticl

Clone

clone: git://cloud9p.org/mkf/ticl gits://cloud9p.org/mkf/ticl
push: hjgit://cloud9p.org/mkf/ticl

Last commit

c280d99d – mkf <mkf@cloud9p.org> authored on 2023/09/26 00:24
de-hardcode(?) wnick

About

======================================================================
WARNING: This program is still in progress, use it at your own risk.
======================================================================

ticl - tiny irc channel linker
------------------------------

ticl is a very small and simple multi-network irc channel linker.

WARNING: If you use this program on networks that you are not allowed
	 then your nick or IP may get banned. This is because this
	 program opens multiple simultaneous connections to the server
	 and most networks have some limit on each IP.


Working
-------

- A bot named 'linker' joins each given channels and clones each user
  of its channel on other channels and relays the user's messages
  received from its channel to the clones on other channels.

- If a user on a channel joins(JOIN), quits(QUIT), leaves(PART), or
  changes their nick(NICK), the linker attempts to emulate the same
  action with the respective clones on the other channels.

- Each clone's nick is followed by the original user's channel symbol
  (enclosed in square brackets).

- If the nick is already taken by another user/clone on that network,
  an additional suffix '_' is added until the nick is accepted on that
  network.

- Nick of users or clones that are longer than 16 characters are
  ignored as some networks only allow nicknames of length 16 or less.


Limitations
-----------

- This program will not work on any channel that requires any kind of
  registration or verification as clones cannot register.

- Linking the same channel with a different name is undefined and can
  create an infinite loop of clones.

- Linking more than one channel from a network is undefined.

- No spam protection.

- No support for TLS/SSL.


Features
--------

- Written in OpenBSD's C style(9).

- One clone per user on each channel.


Dependencies
------------

- C compiler (C89)

- C POSIX library

- libbsd (on non-BSD operating systems)

- POSIX make (optional)


Installation
-------------

Edit config.mk for your system.

Then to compile and install, run:

	$ make clean install

To compile without POSIX make on BSD systems, run:

	$ cc -o ticl main.c htable.c

Or on non-BSD systems, run:

	$ cc -o ticl main.c htable.c -lbsd


Usages
------

This program uses FIFO special file (a named pipe) for configuration.

To start the program:

	$ ticl <fifo>

	# Example:

	$ ticl in

	# This will create a 'in' FIFO file if it doesn't already exist.

Or, to start the program with the log printing to a file:

	$ ticl <fifo> > <logfile> 2>&1

	# Example:

	$ ticl in > log 2>&1

	# This will create a 'log' file and print everything to the file.

Or, to start and run the program in background:

	$ ticl <fifo> > <logfile> 2>&1 &

	# Example:

	$ ticl in > log 2>&1 &

To add a channel:

	$ echo 'netadd <name> <symbol> <host> <ip> <channel>' > <fifo>

	# Example, to link #test20 from libera and #test21 from ircnow:

	$ echo 'netadd libera L irc.libera.chat 6667 #test20' > in
	$ echo 'netadd ircnow N irc.ircnow.org 6667 #test21' > in

To remove a channel from the link:

	$ echo 'netdel <name>' > <fifo>

	# Example, to unlink channel ircnow:

	$ echo 'netdel ircnow' > in

To list all the users:

	$ echo users > <fifo>

To close the program:

	$ echo exit > <fifo>


SSL/TLS Support
---------------

On Openbsd (relayd):

	Edit /etc/relayd.conf:

		table <libera> { irc.libera.chat }
		table <ircnow> { irc.ircnow.org }

		protocol "irctls" {
			tcp { nodelay, sack }
		}

		relay "libera" {
			listen on 127.0.0.1 port 31220
			protocol "irctls"
			forward with tls to <libera> port 6697
		}

		relay "ircnow" {
			listen on 127.0.0.1 port 31221
			protocol "irctls"
			forward with tls to <ircnow> port 6697
		}

	To enable and start:

		$ doas rcctl enable relayd
		$ doas rcctl start relayd

On other platforms (stunnel):

	Edit /etc/stunnel/stunnel.conf:

		pid = /etc/stunnel/pid

		[libera]
		client = yes
		accept = 127.0.0.1:31220
		connect = irc.libera.chat:6697
		checkHost = irc.libera.chat
		verifyChain = yes
		CApath = /etc/ssl/certs
		OCSPaia = yes

		[ircnow]
		client = yes
		accept = 127.0.0.1:31221
		connect = irc.ircnow.org:6697
		checkHost = irc.ircnow.org
		verifyChain = yes
		CApath = /etc/ssl/certs
		OCSPaia = yes

	Then enable and start stunnel service.

Now to connect:

	$ echo 'netadd libera L 127.0.0.1 31220 #test20' > in
	$ echo 'netadd ircnow N 127.0.0.1 31221 #test21' > in


Community / Bug Report
----------------------

Email:	libredev@ircforever.org (expect late response)
IRC:	#playground on irc.ircnow.org:6697 (TLS)


License
-------

This work is dedicated to the public domain.
See COPYING file for more information.


Note
----

This work is free software but please don't call it open source as the
Open Source Initiative (OSI) does not consider public domain software
as open source. https://opensource.org/node/878