1
0
mirror of https://github.com/osmarks/ngircd.git synced 2024-12-12 01:40:27 +00:00
Commit Graph

2298 Commits

Author SHA1 Message Date
Alexander Barton
7c90264f1f Enlarge buffer for log messages
For example, SSL/TLS certificate information can easily get longer than
256 characters. So enlarge the log buffer to 1 KB.
2024-01-06 16:21:01 +01:00
Alexander Barton
21c1751b04 Respect "SSLConnect" option for incoming connections
Don't accept incoming plain-text ("non SSL") server connections for
servers configured with "SSLConnect" enabled.

If "SSLConnect" is not set for an incoming connection the server still
accepts both plain-text and encrypted connections.

This change prevents an authenticated client-server being able to force
the server-server to send its password on a plain-text connection when
SSL/TLS was intended.
2024-01-06 16:21:01 +01:00
Alexander Barton
843cbfc0f3 Always initiate closing a connection on errors.
Always try to close a connection with errors immediately, but try hard
to avoid too much recursion.

Without this patch, an outgoing server connection could get stuck in an
"endless" state trying to write out data over and over again.

This tries to fix 04de1423eb.
2024-01-06 16:21:01 +01:00
Valentin Lorentz
0714466af8 Return ERR_NOTEXTTOSEND on empty PRIVMSG content
They are dropped further down the line anyway; and sending ERR_NOTEXTTOSEND
early matches other servers' behavior.
2023-09-17 22:25:40 +02:00
Alexander Barton
8fdb8f90b1 Merge branch 'katp32/master'
Thanks Katherine Peeters for the patch and pull request!

Closes #294.

* katp32/master:
  Improve documentation for --syslog
  Added command line flag to enable syslog
  Split NoSyslog from behaviour of NoDaemon
2023-09-17 21:37:45 +02:00
Alexander Barton
a106d18d7d Conf_Test(): Use yesno_to_str() instead of individual tests and output 2023-09-17 20:28:52 +02:00
Alexander Barton
a7f448e713 Channel autojoin: Add missing variable in --configtest output 2023-09-17 20:27:14 +02:00
Alexander Barton
232c7382de Silence compiler warning in Init_New_Client()
Use strdup() instead of pointless strndup() to fix the following
compiler warning:

client.c: In function ‘Init_New_Client’:
client.c:216:32: warning: ‘strndup’ specified bound 127 exceeds source size 5 [-Wstringop-overread]
  216 |                 client->away = strndup(DEFAULT_AWAY_MSG, CLIENT_AWAY_LEN - 1);
      |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2023-09-17 20:16:35 +02:00
Alexander Barton
30ba325dde Various fixes and enhancements for the "Autojoin" patch
- Bring sample-ngircd.conf and ngircd.conf.5 description in line.
- Fix configuration parsing, it always showed the 'Unknown variable
  "Autojoin"' error message, even when everything was perfectly fine.
- And fix a build error (at least on macOS with Apple Clang 14):
    login.c:234:3: error: call to undeclared function 'IRC_JOIN'; ISO
    C99 and later do not support implicit function declarations
    [-Wimplicit-function-declaration]
       IRC_JOIN(Client, &Req);
       ^
  The #include for the "irc.channel.h" header was missing!
- Remove a unused variable that caused a compiler warning:
    login.c:222:12: warning: unused variable 'n' [-Wunused-variable]
       size_t i, n, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan));
                 ^
- Add a explicit cast to fix a compiler warning:
    login.c:235:15: warning: assigning to 'char *' from 'const char[51]'
    discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
       Req.argv[0] = conf_chan->name;
                   ^ ~~~~~~~~~~~~~~~
2023-09-17 19:56:07 +02:00
Ivan Agarkov
cfd7d4288e Channel autojoin functionality 2023-09-16 12:40:33 +02:00
Alexander Barton
3b70f4ba0c 2023! 2023-08-03 14:22:53 +02:00
Alexander Barton
335ae4f0d0 Hide +i users on "WHOIS <pattern>"
Let's behave like most(?) other IRC daemons (at least ircd2.11) and hide
all +i users when WHOIS is used with a pattern. Otherwise privacy of
this users is not guaranteed and the +i mode a bit useless ...

Reported by Cahata on #ngircd, thanks!
2023-08-03 10:57:27 +02:00
Alexander Barton
63ad3b9acd Update the final "closing connection" message
Add some more information (nick name, user name, host name) and bring it
in line with some other implementations (at least ircd2.11 and Hybrid).
2023-07-18 11:45:01 +02:00
Alexander Barton
0035e0d778 Fix RPL_INVITING message: It must originate from the server
All numeric replies must originate from an IRC server, never from a
client. So fix the RPL_INVITING message!

Thanks tommyrot for reporting this!

Closes #307.
2023-07-18 11:42:07 +02:00
Alexander Barton
0f90a059b6 Enhance log messages for refused connections 2023-07-05 11:03:02 +02:00
Alexander Barton
50114cd017 Add "+DEBUG" to the version string only when configured with --enable-debug
The debug log messages are always available and a runtime option (since
commit c7de505c), but the assert()'s are only active when ngIRCd was
configured with the "--enable-debug" option.

So only add "+DEBUG" to the version string when the latter is the case.
2023-01-02 23:51:15 +01:00
michi
c7de505c91 Make the debug loglevel always available
This basically means to unifdef DEBUG in (almost) all places.
We keep it in src/portab/portab.h so DEBUG stays available to
enable assert(). Also add a comment about this.
2023-01-02 22:39:16 +01:00
Alexander Barton
8e9c789ae1 Better validate MODE +k & +l parameters and return errors
Implement new numeric ERR_INVALIDMODEPARAM_MSG(696) and:

- Reject channel keys with spaces and return ERR_INVALIDMODEPARAM_MSG;
  This was possible until now and resulted in garbled IRC commands later.
- Reject empty channel keys and return ERR_INVALIDMODEPARAM_MSG;
  This was possible until now and resulted in garbled IRC commands later.
- Return ERR_INVALIDMODEPARAM_MSG when user limit is out of bounds;
  This was silently ignored until now.

Closes #290. Thanks Val Lorentz for reporting it!
2023-01-02 22:32:16 +01:00
Alexander Barton
3c9c54989e Channel modes +k & +l: Always report an error when a parameter is missing
This relates to #290 and considerations which errors to show when: and I
think it is the better approach to give feedback instead of silently
failing.

Note that this code path is also used when handling modes of channels
defined in "[Channel]" blocks in configuration files: in this case the
client is the local server and we can't send messages to it, because it
has no socket connection! Therefore we need those "is_machine" checks
and log an error im this case.
2023-01-02 21:48:42 +01:00
Alexander Barton
0ea1715d00 Refactor Channel_Mode(), get rid of some nesting
No functional changes.
2023-01-02 21:25:28 +01:00
michi
24f956abf7 Allow ircops to use WHO on any channel. 2023-01-02 21:17:29 +01:00
Alexander Barton
55744b1863 Refactor join_send_topic() into IRC_Send_Channel_Info() and use it for JOIN and NJOIN handlers
This reduces code duplication and brings the order of messages on JOIN
and NJOIN in line.

Fixes #288.
2022-12-27 16:42:06 +01:00
ewired
5ef1a657f4 Send NAMES list and channel topic to NJOIN'ed users
Send the NAMES list and channel topic to users "forcefully" joined to a
channel using NJOIN, like they joined on their own using JOIN.

Closes #288.
2022-12-26 17:45:44 +01:00
Alexander Barton
3e23f7d2c3 Channel mode setting: The local server is allowed to work on local channels
Don't forbid the local server to change modes on local channels: this
happens when overriding modes on local (&) channels in the server
configuration file, for example, and is perfectly fine.

Without this patch, the server worked as expected but showed critical
error messages for each local channel in its configuration file:

  "Got remote MODE command for local channel!? Ignored."
2022-12-26 17:32:59 +01:00
Alexander Barton
56ed5c90ad Spelling fixes, mostly in file comments 2022-12-25 15:16:31 +01:00
hello-smile6
7b30c352a1 Use "||" instead of "|" 2022-12-17 14:54:55 +01:00
9pfs
ea7ad914c8 Fix gline/kline with cloaked hostnames 2022-12-17 14:54:55 +01:00
Jules Maselbas
93e36555e3 Convert uses of Log(LOG_DEBUG, ...) to LogDebug() 2022-12-17 14:52:44 +01:00
Katherine Peeters
dc412a450e
Improve documentation for --syslog 2022-11-01 16:21:56 -07:00
salaaad2
b0caf5984e fix typo in conn.c 2022-11-01 17:38:38 +01:00
Katherine Peeters
8f6d04095b
Added command line flag to enable syslog
This allows -y / --syslog to be used to override -n / --nodaemon disabling it
2022-10-29 21:46:46 -07:00
Katherine Peeters
2debc2e833
Split NoSyslog from behaviour of NoDaemon
Allows syslog to be enabled/disabled seperately from daemonization
2022-10-29 21:33:18 -07:00
Alexander Barton
79ffa9132b 2022 =:)
Happy new year!
2022-01-01 16:05:09 +01:00
Alexander Barton
1db3447c90 Fix a possible race condition in Client_Introduce()
Conf_GetServer() can return NULL when the server introducing the client
had a write error for example, and is being disconnected.

So make sure that we have a valid server before calling Conf_NickIsService()!
2021-12-30 20:31:41 +01:00
Alexander Barton
2ff76d7f48 2021! :-)
Happy new year!
2021-01-01 15:38:26 +01:00
Alexander Barton
f3c89af845 Explicitely cast Conf_MaxPenaltyTime (time_t) to "long"
This fixes the following compiler warning, for example on OpenBSD:

  conf.c: In function 'Conf_Test':
  conf.c:391: warning: format '%ld' expects type 'long int', but argument
                       2 has type 'time_t'

Thanks to Götz Hoffart for reporting this!
2020-12-29 21:45:09 +01:00
Alexander Barton
d777ce6600 Don't set AI_ADDRCONFIG, even when it exists
Basically, the issue described in #281 is that the test suite uses the
IPv4 address 127.0.0.1 on an IPv6-only host. But this is the "safest"
thing to do in (almost) all other setups: relaying on DNS host names
makes things even more complex, as different systems map 127.0.0.1
differently (including the reverse lookup; that's why we switched to
127.0.0.1 back in 2014, see commit 3f807e1045).

But with AI_ADDRCONFIG set, on an IPv6-only host, we prevent 127.0.0.1
to get translated properly, even when the loopback interface has this
address configured! So don't set it any more.

The drawback is that the resolver possibly returns more addresses now,
even of an unsupported/not connected address family; but this shouldn't
do much harm in practice, as ngIRCd iterates over all returned addresses
while trying to establish an outgoing connection.

Closes #281.
2020-12-29 21:12:43 +01:00
Rolf Eike Beer
c7781cf7ef Fix typo in comment: operaor -> operator 2020-11-02 12:13:02 +01:00
Alexander Barton
2056de82ae Revert "Show allowed channel types in ISUPPORT(005) numeric only"
The ISUPPORT(005) numeric lists only channel prefixes which are listed
in the "AllowedChannelTypes" configuration option. And if this is the
empty string ("") for example, this now results in IRC clients assuming
"oh, no channel prefix characters at all, so no channels at all, so no
PRIVMSG can go to any channel" -- which is not the case when there are
pre-defined channel set up or other servers still having channels!

So "allowed channel types" != "supported channel types", and we always
have to list all supported ones in the ISUPPORT(005) numeric!

This reverts commit 4b7e8db418.

Closes #285.
2020-11-02 11:45:41 +01:00
Alexander Barton
5cf0eabd84 Test suite: Wait 2 seconds after reloading the daemon
On reload, all listening ports are closed, configuration updated, and
then opened again. Which leads to subsequent tests running while the
daemon isn't listening on any ports, and that's why the tests fail.

The "proper" way whould be to loop and check for open ports, but waiting
is what the start-server.sh script does right now, so stick with this in
reload-server.sh for now as well.

This fixes the issue, at least on my RaspberryPi ...

Closes #280.
2020-11-01 17:25:39 +01:00
Alexander Barton
07cb8ed9ae Don't send invalid CHANINFO commands when no key is set
It can happen that a channel is +k, but no key is set: for example by
misconfiguring a pre-defined channel. In this case, ngIRCd sent an
invalud CHANINFO command ("CHANINFO #test +Pk  0 :'", note the unset
key represented by the two spaces) to its peers.

Fix this and enhance the CHANINFO documentation.
2020-06-11 16:45:30 +02:00
Alexander Barton
d697de3186 IRC_SQUIT(): Fix use-after-free when unregistering the sending client 2020-05-26 00:05:22 +02:00
Alexander Barton
02cf31c0e2 IRC_SERVER: Make sure that the client sent a prefix
The SERVER command is only valid with a prefix when received from other
servers, so make sure that there is one and disconnect the peer if not
(instead of crashing ...).

This obsoletes PR #275.

Thanks Hilko Bengen (hillu) for finding & reporting this as well for the
patch & pull request! But I think this is the "more correct" fix.
2020-05-25 23:51:00 +02:00
Alexander Barton
430bb22376 Enhance debug logging for PONG commands
Distinguish between expected and unexpected PONG commands.
2020-05-25 23:30:07 +02:00
Alexander Barton
dc6807338e Fix PING-PONG handling when processing backlog in read buffers
Prior to this commit, the PONG wasn't registered correctly, becauuse the
"last ping" time was set to time(NULL), which could be bigger than the
"last data" time stamp, for example when handling the read buffer took
more than 1 second -- and this resulted in the PONG time out kicking in
effectively disconnecting a newly linked server for example, because
ngIRCd thought it was still waiting for a PONG: last data < last ping.

Now the "last ping" value has three possible values:

    0: new connection, no PING, no PONG so far.
    1: got a PONG, no longer waiting for a PONG.
  <t>: time stamp of last sent out PING command.
2020-05-25 22:59:58 +02:00
Alexander Barton
0d503945cb Revert "Set the "last data" time to "last ping" time when updating the latter"
This patch completely broke the PING-PONG logic: now ngIRCd never
disconnects any stale peers but keeps sending out PINGs over and over
again ...

The real issue (server disconnects right after connect) will be fixed in
the next commit, but let's revert to the somewhat "half-broken but
'known' state" first ...

This reverts commit 79a917f954.
2020-05-25 22:59:00 +02:00
Hilko Bengen
bae68eb612 testsuite: Add missing files to EXTRA_DIST
26~rc1 as extracted from tarball cannot be built/tested with SSL
support because of a missing script and certificates.
2020-05-22 17:23:42 +02:00
Alexander Barton
fcf2874a9d Allow more characters per line in MOTD and help text files
Change the line buffer in the Read_TextFile() function from 127 to
COMMAND_LEN (=512) bytes. Lines can't even get that long, because they
have to be prefixed before being sent to the client, so this is a sane
maximum.

This allows for even more "fancy" and "wider" MOTDs :-)

Closes #271.
2020-05-07 18:10:41 +02:00
Alexander Barton
4b7e8db418 Show allowed channel types in ISUPPORT(005) numeric only
Don't show the static list of all possibly available channel types ...

Closes #273.
2020-05-07 18:03:06 +02:00
Alexander Barton
21f33e5911 SSL test server: Use port 6790, like "test server #2"
Don't use the "standard" IRC SSL port 6697, as this easily collides with
real (ng)IRCd instances running on the same machine.

And by reusing port 6790, which is already used by the "test server #2",
we don't need any other port than the test suite already uses.
2020-05-07 00:02:00 +02:00