Many fixes and additions

* NAMES and WALLOPS command
* -cloak option
* -v renamed to -verbose
* -passwords renamed to -passwd
* -debug option prints traffic messages
* without -verbose only startup/shutdown and error messages are printed
* -timestamped option provides timestamps in printed messages, as
  earlier. No timestamps is useful for running under daemontools
* passwords are stored in SHA256-hashed format
* state files replaced with state directory with files
* removed many unnecessary pointers and locks
* graceful shutdown with all clients notification
* fixed time structure printing in log files, instead of short human
  readable timestamp
* PART is sent to the user itself, to notify his client about leaving
* log messages are printed to stdout, instead of stderr, for
  friendliness with daemontools logger
* ability to configure newly created directories and files with
  -perm-state-dir, -perm-state-file, -perm-log-file
This commit is contained in:
Sergey Matveev 2020-11-06 20:10:06 +03:00
parent def58d0f49
commit b7fb219307
13 changed files with 998 additions and 872 deletions

62
README
View file

@ -10,7 +10,7 @@ It does not aim to replace full featured mass scalable IRC networks:
* It can not connect to other servers. Just standalone installation
* It has few basic IRC commands
* There is no support for channel operators, modes, votes, invites
* There is no support for channel operators, many modes, votes, invites
* No ident lookups
But it has some convincing features:
@ -19,8 +19,8 @@ But it has some convincing features:
* Single executable binary
* No configuration file, just few command line arguments
* IPv6 out-of-box support
* Ability to listen on TLS-capable ports
* Optional channel logging to plain text files
* Ability to additionally listen on TLS-capable ports
* Optional channels logging to plain text files
* Optional permanent channel's state saving in plain text files
(so you can reload daemon and all channels topics and keys won't
disappear)
@ -28,35 +28,42 @@ But it has some convincing features:
Some remarks and recommendations related to it's simplicity:
* Use either nohup or similar tools to daemonize it
* Just plain logging on stderr, without syslog support
* Use daemontools to daemonize, setuid/gid it
* Just plaintext logging to stdout, without syslog support -- use
daemontool's multilog
SUPPORTED IRC COMMANDS
* PASS/NICK/USER during registration workflow
* PING/PONGs
* NOTICE/PRIVMSG, ISON
* AWAY, MOTD, LUSERS, WHO, WHOIS, VERSION, QUIT
* AWAY, MOTD, LUSERS, NAMES, WHO, WHOIS, VERSION, WALLOPS, QUIT
* LIST, JOIN, TOPIC, +k/-k channel MODE
USAGE
Just execute goircd daemon. It has following optional arguments:
-hostname: hostname to show for client's connections
-bind: address to bind to (:6667 by default)
-motd: absolute path to MOTD file. It is reread every time
MOTD is requested
-logdir: directory where all channels messages will be saved. If
omitted, then no logs will be kept
-statedir: directory where all channels states will be saved and
loaded during startup. If omitted, then states will be
lost after daemon termination
-tlsbind: enable TLS, specify address to listen on and path
-tlspem to PEM file with certificate and private key
-passwords: enable client authentication and specify path to
passwords file
-v: increase verbosity
-hostname: hostname to show for client's connections
-bind: address to bind to (:6667 by default)
-cloak: cloak user's host with the given hostname
-motd: absolute path to MOTD file. It is reread every time
MOTD is requested
-logdir: directory where all channels messages will be saved. If
omitted, then no logs will be kept
-statedir: directory where all channels states will be saved and
loaded during startup. If omitted, then states will be
lost after daemon termination
-tlsbind: enable TLS, specify address to listen on and path
-tlspem: to PEM file with certificate and private key
-passwd: enable client authentication and specify path to
passwords file
-timestamped: enabled timestamps for stderr messages
-verbose: increase verbosity
-debug: also show traffic messages
-perm-state-dir: permission (before umask) for newly created state directory
-perm-state-file: permission (before umask) for newly created state file
-perm-log-file: permission (before umask) for newly created log file
TLS
@ -69,10 +76,12 @@ AUTHENTICATION
You can turn on optional client authentication by preparing passwords
file and using the -passwords argument. Format of passwords file is:
login1:password1\n
login2:password2\n
login1:hex(sha256(password1))\n
login2:hex(sha256(password2))\n
...
You can get hashed password value using: echo -n password | sha256
LOG FILES
Log files are not opened all the time, but only during each message
@ -80,13 +89,8 @@ saving. That is why you can safely rename them for rotation purposes.
STATE FILES
Each state file has the name equals to room's one. It contains two plain
text lines: room's topic and room's authentication key (empty if none
specified). For example:
$ cat states/meinroom
This is meinroom's topic
secretkey
Room's state is created/saved when either topic or key is set. State is
a directory (room's name) with "topic" and "key" plaintext files.
LICENCE