Commit Graph
100 Commits
Author SHA1 Message Date
Uli Schlachter 3e45b2f35f Fix an ODR violation
Building with CFLAGS="-flto -Werror=odr -Werror=lto-type-mismatch
-Werror=strict-aliasing" CXXFLAGS="-flto -Werror=odr
-Werror=lto-type-mismatch -Werror=strict-aliasing" LDFLAGS=-flto fails
due to a violation of the one definition rule. There are two different
definitions of TOption that are both linked into the znc binary.

Fix this by putting them into anonymous namespaces.

Fixes: https://github.com/znc/znc/issues/1834
Signed-off-by: Uli Schlachter <psychon@znc.in>
2022-08-05 16:12:40 +02:00
Uli Schlachter 75475972d7 sasl: Fix sending of long authentication information
The specification requires AUTHENTICATE information to be split into
chunks of size 400. This commit implements the necessary chunking.

Fixes: https://github.com/znc/znc/issues/942
Signed-off-by: Uli Schlachter <psychon@znc.in>
2019-01-24 13:11:50 +01:00
Uli Schlachter 48dc52a0da Add an integration test for unix sockets
Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-11-06 16:26:34 +01:00
Uli Schlachter 7621a31af5 Rename AddListener() variants into AddTCPListener() and AddUnixListener
Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-11-06 15:29:44 +01:00
Uli Schlachter 29a646b773 WIP: Add ToDos to some places that display listeners and should handle CUnixListener
Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-11-02 12:05:20 +01:00
Uli Schlachter b5d77a8ade CListener: Split out common code to setup ssl
Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-11-02 12:05:20 +01:00
Uli Schlachter 811f453efb Add support for listening on a unix domain socket
So far this is not integrated with ClientCommand.cpp or webadmin.cpp, so
the only way to actually use this is to hand-editing the config with a
<Listener> section like the following:

<Listener 42>
  Path = /tmp/listen
  SSL = false
</Listener>

So far this received only very basic testing. I did not even test SSL support.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-11-02 12:05:20 +01:00
Uli Schlachter b8d99f2674 Implement CListener::ToConfig()
This will later reduce some code duplication.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-11-02 12:03:24 +01:00
Uli Schlachter 35da5784ca Split CTCPListener from CListener
This splits up CListener into a TCP-specific class and a general class.
The intention is to later add another class inheriting from CListener
that listens on unix sockets.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-11-02 12:03:24 +01:00
Uli Schlachter b68fbc64a2 Move listener config writing into CListener
Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-11-02 11:41:38 +01:00
Uli Schlachter 74bfbea6f2 Speed up FixCVE20149403 test
The test was unnecessarily waiting for ZNC to join some channel, which
took a long time.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-02-28 13:07:15 +01:00
Uli Schlachter 7b2a127841 Fix tests relying on table output
The output style of tables was recently changed. This broke the
ControlpanelModule integration test. Adapt some of the patterns used so
that they work again.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-02-28 12:59:00 +01:00
Uli Schlachter 1543635abf integration tests: Improve message when ZNC is missing
Previously, "more or less unrelated" things would fail. After this
change, also a message is printing that gives a hint on what went wrong.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-02-28 12:57:13 +01:00
Uli Schlachter 9864b2716a [sasl] Do not try to convert entire "verbose" command to bool
Fixes #1291
2016-07-08 02:19:41 -05:00
Uli Schlachter 11f1efaaac configure: Fix C++11 test with -Werror=missing-declarations
This fixes the following error (copied from config.log):

  conftest.cpp:49:14: error: no previous declaration for 'void
  test_template_alias_sfinae::test()' [-Werror=missing-declarations]

Signed-off-by: Uli Schlachter <psychon@znc.in>
(cherry picked from commit 2d1336dcf3)
2015-02-23 05:33:25 +00:00
Uli Schlachter 5f9ad5cc87 SSLVerifyHost: Make some functions static
These functions shouldn't be visible outside of this file. This was caught by
-Werror=missing-declarations.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2015-02-19 08:39:22 +01:00
Uli Schlachter fd34f84bfd ~CThreadPool(): Handle spurious wakeups
From pthread_cond_wait()'s man page:

  When using condition variables there is always a boolean predicate involving
  shared variables associated with each condition wait that is true if the
  thread should proceed. Spurious wakeups from the pthread_cond_wait() or
  pthread_cond_timedwait() functions may occur. Since the return from
  pthread_cond_wait() or pthread_cond_timedwait() does not imply anything about
  the value of this predicate, the predicate should be re-evaluated upon such
  return.

Fix ~CThreadPool() to account for this possibility.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2015-02-19 08:38:28 +01:00
Uli Schlachter 2f058fcc80 Remove zncconfig.h in distclean
See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=712254

Signed-off-by: Uli Schlachter <psychon@znc.in>
2015-02-16 23:52:27 +01:00
Uli Schlachter 2d1336dcf3 configure: Fix C++11 test with -Werror=missing-declarations
This fixes the following error (copied from config.log):

  conftest.cpp:49:14: error: no previous declaration for 'void
  test_template_alias_sfinae::test()' [-Werror=missing-declarations]

Signed-off-by: Uli Schlachter <psychon@znc.in>
2015-02-14 19:45:01 +01:00
Uli Schlachter de96cd95d0 modpython: Switch from CSmartPtr to std::shared_ptr
Patch by DarthGandalf, I just committed it to git.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-09-15 12:07:13 +02:00
Uli Schlachter fab17f903c Merge pull request #666 from jpnurmi/ctcp
Fix #664: Custom CTCP will leak the real reply
2014-09-13 14:25:58 +02:00
Uli Schlachter 62328b2c96 CSmartPtr: Remove, superseded by std::shared_ptr
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-09-12 15:25:57 +02:00
Uli Schlachter 7704bc49d7 client auth: Switch from CSmartPtr to std::shared_ptr
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-09-12 15:12:46 +02:00
Uli Schlachter 3953185b04 WebModules: Switch from CSmartPtr to std::shared_ptr
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-09-12 14:55:42 +02:00
Uli Schlachter 67d22c8e42 CTemplate: Switch from CSmartPtr to std::shared_ptr
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-09-12 14:47:47 +02:00
Uli Schlachter 0908023a63 Merge pull request #635 from maksqwe/fix_state
bouncedcc: Fix test for "Connected" state
2014-08-20 10:28:36 +02:00
Uli Schlachter e0e86e8b02 CThreadPool::cancelJobs(): Add a comment explaining the logic a bit
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-08-11 09:09:38 +02:00
Uli Schlachter 74fdd97a52 CJob: Even cancel finished jobs
When a job was cancelled after its runThread() method finished, but before the
main thread noticed this and reacted, we would just run runMain() before and
pretend the job finished normally.

However, with CModuleJob this means that runMain() might get called for a module
which is currently being destructed. This has bad effects with virtual functions
and thus causes problems. It's better to just really cancel the job instead.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-08-11 09:09:38 +02:00
Uli Schlachter 5a6224d2b4 sample: Add an example for CModuleJob
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-08-06 23:31:26 +02:00
Uli Schlachter 308df21511 Modules: Add a module version of CJob
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-08-06 15:32:41 +02:00
Uli Schlachter 0fddbba230 CThreadPool: Fix a race when starting threads
There was a race where threads were themselves responsible for increasing the
counter for the number of running threads. This left an open window where the
thread was already started, but our counter was not yet increased. The effect of
this race would be that we start more threads than we should.

Fix this by increasing the counter before actually starting new worker threads.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-08-06 15:20:12 +02:00
Uli Schlachter 1d67e87d90 CThreadPool: Add cancellation support
This adds CThreadPool::cancelJob() and cancelJobs() which can cancel a set of
jobs synchronously. These functions only return when the job was successfully
cancelled.

It tries to cancel the jobs as quickly as possible, skipping any callbacks on
CJob that were not yet called. A job that is already running can use
CJob::wasCancelled() to check if it should quit.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-08-06 15:15:57 +02:00
Uli Schlachter 6118ad5345 Threads.h: Add some doxygen comments
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-08-06 14:50:59 +02:00
Uli Schlachter 970b802073 modpython, modperl: Parse all headers
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-08-06 14:50:59 +02:00
Uli Schlachter 0e057702db Add a ThreadTest to the testsuite
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-08-06 14:50:59 +02:00
Uli Schlachter d4fefd1888 StringTest: Make a local function static
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-08-06 14:50:58 +02:00
Uli Schlachter d128b41844 Threads: Add some undefined constructors etc
This is needed to "get rid" of the C++ default implementation. Yes, I know that
this can be done way nicer with C++11...

Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-08-06 14:50:58 +02:00
Uli Schlachter 680935723f Fix typo in last commit
Thanks to drbean for reporting this in FreeNode/#znc.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-07-14 15:56:03 +02:00
Uli Schlachter ba11b8eecf Less magic numbers for timeout settings
Currently the connection timeout handling of znc uses three magic numbers, each
of which is at least repeated in two unrelated places. This commits defines the
numbers in CIRCNetwork and makes the other places just use this number.

This also renames PING_TIMEOUT to PING_FREQUENCY because I feel that describes
this constant better.

I am not really happy about the name NO_TRAFFIC_TIMEOUT that is used for the
real timeout, but I couldn't think of a better name. PING_TIMEOUT isn't good
because that sounds like the time between sending a PING and the resulting
timeout.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-07-14 15:33:36 +02:00
Uli Schlachter 74c91e8cfa controlpanel: Check if adding a new channel succeeded
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-04-13 23:12:03 +02:00
Uli Schlachter 5e6e3be32a webadmin/add channel: Correctly handle channel names
The CChan constructor makes sure that the channel name begins with a valid
channel prefix. Thus, this could change the name of the resulting channel.

When you edited an irc network which already had a channel "#foo", were
connected to IRC (so ZNC knows which prefixes are valid) and added a channel
"foo", this would lead to a problem:

Webadmin checks and sees that there is no channel "foo" yet. Webadmin creates a
new CChan instance for "foo". The CChan constructor notices that "f" is not a
valid channel prefix and instead calls itself "#foo". Then,
CIRCNetwork::AddChan() would see that this channel already exists, delete the
given channel and return false.

However, webadmin didn't check this result and would continue changing settings
on an already destroyed CChan instance.

Fix this by checking if the channel exists after CChan had its chance to mess
with the channel name. Also handle failures from CIRCNetwork::AddChan().

Fixes #528.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-04-13 20:41:34 +02:00
Uli Schlachter 0a0be7710f configure: Fix --disable-charset
Somehow I ended up only testing the automatic detection and the error message
from --enable-charset. I totally forgot that --disable-charset should skip the
whole check.

Thanks to Robby for reporting this.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-03-01 16:57:09 +01:00
Uli Schlachter a074c23e39 configure: Add --enable/disable-charset
This override the auto detection. If --enable-charset is given, but icu can't be
found, configure will error out.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-02-25 17:13:01 +01:00
Uli Schlachter 4676fa0a7f configure: Give a reason for disabled features
This adds a short reason to the summary at the end of configure (for options
where it makes sense, e.g. not debug or ipv6).

Example:

  charset:      no (icu-uc not found via pkg-config)

Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-02-24 18:27:07 +01:00
Uli Schlachter c5f31f0a4d autogen.sh: Check for pkg-config before calling automake
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-01-22 20:58:52 +01:00
Uli Schlachter 414fa40eb5 WebModules: Discard sessions in LRU order
Currently, znc has a limit of 5 web sessions per IP address. This limit exists
to defend against some obvious DoS attacks. When this limit is hit, some session
is discarded.

Previously, we would discard the session that std::multimap::find() would give
us. The multimap used mapped from IP addresses to sessions. Thus, we would
discard the oldest session.

This commit changes this into some least-recently-used logic. Whenever a session
is used, we record the timestamp of this. Then when a session has to be picked
for discarding, the one with the oldest timestamp is used.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-12-07 20:56:27 +01:00
Uli Schlachter 8cf938931b ax_pthread: Check for g++ instead of gcc
Surprisingly, ZNC is written in C++, not C and thus needs a C++ compiler, not a
C one.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-09-11 23:56:37 +02:00
Uli Schlachter 999cc085d2 Revert "Add 381 to the buffer (You are now an IRC Operator)"
This reverts commit 11e5f7636d.

Having this in the raw buffer multiple times is obviously wrong, because you can
use /oper more than once and would get a new 381 numeric each time. So this
would need to use UpdateRawBuffer() instead of AddRawBuffer() (=replace old
entries with the same text).

However, this is still wrong. If you -o yourself, you no longer have oper
status. ZNC wouldn't notice this and still deliver the 381 numeric to new
clients.

Clients which use raw 381 to detect oper status will have to switch to user mode
+o.

Thanks to Han` for reporting this problem.
2013-05-14 18:30:40 +02:00
Uli Schlachter c28207d35b Makefile: Remove unused (and broken) variable
Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-05-07 21:33:46 +02:00
Uli Schlachter ed478e6f7b make clean: Only delete files that can be regenerated
Previously, "make clean" would happily delete swig's output files even though
configure did not find swig and thus these files could not be generated again.

This half-fixes issue 276. It would be great if the Makefiles never delete files
which are part of the tarball, but at least they now don't delete files which
cannot be regenerated.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-05-07 21:29:11 +02:00
Uli Schlachter 9b23ee60b8 Debug: Only print queued lines if they are really just queued
Previously, every line that was forwarded to the IRCd was printed twice in debug
mode. Once when it got added to the send queue and a second time when it was
actually sent. However, most of the time this queue is empty and thus the two
events happened at approximately the same time.

Thus, this patch now changes the debug output. Lines are only printed extra if
they really have to wait in the queue for a while before they can be sent out.

This has the positive effect of making the debug output more readable, because
it is shorter and less repetitive and it makes it more obvious when znc actively
throttles the traffic that is sent out.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-05-07 20:59:38 +02:00
Uli Schlachter 1dbdc4f37d sasl: Add missing length check
This could otherwise lead to an integer underflow on specially crafted input.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-04-20 21:31:35 +02:00
Uli Schlachter 3a7dc7aa73 Don't ever try to overwrite /usr/bin/git
Previously, version.sh got the path to git as its first and only argument. Since
the previous commit, this is not the path to src/version.cpp and the second
argument is the path to git.

However, let's assume someone does "git pull && make". They still have the old
Makefile laying around, which will pass the path to git as the first argument to
version.sh. Thus, this will overwrite /usr/bin/git with some generated source
code. Whoops.

Thanks to KindOne for reporting this problem!

Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-03-31 20:38:51 +02:00
Uli Schlachter 58a34fa5ad Improve the way that VERSION_EXTRA is calculated
Instead of doing magic with the result from version.sh so that we can add a
preprocessor macro, the script now just writes src/version.cpp with the expected
content. This should fix all the various issues that we have with quoting the
arguments and things that go wrong when not building znc from a git clone.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-03-31 19:32:44 +02:00
Uli Schlachter 53c579b296 CJob: Add a way to do stuff on the main thread
This just moves the pipe from the socket code to the thread pool. However, now
all CJobs can use this and there is a single place for them to get deleted.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-03-15 11:58:27 +01:00
Uli Schlachter 75f2e3fa41 Add a generic threads abstraction
This should make it easier to work with threads. It provides classes for mutexes
and condition variables. Additionally, there is a special CMutexGuard that
automatically unlocks the mutex on destruction and a CThreadPool class.

This thread pool is used to replace the thread pool in the sockets code.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2013-03-15 11:58:22 +01:00
Uli Schlachter d9d6a2228c Fix OOT builds with swig files in source dir
Normally, when the Makefile calls swig, the resulting files end up in the build
directory. However, when the files are pre-generated (e.g. as in the znc 1.0
tarball) and an out of tree build is used, they are in the source directory and
installation fails.

Thanks to Kinji for reporting this.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-12-26 14:12:58 +01:00
Uli Schlachter 12d9aee507 Makefile: Fix generation of the VERSION_EXTRA flag
When you checkout the znc-1.0 tag and try to build znc, this will fail. The
reason is that "git describe" prints just "znc-1.0" and the sed-magic in the
Makefile fails to handle this correctly.

Fix this by moving this magic into a short shell script which doesn't try to
parse the output of "git describe" but instead gets its information from various
sources directly.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-12-16 18:48:17 +01:00
Uli Schlachter 8ffab186b4 CModule::OnMode(): Fix a stupid NULL pointer dereference
When joining a channel, OnMode() (via SetModes()) was called with pOpNick ==
NULL. This bad pointer was turned into a reference and given to modules.

This bug exists since 2008 when the OnMode() module call was added. It wasn't
noticed before because apparently no module used this CNick argument before.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-12-06 17:28:05 +01:00
Uli Schlachter d0b7df5ec4 Look! Shiny butterflies everywhere!
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-11-01 15:53:07 +01:00
Uli Schlachter 8a4cd20efb modperl: Add dependency information for modperl.o
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-11-01 15:48:39 +01:00
Uli Schlachter 5ea266a199 Fix parallel building of modperl
The symptoms looked like this:

    Packing man page znc-buildmod.1.gz...
    Generating ZNC API for Perl...
    Generating ZNC API for Perl...
    Generating ZNC API for Perl...
    Linking znc...

The reason was that the old rule was executed multiple times in parallel. See
the following commit for more information:

    commit 84ec49780e
    Author: Uli Schlachter <psychon@znc.in>
    Date:   Sun Sep 23 12:03:22 2012 +0200

        Get rid of the modpythin jobhack

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-11-01 15:23:47 +01:00
Uli Schlachter 84ec49780e Get rid of the modpythin jobhack
This exists to fix a problem where the python swig API was generated multiple
times in parallel with "make -j3". This problems turns out to be due to the
multiple target rule that this commit removes. Such a rule doesn't mean "this
commands generate multiple files at once" but means "you can use this command
for each of these targets".

Fix this by including Makefile.gen instead of calling it in its own make
process. That way we don't need this "meta rule" which just calls another
Makefile but can use the "real" rules immediately.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-23 12:03:22 +02:00
Uli Schlachter 9c14a8603c Fix modperl re-building
Make was always rebuilding modperl/ZNC.so because the Makefile was actually
describing a file modperl/ZNC."so". Fix this by getting rid of the unnecessary
pair of quotes.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-23 11:18:53 +02:00
Uli Schlachter afb4830057 Fix configure with -Werror=unused-variable
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-23 11:14:20 +02:00
Uli Schlachter 9b6ea8251c WebModules: Fix a NULL pointer dereference
Commit b1593238d5 started using the module pointer before the NULL
check. This caused crashes whenever someone (even without a login!) accessed a
web page on znc for a module which didn't exist.

Thanks to J0rd4n` for reporting this to us.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-04-09 21:42:04 +02:00
Uli Schlachter ed5610f363 imapauth: Follow RFC more closely
The IMAP RFC allows the server to announce its capabilities before replying to
the LOGIN command. imapauth would misinterpret that as a failed login.

The fix is to only handle lines which contain the tag ("AUTH") used for the
login command.

Thanks to rlpowell for reporting that imapauth doesn't work against
imap.google.com and for testing the fix.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-03-30 23:15:57 +02:00
Uli Schlachter d5b84f50db Fix an dangerous substr() call
A malicious IRCd could send a WHO reply for a nick which consisted completely
out of prefix characters (thus an empty nick). In this case
std::string::find_first_of() would return std::string::npos. This argument would
make std::string::substr() throw an exception and kill the process.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-03-30 23:13:03 +02:00
Uli Schlachter 1dd8d9bf3e Block all signals in DNS threads
A DNS thread should never handle any kind of signal. The main thread is
responsible for handling signals and it does so without any kind of locking.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-02-19 12:26:19 +01:00
Uli Schlachter 252e6d7151 Threaded DNS: Handle spurious wakeups
As DarthGandalf noticed, POSIX allows spurious wakeups from pthread_cond_wait.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-02-19 12:13:25 +01:00
Uli Schlachter 0bdb18a427 Threaded DNS: Use a thread pool
When a DNS thread is done with its lookup, instead of existing immediately, it
now waits for another DNS lookup to do instead. This avoids the cost of
starting/stopping threads all the time.

To make sure that (for whatever reason) the number of waiting threads doesn't
get too high, threads exit if there are more than two DNS threads idling around
with nothing to do.

Fixes #132.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-02-14 20:28:28 +01:00
Uli Schlachter ec3317a8e5 Merge branch 'debug_timestamps' of ssh://github.com/HaleBob/znc 2012-02-05 21:18:39 +01:00
Uli Schlachter 95d6041018 Fix a busy loop with the connection queue
If connecting to a server failed without needing any time for DNS, the connect
timer would busy loop over the networks, because a network re-inserted itself
into the queue and the timer would try the network again.

Fix this by moving the connection queue to a separate instance of std::list when
the timer fires. From then on, we just iterate through that list while networks
which want to try again add themselves to the "real" connection queue instead.

We only have to make sure that any networks that are left in the old connection
queue after the timer is done get prepended to the "real" connection queue.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-02-04 19:53:03 +01:00
Uli Schlachter 4d1e97ed47 Fix AX_PTHREAD to actually work
At first the test was failing with the following error due to my CXXFLAGS:

conftest.cpp:20:37: error: parameter 'a' set but not used
[-Werror=unused-but-set-parameter]

Then it figured out that -lpthread works, but I wondered why the test for
"-pthread" still fails. This is where I realized that it is testing with C++
compiler, but puts its stuff in $CFLAGS which is just ignored. So a little
search-and-replace later, this now uses $CXXFLAGS.

At this point the results of the tests looked good, but znc failed to link,
because it didn't use -pthread when linking. One little "PTHREAD_LIBS=" later,
that problem was also gone and I can finally commit this. Yay.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-02-04 16:08:45 +01:00
Uli Schlachter 1d16d1ce7d Fix a stupid bug in CUser::~CUser()
A CIRCNetwork's destructor removes the network from its associated user's list
of networks. Now that you know this, stare at the diff until you figure out the
problem. Yeah, "ouch".

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-02-04 14:16:54 +01:00
Uli Schlachter 233897b3a8 threaded DNS: Remove an unneeded function
This inlines the function into its only caller.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-02-04 14:15:52 +01:00
Uli Schlachter 94c7b04245 Threaded DNS: Remove TDNS mutex
POSIX actually guarantees for us that this white is atomic and thus a partial
write is not allowed.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-02-04 14:15:52 +01:00
Uli Schlachter 29564f1c7e CFile: Make sure errno is always set correctly
This fixes weird problems were strerror() made us print garbage.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-01-22 18:51:01 +01:00
Uli Schlachter beacc0180c TDNS: Fix a use-after-free-race-with-threads
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-01-19 19:41:21 +01:00
Uli Schlachter 10ece5d2cc CHTTPSock: Remove some useless member methods
The defaults from Csock / CSocket will be fine.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-01-14 12:09:25 +01:00
Uli Schlachter c87e7cf5ba Update Csocket to e00323f9f18
This breaks API for Csock::SockError()!

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-01-14 11:33:38 +01:00
Uli Schlachter 02e42958f0 Make certs valid for 10 years
Previously, a certificate generated with --makepem expired after a year which is
weird and pointless (come on, it's self-signed!).

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-01-13 20:57:10 +01:00
Uli Schlachter 87aad36121 Increase the version number to 0.205
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-01-01 14:50:20 +01:00
Uli Schlachter 01341cfb0a Fix some invalid iterator uses
This fixes #96. When the last user in a partyline channel is deleted, the
channel is deleted, too. This invalidates the iterator used in OnDeleteUser().
This fix is to increase the iterator before the channel can be deleted.

After the above fix, znc still crashed due to another broken use of iterators.
When a network is deleted, it takes all its clients with it (why aren't they
just moved into the "no network"-state?"). However, deleting a CClient removes
it from the network's list of clients via CClient::Disconnect(). This resulted
in another invalid use of iterators.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-12-29 13:54:24 +01:00
Uli Schlachter cdc27e1434 Automatically load autoaway if away is requested
This module was renamed in f604709cf0.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-12-29 13:54:24 +01:00
Uli Schlachter e5facdf557 route_replies: Handle raw 482
lahwran reported the following message from *route_replies and also figured out
which message we failed to handle, thanks!

<*route_replies> This module hit a timeout which is possibly a bug.
<*route_replies> To disable this message, do "/msg *route_replies silent yes"
<*route_replies> Last request: MODE #somesecretchannel I

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-11-08 19:19:20 +00:00
Uli Schlachter e607b1a559 route_replies: Handle raw 482
lahwran reported the following message from *route_replies and also figured out
which message we failed to handle, thanks!

<*route_replies> This module hit a timeout which is possibly a bug.
<*route_replies> To disable this message, do "/msg *route_replies silent yes"
<*route_replies> Last request: MODE #somesecretchannel I

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-11-05 12:17:31 +01:00
Uli Schlachter a08ec52dbf Don't use "mkdir" during install
lahwran just showed up on irc and told us that he installed znc, but znc failed
to find any modules. The reason for this was his umask 077 which means that
"make install" installed stuff so that only root can access it.

The solution is do use "install -d" since that makes sure to ignore the
currently set umask.

However, google finds results which say that "install -d" might mess with stuff
of pre-existing directories when it shouldn't, so we must first test if the
directory already exists before calling install. Obviously, this makes our
Makefile a lot more readable. :-(

I didn't have time to test this properly, so stuff might break.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-11-03 09:01:13 +01:00
Uli Schlachter a66721eacb webadmin: Add a "Disabled" checkbox for channels
Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-10-30 13:44:36 +01:00
Uli Schlachter 9140a0dbd5 CZNC::WriteConfig(): Better --debug output
Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-10-30 13:42:36 +01:00
Uli Schlachter a97abc53f7 Just some small comment explaing some craziness
Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-10-30 13:39:34 +01:00
Uli Schlachter 962c10795d Disable some more warnings on mod{perl,python}
It seems to me like swig is trying to trigger every warning that exists...

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-10-30 13:37:11 +01:00
Uli Schlachter 7f6a4fb472 Update to latest Csocket
Lots of interesting stuff in here, if you want details, ask Csocket's git
history. :-P

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-09-25 14:08:08 +02:00
Uli Schlachter c0907f2e58 Fix visibility support
I definitely fixed this problem already when I ported the macro, so I wonder why
the fix got lost...

config.log says:

conftest.cpp: In function 'void dummyfunc()':
conftest.cpp:13:15: error: no previous declaration for 'void dummyfunc()'
[-Werror=missing-declarations]

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-09-25 10:24:36 +02:00
Uli Schlachter 0acf0de204 Merge pull request #71 from schoentoon/master
A few new nickserv commands, little annoyance fix and a new hook
2011-09-25 01:20:14 -07:00
Uli Schlachter 768359277b Send a MODE request when JOINing
This kind of reverts/fixes f1cb09bd9c.

Robby found a bug with evil ChanServ which goes like this:

- You join an empty, but registered channel and the IRCd applies its default
  modes (+nt), but ZNC didn't ask for MODE, so doesn't know this.
- ChanServ applies whatever channel modes it wants to apply. This causes ZNC to
  see a mode change (e.g. +s).

The result of this is that ZNC thinks that the channel has mode +s and it will
tell every client that connects to it about this.

The fix is to send a MODE request when JOINing. To make sure that we don't
confuse clients, we block the reply.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-09-22 20:23:42 +02:00
Uli Schlachter 4d4e6a6eb1 SHA256.cpp: Include some ZNC header first
This is required to make sure that zncconfig.h is the very first header that is
being included.

This problem was noticed by someone reporting some "macro redefined" warnings.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-09-22 18:25:22 +02:00
Uli Schlachter 08cc624bcc Fork the gl_visibility macro
That macro currently was broken. It added flags to $CFLAGS but then called the
C++ compiler. The result was that ZNC didn't compile with GCC 3, because it
tried to use -fvisibility=hidden which isn't supported in that GCC version.

A list of changes done to this macro is contained in a comment.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-09-22 18:14:48 +02:00
Uli Schlachter 6f2335d529 configure.ac: Redefine AC_PROG_CC to cause errors
ZNC is written in C++ and doesn't need a C compiler. This redefine let's us
catch code which accidentally uses the C compiler.

Currently this means that we break due to gl_VISIBILITY.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-09-22 18:12:02 +02:00
Uli Schlachter e029dded0d Fix CIRCNetwork::ExpandString()
It pretty much always returned an empty string (or rather: whatever was in the
return variable before, which is an empty string in 99% of cases).

Signed-off-by: Uli Schlachter <psychon@znc.in>
2011-09-16 12:02:55 +02:00