[arch-commits] Commit in znc/trunk (2 files)
Sébastien Luttringer
seblu at nymeria.archlinux.org
Mon May 5 23:38:13 UTC 2014
Date: Tuesday, May 6, 2014 @ 01:38:13
Author: seblu
Revision: 110737
upgpkg: znc 1.2-3
- fix FS#39854
Added:
znc/trunk/01-sec-correctly-handle-channel-names.patch
Modified:
znc/trunk/PKGBUILD
---------------------------------------------+
01-sec-correctly-handle-channel-names.patch | 72 ++++++++++++++++++++++++++
PKGBUILD | 12 +++-
2 files changed, 81 insertions(+), 3 deletions(-)
Added: 01-sec-correctly-handle-channel-names.patch
===================================================================
--- 01-sec-correctly-handle-channel-names.patch (rev 0)
+++ 01-sec-correctly-handle-channel-names.patch 2014-05-05 23:38:13 UTC (rev 110737)
@@ -0,0 +1,72 @@
+From 8756be513ab6663dcd64087006b257ff34e8e487 Mon Sep 17 00:00:00 2001
+From: Uli Schlachter <psychon at znc.in>
+Date: Sun, 13 Apr 2014 20:36:55 +0200
+Subject: [PATCH] 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 at znc.in>
+(cherry picked from commit 5e6e3be32acfeadeaf1fb3bb17bada08aec6432f)
+---
+ modules/webadmin.cpp | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp
+index ec67508..2a03367 100644
+--- a/modules/webadmin.cpp
++++ b/modules/webadmin.cpp
+@@ -667,13 +667,19 @@ class CWebAdminMod : public CModule {
+ return true;
+ }
+
+- if (pNetwork->FindChan(sChanName.Token(0))) {
+- WebSock.PrintErrorPage("Channel [" + sChanName.Token(0) + "] already exists");
++ // This could change the channel name and e.g. add a "#" prefix
++ pChan = new CChan(sChanName, pNetwork, true);
++
++ if (pNetwork->FindChan(pChan->GetName())) {
++ WebSock.PrintErrorPage("Channel [" + pChan->GetName() + "] already exists");
++ delete pChan;
+ return true;
+ }
+
+- pChan = new CChan(sChanName, pNetwork, true);
+- pNetwork->AddChan(pChan);
++ if (!pNetwork->AddChan(pChan)) {
++ WebSock.PrintErrorPage("Could not add channel [" + pChan->GetName() + "]");
++ return true;
++ }
+ }
+
+ pChan->SetBufferCount(WebSock.GetParam("buffercount").ToUInt(), spSession->IsAdmin());
+@@ -699,7 +705,7 @@ class CWebAdminMod : public CModule {
+
+ CTemplate TmplMod;
+ TmplMod["User"] = pUser->GetUserName();
+- TmplMod["ChanName"] = sChanName;
++ TmplMod["ChanName"] = pChan->GetName();
+ TmplMod["WebadminAction"] = "change";
+ FOR_EACH_MODULE(it, pNetwork) {
+ (*it)->OnEmbeddedWebRequest(WebSock, "webadmin/channel", TmplMod);
+--
+1.9.1
+
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2014-05-05 22:46:18 UTC (rev 110736)
+++ PKGBUILD 2014-05-05 23:38:13 UTC (rev 110737)
@@ -5,7 +5,7 @@
pkgname=znc
pkgver=1.2
-pkgrel=2
+pkgrel=3
pkgdesc='An IRC bouncer with modules & scripts support'
url='http://en.znc.in/wiki/index.php/ZNC'
license=('GPL2')
@@ -17,9 +17,15 @@
'perl: modperl module'
'cyrus-sasl: saslauth module')
install=$pkgname.install
-source=("http://znc.in/releases/$pkgname-$pkgver.tar.gz")
-md5sums=('ef18e5402a82cc3fcab5c2ac5c2e6f3b')
+source=("http://znc.in/releases/$pkgname-$pkgver.tar.gz"
+ '01-sec-correctly-handle-channel-names.patch')
+md5sums=('ef18e5402a82cc3fcab5c2ac5c2e6f3b'
+ 'SKIP')
+prepare() {
+ patch -p1 -d $pkgname-$pkgver < 01-sec-correctly-handle-channel-names.patch
+}
+
build() {
cd $pkgname-$pkgver
./configure --prefix=/usr \
More information about the arch-commits
mailing list