From e49e86e036923e05822edca86fcf21f7581631ce Mon Sep 17 00:00:00 2001 From: Jonas Gorski Date: Fri, 19 Jun 2015 13:07:17 +0200 Subject: [PATCH] znc: update to 1.6.0 Fixes compilation with musl. Requires GCC 4.7 or newer, so broken for octeon. Signed-off-by: Jonas Gorski --- net/znc/Makefile | 14 +- ...01-fix-savebuff-timer-initialization.patch | 28 ++++ ...-CThreadPool-Handle-spurious-wakeups.patch | 33 ++++ ...FindChans-and-FindQueries-to-be-case.patch | 149 ++++++++++++++++++ .../patches/004-Fix-chansaver-loading.patch | 38 +++++ ...flict-of-HTTP-Basic-auth-and-cookies.patch | 36 +++++ ...failure-when-simple_away-is-loaded-a.patch | 24 +++ ... => 100-move_rootcheck_after_config.patch} | 16 +- ...me.patch => 101-Reduce_rebuild_time.patch} | 19 +-- ...proot.patch => 102-restore_droproot.patch} | 0 10 files changed, 336 insertions(+), 21 deletions(-) create mode 100644 net/znc/patches/001-fix-savebuff-timer-initialization.patch create mode 100644 net/znc/patches/002-CThreadPool-Handle-spurious-wakeups.patch create mode 100644 net/znc/patches/003-Fix-CIRCNetwork-FindChans-and-FindQueries-to-be-case.patch create mode 100644 net/znc/patches/004-Fix-chansaver-loading.patch create mode 100644 net/znc/patches/005-Fix-rare-conflict-of-HTTP-Basic-auth-and-cookies.patch create mode 100644 net/znc/patches/006-Fix-954-Startup-failure-when-simple_away-is-loaded-a.patch rename net/znc/patches/{001-move_rootcheck_after_config.patch => 100-move_rootcheck_after_config.patch} (78%) rename net/znc/patches/{003-Reduce_rebuild_time.patch => 101-Reduce_rebuild_time.patch} (70%) rename net/znc/patches/{004-restore_droproot.patch => 102-restore_droproot.patch} (100%) diff --git a/net/znc/Makefile b/net/znc/Makefile index 8e39a380a..f0cba304f 100644 --- a/net/znc/Makefile +++ b/net/znc/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=znc -PKG_VERSION:=1.4 -PKG_RELEASE:=3 +PKG_VERSION:=1.6.0 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://znc.in/releases \ http://znc.in/releases/archive -PKG_MD5SUM:=630cb74db34d2d5451ba30b47869f6bb +PKG_MD5SUM:=674d8c1277752dcc627b96e33a63376e PKG_MAINTAINER:=Jonas Gorski PKG_LICENSE:=Apache-2.0 @@ -34,7 +34,7 @@ endef define Package/znc $(Package/znc/default) - DEPENDS:=+libopenssl +libpthread +libstdcpp + DEPENDS:=+libopenssl +libpthread +libstdcpp @GCC_VERSION_4_8||GCC_VERSION_4_9 MENU:=1 endef @@ -136,6 +136,8 @@ endef $(eval $(call module,adminlog,Log user connects and disconnects and failed \ logins to file or syslog.)) +$(eval $(call module,alias,Provides bouncer-side command alias support.)) + $(eval $(call module,autoattach,Reattaches you to channels on activity.)) $(eval $(call module,autocycle,Cycles a channel when you are the only one in \ @@ -198,6 +200,8 @@ $(eval $(call module,flooddetach,This module detaches you from channels which \ $(eval $(call module,identfile,Places the ident of a user to a file when they \ are trying to connect.)) +$(eval $(call module,imapauth,Allow users to authenticate via IMAP.)) + $(eval $(call module,keepnick,Tries to get you your primary nick.)) $(eval $(call module,kickrejoin,Implements auto-rejoin-on-kick.)) @@ -209,6 +213,8 @@ $(eval $(call module,listsockets,This module displays a list of all open \ $(eval $(call module,log,Log conversations to file.)) +$(eval $(call module,missingmotd,Sends 422 to clients when they login.)) + $(eval $(call module,modules_online,This module fakes the online status of \ ZNC-*users.)) diff --git a/net/znc/patches/001-fix-savebuff-timer-initialization.patch b/net/znc/patches/001-fix-savebuff-timer-initialization.patch new file mode 100644 index 000000000..5299ca859 --- /dev/null +++ b/net/znc/patches/001-fix-savebuff-timer-initialization.patch @@ -0,0 +1,28 @@ +From d6feb6f574933753371687ee42fa19d0b0d8d777 Mon Sep 17 00:00:00 2001 +From: Thomas Kriechbaumer +Date: Tue, 17 Feb 2015 10:08:30 +0000 +Subject: [PATCH] fix savebuff timer initialization + +closes #868 +--- + modules/savebuff.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/modules/savebuff.cpp ++++ b/modules/savebuff.cpp +@@ -93,13 +93,13 @@ public: + else + m_sPassword = CBlowfish::MD5(sArgs); + ++ AddTimer(new CSaveBuffJob(this, 60, 0, "SaveBuff", "Saves the current buffer to disk every 1 minute")); ++ + return( !m_bBootError ); + } + + virtual bool OnBoot() override + { +- AddTimer(new CSaveBuffJob(this, 60, 0, "SaveBuff", "Saves the current buffer to disk every 1 minute")); +- + CDir saveDir(GetSavePath()); + for (CFile* pFile : saveDir) { + CString sName; diff --git a/net/znc/patches/002-CThreadPool-Handle-spurious-wakeups.patch b/net/znc/patches/002-CThreadPool-Handle-spurious-wakeups.patch new file mode 100644 index 000000000..1377307a1 --- /dev/null +++ b/net/znc/patches/002-CThreadPool-Handle-spurious-wakeups.patch @@ -0,0 +1,33 @@ +From 2f4488c2a4f2d6b130ded560efa06680bfd8a185 Mon Sep 17 00:00:00 2001 +From: Uli Schlachter +Date: Sat, 14 Feb 2015 19:41:26 +0100 +Subject: [PATCH] ~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 +--- + src/Threads.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/src/Threads.cpp ++++ b/src/Threads.cpp +@@ -87,7 +87,7 @@ CThreadPool::~CThreadPool() { + CMutexLocker guard(m_mutex); + m_done = true; + +- if (m_num_threads > 0) { ++ while (m_num_threads > 0) { + m_cond.broadcast(); + m_exit_cond.wait(m_mutex); + } diff --git a/net/znc/patches/003-Fix-CIRCNetwork-FindChans-and-FindQueries-to-be-case.patch b/net/znc/patches/003-Fix-CIRCNetwork-FindChans-and-FindQueries-to-be-case.patch new file mode 100644 index 000000000..d5ad3df75 --- /dev/null +++ b/net/znc/patches/003-Fix-CIRCNetwork-FindChans-and-FindQueries-to-be-case.patch @@ -0,0 +1,149 @@ +From e10b53b87bb7ce87d1a31473e03a02ccafa78787 Mon Sep 17 00:00:00 2001 +From: J-P Nurmi +Date: Tue, 3 Feb 2015 10:11:47 +0100 +Subject: [PATCH] Fix CIRCNetwork::FindChans() and FindQueries() to be + case-insensitive + +The playback module failed to clear a buffer, because it tried to +clear "NickServ" whereas ZNC had internally stored it has "nickserv". +--- + Makefile.in | 2 +- + src/IRCNetwork.cpp | 6 ++-- + test/NetworkTest.cpp | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 101 insertions(+), 3 deletions(-) + create mode 100644 test/NetworkTest.cpp + +--- a/Makefile.in ++++ b/Makefile.in +@@ -48,7 +48,7 @@ LIB_SRCS := $(addprefix src/,$(LIB_SRCS + BIN_SRCS := src/main.cpp + LIB_OBJS := $(patsubst %cpp,%o,$(LIB_SRCS)) + BIN_OBJS := $(patsubst %cpp,%o,$(BIN_SRCS)) +-TESTS := StringTest ConfigTest UtilsTest ThreadTest NickTest ClientTest ++TESTS := StringTest ConfigTest UtilsTest ThreadTest NickTest ClientTest NetworkTest + TESTS := $(addprefix test/,$(addsuffix .o,$(TESTS))) + CLEAN := znc src/*.o test/*.o core core.* .version_extra .depend modules/.depend unittest + DISTCLEAN := Makefile config.log config.status znc-buildmod \ +--- a/src/IRCNetwork.cpp ++++ b/src/IRCNetwork.cpp +@@ -787,8 +787,9 @@ CChan* CIRCNetwork::FindChan(CString sNa + std::vector CIRCNetwork::FindChans(const CString& sWild) const { + std::vector vChans; + vChans.reserve(m_vChans.size()); ++ const CString sLower = sWild.AsLower(); + for (std::vector::const_iterator it = m_vChans.begin(); it != m_vChans.end(); ++it) { +- if ((*it)->GetName().WildCmp(sWild)) ++ if ((*it)->GetName().AsLower().WildCmp(sLower)) + vChans.push_back(*it); + } + return vChans; +@@ -946,8 +947,9 @@ CQuery* CIRCNetwork::FindQuery(const CSt + std::vector CIRCNetwork::FindQueries(const CString& sWild) const { + std::vector vQueries; + vQueries.reserve(m_vQueries.size()); ++ const CString sLower = sWild.AsLower(); + for (std::vector::const_iterator it = m_vQueries.begin(); it != m_vQueries.end(); ++it) { +- if ((*it)->GetName().WildCmp(sWild)) ++ if ((*it)->GetName().AsLower().WildCmp(sLower)) + vQueries.push_back(*it); + } + return vQueries; +--- /dev/null ++++ b/test/NetworkTest.cpp +@@ -0,0 +1,96 @@ ++/* ++ * Copyright (C) 2004-2015 ZNC, see the NOTICE file for details. ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++#include ++#include ++#include ++#include ++ ++class NetworkTest : public ::testing::Test { ++protected: ++ void SetUp() { CZNC::CreateInstance(); } ++ void TearDown() { CZNC::DestroyInstance(); } ++}; ++ ++TEST_F(NetworkTest, FindChan) { ++ CUser user("user"); ++ CIRCNetwork network(&user, "network"); ++ ++ EXPECT_TRUE(network.AddChan("#foo", false)); ++ EXPECT_TRUE(network.AddChan("#Bar", false)); ++ EXPECT_TRUE(network.AddChan("#BAZ", false)); ++ ++ EXPECT_TRUE(network.FindChan("#foo")); ++ EXPECT_TRUE(network.FindChan("#Bar")); ++ EXPECT_TRUE(network.FindChan("#BAZ")); ++ ++ EXPECT_TRUE(network.FindChan("#Foo")); ++ EXPECT_TRUE(network.FindChan("#BAR")); ++ EXPECT_TRUE(network.FindChan("#baz")); ++ ++ EXPECT_FALSE(network.FindChan("#f")); ++ EXPECT_FALSE(network.FindChan("&foo")); ++ EXPECT_FALSE(network.FindChan("##foo")); ++} ++ ++TEST_F(NetworkTest, FindChans) { ++ CUser user("user"); ++ CIRCNetwork network(&user, "network"); ++ ++ EXPECT_TRUE(network.AddChan("#foo", false)); ++ EXPECT_TRUE(network.AddChan("#Bar", false)); ++ EXPECT_TRUE(network.AddChan("#BAZ", false)); ++ ++ EXPECT_EQ(network.FindChans("#f*").size(), 1); ++ EXPECT_EQ(network.FindChans("#b*").size(), 2); ++ EXPECT_EQ(network.FindChans("#?A*").size(), 2); ++ EXPECT_EQ(network.FindChans("*z").size(), 1); ++} ++ ++TEST_F(NetworkTest, FindQuery) { ++ CUser user("user"); ++ CIRCNetwork network(&user, "network"); ++ ++ EXPECT_TRUE(network.AddQuery("foo")); ++ EXPECT_TRUE(network.AddQuery("Bar")); ++ EXPECT_TRUE(network.AddQuery("BAZ")); ++ ++ EXPECT_TRUE(network.FindQuery("foo")); ++ EXPECT_TRUE(network.FindQuery("Bar")); ++ EXPECT_TRUE(network.FindQuery("BAZ")); ++ ++ EXPECT_TRUE(network.FindQuery("Foo")); ++ EXPECT_TRUE(network.FindQuery("BAR")); ++ EXPECT_TRUE(network.FindQuery("baz")); ++ ++ EXPECT_FALSE(network.FindQuery("f")); ++ EXPECT_FALSE(network.FindQuery("fo")); ++ EXPECT_FALSE(network.FindQuery("FF")); ++} ++ ++TEST_F(NetworkTest, FindQueries) { ++ CUser user("user"); ++ CIRCNetwork network(&user, "network"); ++ ++ EXPECT_TRUE(network.AddQuery("foo")); ++ EXPECT_TRUE(network.AddQuery("Bar")); ++ EXPECT_TRUE(network.AddQuery("BAZ")); ++ ++ EXPECT_EQ(network.FindQueries("f*").size(), 1); ++ EXPECT_EQ(network.FindQueries("b*").size(), 2); ++ EXPECT_EQ(network.FindQueries("?A*").size(), 2); ++ EXPECT_EQ(network.FindQueries("*z").size(), 1); ++} diff --git a/net/znc/patches/004-Fix-chansaver-loading.patch b/net/znc/patches/004-Fix-chansaver-loading.patch new file mode 100644 index 000000000..b0f2690af --- /dev/null +++ b/net/znc/patches/004-Fix-chansaver-loading.patch @@ -0,0 +1,38 @@ +From 7e75018ba60a9f50ea9e936eb1b6eb6b44dbc668 Mon Sep 17 00:00:00 2001 +From: J-P Nurmi +Date: Sat, 28 Feb 2015 21:15:23 +0100 +Subject: [PATCH] Fix chansaver loading + +CModules::LoadModule() sets the module type _after_ construction. +The constructor cannot therefore do actions based on the module +type. Move loading to OnLoad(). +--- + modules/chansaver.cpp | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +--- a/modules/chansaver.cpp ++++ b/modules/chansaver.cpp +@@ -21,6 +21,12 @@ + class CChanSaverMod : public CModule { + public: + MODCONSTRUCTOR(CChanSaverMod) { ++ } ++ ++ virtual ~CChanSaverMod() { ++ } ++ ++ bool OnLoad(const CString& sArgsi, CString& sMessage) override { + switch (GetType()) { + case CModInfo::GlobalModule: + LoadUsers(); +@@ -32,9 +38,7 @@ public: + LoadNetwork(GetNetwork()); + break; + } +- } +- +- virtual ~CChanSaverMod() { ++ return true; + } + + void LoadUsers() { diff --git a/net/znc/patches/005-Fix-rare-conflict-of-HTTP-Basic-auth-and-cookies.patch b/net/znc/patches/005-Fix-rare-conflict-of-HTTP-Basic-auth-and-cookies.patch new file mode 100644 index 000000000..d635e78bb --- /dev/null +++ b/net/znc/patches/005-Fix-rare-conflict-of-HTTP-Basic-auth-and-cookies.patch @@ -0,0 +1,36 @@ +From 13c2dc126d8bb4c57273178fc455dab6f02e1efc Mon Sep 17 00:00:00 2001 +From: Alexey Sokolov +Date: Thu, 16 Apr 2015 01:21:57 +0100 +Subject: [PATCH] Fix rare conflict of HTTP-Basic auth and cookies. + +Fix #946 +--- + src/HTTPSock.cpp | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +--- a/src/HTTPSock.cpp ++++ b/src/HTTPSock.cpp +@@ -122,7 +122,7 @@ void CHTTPSock::ReadLine(const CString& + sLine.Token(2).Base64Decode(sUnhashed); + m_sUser = sUnhashed.Token(0, false, ":"); + m_sPass = sUnhashed.Token(1, true, ":"); +- m_bLoggedIn = OnLogin(m_sUser, m_sPass, true); ++ // Postpone authorization attempt until end of headers, because cookies should be read before that, otherwise session id will be overwritten in GetSession() + } else if (sName.Equals("Content-Length:")) { + m_uPostLen = sLine.Token(1).ToULong(); + if (m_uPostLen > MAX_POST_SIZE) +@@ -170,6 +170,14 @@ void CHTTPSock::ReadLine(const CString& + } else if (sLine.empty()) { + m_bGotHeader = true; + ++ if (!m_sUser.empty()) { ++ m_bLoggedIn = OnLogin(m_sUser, m_sPass, true); ++ if (!m_bLoggedIn) { ++ // Error message already was sent ++ return; ++ } ++ } ++ + if (m_bPost) { + m_sPostData = GetInternalReadBuffer(); + CheckPost(); diff --git a/net/znc/patches/006-Fix-954-Startup-failure-when-simple_away-is-loaded-a.patch b/net/znc/patches/006-Fix-954-Startup-failure-when-simple_away-is-loaded-a.patch new file mode 100644 index 000000000..ab0429357 --- /dev/null +++ b/net/znc/patches/006-Fix-954-Startup-failure-when-simple_away-is-loaded-a.patch @@ -0,0 +1,24 @@ +From 703a244b9b8c1b4af02a6132c5c70a748d98e3f8 Mon Sep 17 00:00:00 2001 +From: J-P Nurmi +Date: Tue, 28 Apr 2015 10:00:55 +0200 +Subject: [PATCH] Fix #954: Startup failure when simple_away is loaded + after awaynick + +--- + src/User.cpp | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/src/User.cpp ++++ b/src/User.cpp +@@ -1101,6 +1101,11 @@ bool CUser::LoadModule(const CString& sM + CFile fNVFile = CFile(GetUserPath() + "/moddata/" + sModName + "/.registry"); + + for (vector::iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) { ++ // Check whether the network already has this module loaded (#954) ++ if ((*it)->GetModules().FindModule(sModName)) { ++ continue; ++ } ++ + if (fNVFile.Exists()) { + CString sNetworkModPath = (*it)->GetNetworkPath() + "/moddata/" + sModName; + if (!CFile::Exists(sNetworkModPath)) { diff --git a/net/znc/patches/001-move_rootcheck_after_config.patch b/net/znc/patches/100-move_rootcheck_after_config.patch similarity index 78% rename from net/znc/patches/001-move_rootcheck_after_config.patch rename to net/znc/patches/100-move_rootcheck_after_config.patch index 8b3e3e703..84ee6aa6f 100644 --- a/net/znc/patches/001-move_rootcheck_after_config.patch +++ b/net/znc/patches/100-move_rootcheck_after_config.patch @@ -1,15 +1,15 @@ -From 5f655f9a25a377c01cb15517859eb514628a43d4 Mon Sep 17 00:00:00 2001 +From adf42357c9043c38d9a9b47544a1b46445bdae19 Mon Sep 17 00:00:00 2001 From: Jonas Gorski Date: Wed, 6 Apr 2011 04:10:23 +0200 Subject: [PATCH] Move the root check to after config parsing --- - src/main.cpp | 27 ++++++++++++++------------- - 1 files changed, 14 insertions(+), 13 deletions(-) + src/main.cpp | 27 ++++++++++++++------------- + 1 file changed, 14 insertions(+), 13 deletions(-) --- a/src/main.cpp +++ b/src/main.cpp -@@ -243,19 +243,6 @@ int main(int argc, char** argv) { +@@ -303,19 +303,6 @@ int main(int argc, char** argv) { CUtils::PrintStatus(true, ""); } @@ -17,7 +17,7 @@ Subject: [PATCH] Move the root check to after config parsing - CUtils::PrintError("You are running ZNC as root! Don't do that! There are not many valid"); - CUtils::PrintError("reasons for this and it can, in theory, cause great damage!"); - if (!bAllowRoot) { -- delete pZNC; +- CZNC::DestroyInstance(); - return 1; - } - CUtils::PrintError("You have been warned."); @@ -28,8 +28,8 @@ Subject: [PATCH] Move the root check to after config parsing - if (bMakeConf) { if (!pZNC->WriteNewConfig(sConfig)) { - delete pZNC; -@@ -276,6 +263,20 @@ int main(int argc, char** argv) { + CZNC::DestroyInstance(); +@@ -337,6 +324,20 @@ int main(int argc, char** argv) { return 1; } @@ -37,7 +37,7 @@ Subject: [PATCH] Move the root check to after config parsing + CUtils::PrintError("You are running ZNC as root! Don't do that! There are not many valid"); + CUtils::PrintError("reasons for this and it can, in theory, cause great damage!"); + if (!bAllowRoot) { -+ delete pZNC; ++ CZNC::DestroyInstance(); + return 1; + } + CUtils::PrintError("You have been warned."); diff --git a/net/znc/patches/003-Reduce_rebuild_time.patch b/net/znc/patches/101-Reduce_rebuild_time.patch similarity index 70% rename from net/znc/patches/003-Reduce_rebuild_time.patch rename to net/znc/patches/101-Reduce_rebuild_time.patch index 25c08e5b3..60d335c74 100644 --- a/net/znc/patches/003-Reduce_rebuild_time.patch +++ b/net/znc/patches/101-Reduce_rebuild_time.patch @@ -1,27 +1,28 @@ -From 94aff4c3389111fc85054eb06b40bea26a216d0c Mon Sep 17 00:00:00 2001 +From 0527869a72c27bfb25b5f92fdd77a04c39d939db Mon Sep 17 00:00:00 2001 From: Jonas Gorski Date: Sat, 16 Apr 2011 05:51:04 +0200 -Subject: [PATCH] Don't rebuild everything when the Makefile's timestamp changed +Subject: [PATCH] Don't rebuild everything when the Makefile's timestamp + changed --- - Makefile.in | 2 +- - modules/Makefile.in | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + Makefile.in | 2 +- + modules/Makefile.in | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) --- a/Makefile.in +++ b/Makefile.in -@@ -104,7 +104,7 @@ clean: +@@ -112,7 +112,7 @@ clean: distclean: clean rm -rf $(DISTCLEAN) --src/%.o: src/%.cpp Makefile -+src/%.o: src/%.cpp +-src/%.o: src/%.cpp Makefile include/znc/Csocket.h ++src/%.o: src/%.cpp include/znc/Csocket.h @mkdir -p .depend src $(E) Building core object $*... $(Q)$(CXX) $(CXXFLAGS) -c -o $@ $< -MD -MF .depend/$*.dep -MT $@ --- a/modules/Makefile.in +++ b/modules/Makefile.in -@@ -117,12 +117,12 @@ install_datadir: +@@ -112,12 +112,12 @@ install_datadir: clean: rm -rf $(CLEAN) diff --git a/net/znc/patches/004-restore_droproot.patch b/net/znc/patches/102-restore_droproot.patch similarity index 100% rename from net/znc/patches/004-restore_droproot.patch rename to net/znc/patches/102-restore_droproot.patch