commit:     bb32b155938a396385e6c1492eb7754a230cbdef
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Mon Aug 24 02:05:27 2020 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Mon Aug 24 02:05:27 2020 +0000
URL:        https://gitweb.gentoo.org/proj/kde-sunset.git/commit/?id=bb32b155

net-misc/smb4k: Import 1.2.3-r1 from before slot 4 removal

Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 .../smb4k/files/smb4k-1.2.3-CVE-2017-8849.patch    | 365 +++++++++++++++++++++
 net-misc/smb4k/smb4k-1.2.3-r1.ebuild               |  29 ++
 2 files changed, 394 insertions(+)

diff --git a/net-misc/smb4k/files/smb4k-1.2.3-CVE-2017-8849.patch 
b/net-misc/smb4k/files/smb4k-1.2.3-CVE-2017-8849.patch
new file mode 100644
index 00000000..b4f619ff
--- /dev/null
+++ b/net-misc/smb4k/files/smb4k-1.2.3-CVE-2017-8849.patch
@@ -0,0 +1,365 @@
+From 71554140bdaede27b95dbe4c9b5a028a83c83cce Mon Sep 17 00:00:00 2001
+From: Alexander Reinholdt <[email protected]>
+Date: Wed, 10 May 2017 10:23:34 +0200
+Subject: Find the mount/umount commands in the helper
+
+Instead of trusting what we get passed in
+CVE-2017-8849
+---
+ core/smb4kglobal.cpp         | 65 +++++++++++++++++++++++++++++++++++-
+ core/smb4kglobal.h           | 16 ++++++++-
+ core/smb4kmounter_p.cpp      | 78 ++++----------------------------------------
+ helpers/CMakeLists.txt       |  6 +++-
+ helpers/smb4kmounthelper.cpp | 51 +++++++++++++++++++++++++++--
+ 5 files changed, 139 insertions(+), 77 deletions(-)
+
+diff --git a/core/smb4kglobal.cpp b/core/smb4kglobal.cpp
+index 172016f..818a78a 100644
+--- a/core/smb4kglobal.cpp
++++ b/core/smb4kglobal.cpp
+@@ -2,7 +2,7 @@
+     smb4kglobal  -  This is the global namespace for Smb4K.
+                              -------------------
+     begin                : Sa Apr 2 2005
+-    copyright            : (C) 2005-2014 by Alexander Reinholdt
++    copyright            : (C) 2005-2017 by Alexander Reinholdt
+     email                : [email protected]
+  ***************************************************************************/
+ 
+@@ -851,3 +851,66 @@ QStringList Smb4KGlobal::whitelistedMountArguments()
+ #endif
+ 
+ 
++const QString Smb4KGlobal::findMountExecutable()
++{
++  QString mount;
++  QStringList paths;
++  paths << "/bin";
++  paths << "/sbin";
++  paths << "/usr/bin";
++  paths << "/usr/sbin";
++  paths << "/usr/local/bin";
++  paths << "/usr/local/sbin";
++
++  for (int i = 0; i < paths.size(); ++i)
++  {
++#if defined(Q_OS_LINUX)
++    mount = KGlobal::dirs()->findExe("mount.cifs", paths.at(i));
++#elif defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
++    mount = KGlobal::dirs()->findExe("mount_smbfs", paths.at(i));
++#endif
++
++    if (!mount.isEmpty())
++    {
++      break;
++    }
++    else
++    {
++      continue;
++    }
++  }
++  
++  return mount;
++}
++
++
++const QString Smb4KGlobal::findUmountExecutable()
++{
++  // Find the umount program.
++  QString umount;
++  QStringList paths;
++  paths << "/bin";
++  paths << "/sbin";
++  paths << "/usr/bin";
++  paths << "/usr/sbin";
++  paths << "/usr/local/bin";
++  paths << "/usr/local/sbin";
++
++  for ( int i = 0; i < paths.size(); ++i )
++  {
++    umount = KGlobal::dirs()->findExe("umount", paths.at(i));
++
++    if (!umount.isEmpty())
++    {
++      break;
++    }
++    else
++    {
++      continue;
++    }
++  }
++  
++  return umount;
++}
++
++
+diff --git a/core/smb4kglobal.h b/core/smb4kglobal.h
+index db1805b..0ef377d 100644
+--- a/core/smb4kglobal.h
++++ b/core/smb4kglobal.h
+@@ -2,7 +2,7 @@
+     smb4kglobal  -  This is the global namespace for Smb4K.
+                              -------------------
+     begin                : Sa Apr 2 2005
+-    copyright            : (C) 2005-2014 by Alexander Reinholdt
++    copyright            : (C) 2005-2017 by Alexander Reinholdt
+     email                : [email protected]
+  ***************************************************************************/
+ 
+@@ -455,6 +455,20 @@ namespace Smb4KGlobal
+    */
+   KDE_EXPORT QStringList whitelistedMountArguments();
+ #endif
++  
++  /**
++   * Find the mount executable on the system.
++   * 
++   * @returns the path of the mount executable.
++   */
++  KDE_EXPORT const QString findMountExecutable();
++  
++  /**
++   * Find the umount executable on the system.
++   * 
++   * @returns the path of the umount executable.
++   */
++  KDE_EXPORT const QString findUmountExecutable();
+ };
+ 
+ #endif
+diff --git a/core/smb4kmounter_p.cpp b/core/smb4kmounter_p.cpp
+index 63a87ed..342052a 100644
+--- a/core/smb4kmounter_p.cpp
++++ b/core/smb4kmounter_p.cpp
+@@ -207,30 +207,7 @@ bool Smb4KMountJob::createMountAction(Smb4KShare *share, 
Action *action)
+ //
+ bool Smb4KMountJob::fillArgs(Smb4KShare *share, QMap<QString, QVariant>& map)
+ {
+-  // Find the mount program.
+-  QString mount;
+-  QStringList paths;
+-  paths << "/bin";
+-  paths << "/sbin";
+-  paths << "/usr/bin";
+-  paths << "/usr/sbin";
+-  paths << "/usr/local/bin";
+-  paths << "/usr/local/sbin";
+-
+-  for (int i = 0; i < paths.size(); ++i)
+-  {
+-    mount = KGlobal::dirs()->findExe("mount.cifs", paths.at(i));
+-
+-    if (!mount.isEmpty())
+-    {
+-      map.insert("mh_command", mount);
+-      break;
+-    }
+-    else
+-    {
+-      continue;
+-    }
+-  }
++  const QString mount = findMountExecutable();
+ 
+   if (mount.isEmpty())
+   {
+@@ -242,6 +219,8 @@ bool Smb4KMountJob::fillArgs(Smb4KShare *share, 
QMap<QString, QVariant>& map)
+     // Do nothing
+   }
+   
++  map.insert("mh_command", mount);
++  
+   // Mount arguments.
+   QMap<QString, QString> global_options = globalSambaOptions();
+   Smb4KCustomOptions *options  = 
Smb4KCustomOptionsManager::self()->findOptions(share);
+@@ -729,30 +708,7 @@ bool Smb4KMountJob::fillArgs(Smb4KShare *share, 
QMap<QString, QVariant>& map)
+ //
+ bool Smb4KMountJob::fillArgs(Smb4KShare *share, QMap<QString, QVariant>& map)
+ {
+-  // Find the mount program.
+-  QString mount;
+-  QStringList paths;
+-  paths << "/bin";
+-  paths << "/sbin";
+-  paths << "/usr/bin";
+-  paths << "/usr/sbin";
+-  paths << "/usr/local/bin";
+-  paths << "/usr/local/sbin";
+-
+-  for (int i = 0; i < paths.size(); ++i)
+-  {
+-    mount = KGlobal::dirs()->findExe("mount_smbfs", paths.at(i));
+-
+-    if (!mount.isEmpty())
+-    {
+-      map.insert("mh_command", mount);
+-      break;
+-    }
+-    else
+-    {
+-      continue;
+-    }
+-  }
++  const QString mount = findMountExecutable();
+ 
+   if (mount.isEmpty())
+   {
+@@ -764,6 +720,8 @@ bool Smb4KMountJob::fillArgs(Smb4KShare *share, 
QMap<QString, QVariant>& map)
+     // Do nothing
+   }
+   
++  map.insert("mh_command", mount);
++  
+   // Mount arguments.
+   QMap<QString, QString> global_options = globalSambaOptions();
+   Smb4KCustomOptions *options  = 
Smb4KCustomOptionsManager::self()->findOptions(share);
+@@ -1253,29 +1211,7 @@ bool Smb4KUnmountJob::createUnmountAction(Smb4KShare 
*share, Action *action)
+     // Do nothing
+   }
+   
+-  // Find the umount program.
+-  QString umount;
+-  QStringList paths;
+-  paths << "/bin";
+-  paths << "/sbin";
+-  paths << "/usr/bin";
+-  paths << "/usr/sbin";
+-  paths << "/usr/local/bin";
+-  paths << "/usr/local/sbin";
+-
+-  for ( int i = 0; i < paths.size(); ++i )
+-  {
+-    umount = KGlobal::dirs()->findExe("umount", paths.at(i));
+-
+-    if (!umount.isEmpty())
+-    {
+-      break;
+-    }
+-    else
+-    {
+-      continue;
+-    }
+-  }
++  const QString umount = findUmountExecutable();
+ 
+   if (umount.isEmpty() && !m_silent)
+   {
+diff --git a/helpers/CMakeLists.txt b/helpers/CMakeLists.txt
+index e9e670b..cd4228d 100644
+--- a/helpers/CMakeLists.txt
++++ b/helpers/CMakeLists.txt
+@@ -1,7 +1,11 @@
++include_directories(
++  ${CMAKE_SOURCE_DIR}/core
++  ${CMAKE_BINARY_DIR}/core )
++
+ set( smb4kmounthelper_SRCS smb4kmounthelper.cpp )
+ 
+ kde4_add_executable( mounthelper ${smb4kmounthelper_SRCS} )
+-target_link_libraries( mounthelper ${KDE4_KDECORE_LIBS} ${KDE4_KIO_LIBS} )
++target_link_libraries( mounthelper smb4kcore ${KDE4_KDECORE_LIBS} 
${KDE4_KIO_LIBS} )
+ install( TARGETS mounthelper DESTINATION ${LIBEXEC_INSTALL_DIR} )
+ 
+ kde4_install_auth_helper_files( mounthelper net.sourceforge.smb4k.mounthelper 
root )
+diff --git a/helpers/smb4kmounthelper.cpp b/helpers/smb4kmounthelper.cpp
+index a2f2fed..7959020 100644
+--- a/helpers/smb4kmounthelper.cpp
++++ b/helpers/smb4kmounthelper.cpp
+@@ -29,6 +29,7 @@
+ 
+ // application specific includes
+ #include "smb4kmounthelper.h"
++#include "core/smb4kglobal.h"
+ 
+ // Qt includes
+ #include <QProcessEnvironment>
+@@ -43,12 +44,35 @@
+ #include <kmountpoint.h>
+ #include <kurl.h>
+ 
++using namespace Smb4KGlobal;
++
+ KDE4_AUTH_HELPER_MAIN( "net.sourceforge.smb4k.mounthelper", Smb4KMountHelper )
+ 
+ 
+ ActionReply Smb4KMountHelper::mount(const QVariantMap &args)
+ {
+   ActionReply reply;
++  
++  //
++  // Get the mount executable
++  //
++  const QString mount = findMountExecutable();
++  
++  //
++  // Check the executable
++  //
++  if (mount != args["mh_command"].toString())
++  {
++    // Something weird is going on, bail out.
++    reply.setErrorCode(ActionReply::HelperError);
++    reply.setErrorDescription(i18n("Wrong executable passed. Bailing out."));
++    return reply;
++  }
++  else
++  {
++    // Do nothing
++  }
++  
+   // The mountpoint is a unique and can be used to
+   // find the share.
+   reply.addData("mh_mountpoint", args["mh_mountpoint"]);
+@@ -75,12 +99,12 @@ ActionReply Smb4KMountHelper::mount(const QVariantMap 
&args)
+   // Set the mount command here.
+   QStringList command;
+ #if defined(Q_OS_LINUX)
+-  command << args["mh_command"].toString();
++  command << mount;
+   command << args["mh_unc"].toString();
+   command << args["mh_mountpoint"].toString();
+   command << args["mh_options"].toStringList();
+ #elif defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
+-  command << args["mh_command"].toString();
++  command << mount;
+   command << args["mh_options"].toStringList();
+   command << args["mh_unc"].toString();
+   command << args["mh_mountpoint"].toString();
+@@ -161,6 +185,27 @@ ActionReply Smb4KMountHelper::mount(const QVariantMap 
&args)
+ ActionReply Smb4KMountHelper::unmount(const QVariantMap &args)
+ {
+   ActionReply reply;
++  
++  //
++  // Get the umount executable
++  //
++  const QString umount = findUmountExecutable();
++  
++  //
++  // Check the executable
++  //
++  if (umount != args["mh_command"].toString())
++  {
++    // Something weird is going on, bail out.
++    reply.setErrorCode(ActionReply::HelperError);
++    reply.setErrorDescription(i18n("Wrong executable passed. Bailing out."));
++    return reply;
++  }
++  else
++  {
++    // Do nothing
++  }
++  
+   // The mountpoint is a unique and can be used to
+   // find the share.
+   reply.addData("mh_mountpoint", args["mh_mountpoint"]);
+@@ -208,7 +253,7 @@ ActionReply Smb4KMountHelper::unmount(const QVariantMap 
&args)
+   
+   // Set the umount command here.
+   QStringList command;
+-  command << args["mh_command"].toString();
++  command << umount;
+   command << args["mh_options"].toStringList();
+   command << args["mh_mountpoint"].toString();
+ 
+-- 
+cgit v0.11.2

diff --git a/net-misc/smb4k/smb4k-1.2.3-r1.ebuild 
b/net-misc/smb4k/smb4k-1.2.3-r1.ebuild
new file mode 100644
index 00000000..b0eaa621
--- /dev/null
+++ b/net-misc/smb4k/smb4k-1.2.3-r1.ebuild
@@ -0,0 +1,29 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+DECLARATIVE_REQUIRED="always"
+KDE_LINGUAS="bg bs ca ca@valencia cs da de en_GB eo es et fi fr ga gl hu is it
+ja ko lt mai mr nb nds nl nn pl pt pt_BR ro ru sk sv tr ug uk zh_CN zh_TW"
+KDE_HANDBOOK="optional"
+KDE_DOC_DIRS="doc doc-translations/%lingua_${PN}"
+inherit kde4-base
+
+DESCRIPTION="The advanced network neighborhood browser by KDE"
+HOMEPAGE="https://sourceforge.net/projects/smb4k/";
+SRC_URI="mirror://sourceforge/${PN}/${P}.tar.xz"
+
+LICENSE="GPL-2"
+SLOT="4"
+KEYWORDS="amd64 x86"
+IUSE="debug"
+
+RDEPEND="net-fs/samba[cups]"
+DEPEND="${RDEPEND}
+       sys-devel/gettext
+"
+
+DOCS=( AUTHORS BUGS ChangeLog README )
+
+PATCHES=( "${FILESDIR}/${P}-CVE-2017-8849.patch" )

Reply via email to