Commit Graph
374 Commits
Author SHA1 Message Date
Alhuda Khan 8aef9873fc bouncedcc: refuse DCC requests from IRC aimed at loopback or link-local
The address in an incoming DCC CHAT/SEND is chosen by the remote IRC
user, and ZNC is the side that connects to it, relaying traffic to
whoever connects to the bounce listener. Refuse requests that point at
0/8, 127/8, 169.254/16, 224/3 or values above 32 bits (which
CUtils::GetIP would otherwise mask down to one of those).
2026-10-20 17:36:19 +05:30
Alhuda Khan 16908dc4aa utils: fix size_t underflow in FormatTime %f padding 2026-10-14 11:32:00 +05:30
RealKindOne f5c865015c listsockets: Add TODO comment and update test. 2026-10-01 20:00:11 -04:00
RealKindOne bc25a36972 listsockets: Fix 1970s date bug.
Fixes #1910
2026-10-01 15:26:10 -04:00
RealKindOne d6c2c32de8 Stop ZNC from prepending '#' if missing in join command.
Fixes #1794
2026-09-13 14:20:36 -04:00
RealKindOne 30d14d0841 Improve test coverage for clearbufferonmsg, crypt, ctcpflood, and watch.
Close #2038
2026-09-13 11:27:54 +01:00
RealKindOne cdf29c0dd4 awaystore: Fix NoSSL and GCC ASin build 2026-09-13 11:27:31 +01:00
RealKindOne ff65bc01fb awaystore: Modernize and add test. Fixed various bugs.
Fixed 'pass' command to save password in CBlowfish(MD5(...)) instead of plaintext.

Fixed 'away' command not updating with a new away message if already away.

Fixed default timer in SetArgsHelpText to match SetAwayTime().

Fixed broken 'Messages' command.

Fixed 'replay' command with IPv6

Fixes #815
2026-09-13 11:27:31 +01:00
RealKindOne 0b860b23bf Fix chansaver test. 2026-09-13 11:27:31 +01:00
RealKindOne 97e3932f03 Fix autoreply, chansaver, and stickychan test. 2026-09-13 11:27:31 +01:00
RealKindOne e7d188c3ec watch: Modernize and update test. 2026-09-13 11:27:31 +01:00
RealKindOne bbfec24e6b stichychan: Modernize and add test. 2026-09-13 11:27:31 +01:00
RealKindOne ecaf056d47 nickserv: Modernize and add test. 2026-09-13 11:27:31 +01:00
RealKindOne 9dbf062d87 kickrejoin: Modernize and add test. 2026-09-13 11:27:31 +01:00
RealKindOne ec49f11be6 keepnick: Modernize and update test. 2026-09-13 11:27:31 +01:00
RealKindOne cec9741003 flooddetach: Modernize and add test. 2026-09-13 11:27:31 +01:00
RealKindOne ca24ae726c ctcpflood: Modernize and add test. 2026-09-13 11:27:31 +01:00
RealKindOne 2a2b6068e8 clearbufferonmsg: Modernize and add test. 2026-09-13 11:27:31 +01:00
RealKindOne 28b9d8cbfb chansaver: Modernize and add test. 2026-09-13 11:27:31 +01:00
RealKindOne 97b1e8ab79 bouncedcc: Modernize and add test. 2026-09-13 11:27:31 +01:00
RealKindOne 0832094976 autoreply: Modernize and add test. 2026-09-13 11:27:31 +01:00
RealKindOne a75612dd15 autoattach: Modernize and update test. 2026-09-13 11:27:31 +01:00
Alexey Sokolov 76cdad9e6a Merge branch '1.10.x' 2026-09-13 10:54:57 +01:00
RealKindOne af5cdd0192 crypt: Modernize and add test. Fix OnNumericMessage 332 issue.
It was possible to trigger null pointer dereference during
OnNumericMessage

The affected versions are 1.7.0+

CVE-2026-82374
2026-09-12 19:08:21 +01:00
RealKindOne a2b0decb8e Fix MotdBufferDoesNotAccumulate376 test. 2026-08-21 03:37:07 -04:00
RealKindOne 4fbccd0cc4 Fix MOTD buffering to prevent duplicate 376 messages after rate limiting
Added m_bMotdBegun flag to track MOTD state. MOTD lines (372, 376) are now only
buffered if MOTD has begun (375/422), and 376 itself is not buffered.

The flag is reset on 263 rate limit responses to prevent repeat 376 messages.

Fixes #1460
2026-07-23 04:38:56 -04:00
Alexey Sokolov 3e95cf44a6 Restore test
I somehow oversimplified it, breaking it
2026-07-23 02:35:29 +01:00
Alexey Sokolov 133f0ad585 typo 2026-07-23 02:10:28 +01:00
Alexey Sokolov 7d4879ab26 Cleanup previous PR, add integration test for multiple joins 2026-07-22 09:24:52 +01:00
RealKindOne d2fc5d550a Apply fixes for IsParting() pull request. 2026-07-22 01:58:01 -04:00
RealKindOne a0d58c8fed Add IsParting() flag to track PART commands waiting IRCd response.
Fixes potential desync where ZNC marks channel as parted before server
confirms the PART, which could cause issues if the server never replies.

Add unittests and integration tests.
2026-07-21 03:24:38 -04:00
RealKindOne 3ceae3ad26 Fix part/join not working when a client sends '/cycle' or '/hop' command. 2026-07-20 04:33:04 -04:00
RealKindOne 13268feefe Revert "Revert "Fix JOIN command not joining detached channels on other clients.""
The revert was made by mistake due to misreading of 'znc -D'.

This reverts commit 6d470db241.
2026-07-20 04:25:50 -04:00
Alexey Sokolov 6d470db241 Revert "Fix JOIN command not joining detached channels on other clients."
This reverts commit ba32b092e9.

It broke /hop (/part+/join) due to race with server
2026-07-19 20:35:31 +01:00
RealKindOne ba32b092e9 Fix JOIN command not joining detached channels on other clients. 2026-07-01 13:59:18 -04:00
Alexey Sokolov e7919287fe Merge pull request #2021 from dxbjavid/copy-preserve-mode
fileutils: open Copy() destination at the source's mode
2026-06-09 23:24:33 +01:00
dxbjavid 01678166a8 fileutils: force owner write while copying read-only sources
Opening the destination at the source's exact mode breaks when the
source lacks owner write (e.g. r-xr-xr-x): the create still works but
the overwrite path can't reopen such a destination for writing. Force
owner read+write while copying and let the trailing Chmod() put the
source mode back, which only ever adds owner bits so the group/other
bits stay as restrictive as the source throughout. Add a regression
test covering the restricted-mode and read-only-source cases.
2026-06-09 09:53:57 +05:30
Alexey Sokolov 53ffcc909b add include 2026-06-08 22:43:13 +01:00
Alexey Sokolov 2a9359d1fb Merge branch 'nossl' of github.com:DarthGandalf/znc into nossl 2026-06-08 22:07:34 +01:00
Alexey Sokolov ad12a6011d Skip tests which require SSL 2026-06-08 22:07:11 +01:00
Alexey Sokolovanddgw 14846166c6 Update test/integration/framework/znctest.cpp
Co-authored-by: dgw <dgw@technobabbl.es>
2026-06-08 22:00:37 +01:00
Alexey Sokolov 197a235764 test: Don't wait for SSL question if built without SSL
And don't hardcode 6667 in preparation for #2022
2026-06-08 21:54:34 +01:00
Alexey Sokolov a80cf49f5e Merge pull request #2018 from MarkLee131/fix/http-hardening-headers
HTTPSock: emit standard hardening response headers
2026-05-05 00:26:58 +01:00
Alexey Sokolov 663699b617 Merge pull request #2015 from MarkLee131/fix/cstring-empty-input-guards
ZNCString: guard Replace/Split against empty-width arguments
2026-05-04 22:05:49 +01:00
MarkLee131 80699c4178 test: use EXPECT_THAT matchers for Split assertions
Pull in gmock so the empty-delimiter Split assertions can keep using
EXPECT_THAT(..., ElementsAre(...)) and IsEmpty(). On failure the matcher
prints the actual vector contents, which EXPECT_TRUE(vempty.empty())
hides behind a bare 'not true'.
2026-05-04 20:51:56 +08:00
MarkLee131 83e7eefc21 HTTPSock: tighten hardening header defaults
Switch the default Referrer-Policy from same-origin to no-referrer so the
webadmin URL (which can carry user/network names in the path) does not
leak to outbound clicks either.

Drop Pragma: no-cache; it is deprecated and modern intermediaries honor
Cache-Control. Simplify Cache-Control to a single no-store directive,
which on its own already prevents storing per RFC 9111; the previous
no-cache, must-revalidate, max-age=0 tail was HTTP/1.0-era padding.
2026-05-04 20:35:23 +08:00
MarkLee131 c3f1b0c00e test: replace gmock matchers in Split test with gtest equivalents
StringTest.cpp does not include gmock, so EXPECT_THAT/ElementsAre/IsEmpty
do not compile and the unittest target fails on every CI configuration.
Use EXPECT_EQ against a VCString and EXPECT_TRUE(empty()) instead, which
keeps the test scope identical without dragging gmock into this file.
2026-05-04 19:31:29 +08:00
Alexey Sokolov f35e565637 Merge pull request #2013 from MarkLee131/fix/base64-decode-ub
ZNCString: avoid left shift of negative value in Base64Decode
2026-05-01 22:23:24 +01:00
Alexey Sokolov 6186f611b9 Merge pull request #2017 from MarkLee131/fix/checkpass-constant-time
User: use constant-time compare for MD5/SHA256/plain password paths
2026-04-30 08:23:07 +01:00
MarkLee131 f71e021e3b HTTPSock: emit standard hardening response headers
Close #2012.

Add X-Frame-Options: SAMEORIGIN, X-Content-Type-Options: nosniff and
Referrer-Policy: same-origin to every response so webadmin and module
pages are framed/sniff-protected by default. Add no-store Cache-Control
and Pragma: no-cache on dynamic responses so shared workstations can't
replay authenticated pages from browser history. Skip the cache headers
for 304 and for static asset MIME types (image, font, text/css,
application/javascript) that the existing ETag/Last-Modified path on
PrintFile already handles.

Per review feedback: the emitter is a private WriteHardeningHeaders that
writes each line via the socket directly from PrintHeader, not a public
helper returning a temporary VCString. Callers can override a default
value with AddHeader, or suppress one outright with the new public
OmitHardeningHeader(name).

Tests: drive PrintHeader on a CHTTPSock subclass that captures Write()
calls, then assert with gmock matchers (Contains(StartsWith(...))).
2026-04-29 20:29:47 +08:00