[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