[Libreoffice-commits] online.git: loolwsd/Capabilities.hpp loolwsd/LOKitClient.cpp loolwsd/LOOLBroker.cpp loolwsd/LOOLKit.cpp loolwsd/LOOLWSD.cpp loolwsd/Makefile.am loolwsd/Util.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Sun Jan 3 07:17:29 PST 2016
loolwsd/Capabilities.hpp | 96 +++++++++++++++++++++++++++++++++++++++++++++++
loolwsd/LOKitClient.cpp | 2
loolwsd/LOOLBroker.cpp | 52 -------------------------
loolwsd/LOOLKit.cpp | 8 +--
loolwsd/LOOLWSD.cpp | 91 +++-----------------------------------------
loolwsd/Makefile.am | 2
loolwsd/Util.cpp | 6 +-
7 files changed, 113 insertions(+), 144 deletions(-)
New commits:
commit f48d61d25d938886fa4409da2d40e17d8ca4f27b
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Tue Dec 29 20:34:53 2015 -0500
loolwsd: dropCapability moved to Capabilities.hpp
Change-Id: Id84d485b446040df1d5398341af2b0e8f300ed63
Reviewed-on: https://gerrit.libreoffice.org/21060
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/Capabilities.hpp b/loolwsd/Capabilities.hpp
new file mode 100644
index 0000000..d50018f
--- /dev/null
+++ b/loolwsd/Capabilities.hpp
@@ -0,0 +1,96 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_CAPABILITIES
+#define INCLUDED_CAPABILITIES
+
+#ifdef __linux
+#include <sys/capability.h>
+#endif
+
+#include "Util.hpp"
+
+static
+void dropCapability(
+#ifdef __linux
+ cap_value_t capability
+#endif
+ )
+{
+#ifdef __linux
+ cap_t caps;
+ cap_value_t cap_list[] = { capability };
+
+ caps = cap_get_proc();
+ if (caps == nullptr)
+ {
+ Log::error("Error: cap_get_proc() failed.");
+ exit(1);
+ }
+
+ if (cap_set_flag(caps, CAP_EFFECTIVE, sizeof(cap_list)/sizeof(cap_list[0]), cap_list, CAP_CLEAR) == -1 ||
+ cap_set_flag(caps, CAP_PERMITTED, sizeof(cap_list)/sizeof(cap_list[0]), cap_list, CAP_CLEAR) == -1)
+ {
+ Log::error("Error: cap_set_flag() failed.");
+ exit(1);
+ }
+
+ if (cap_set_proc(caps) == -1)
+ {
+ Log::error("Error: cap_set_proc() failed.");
+ exit(1);
+ }
+
+ char *capText = cap_to_text(caps, nullptr);
+ Log::info("Capabilities now: " + std::string(capText));
+ cap_free(capText);
+
+ cap_free(caps);
+#endif
+ // We assume that on non-Linux we don't need to be root to be able to hardlink to files we
+ // don't own, so drop root.
+ if (geteuid() == 0 && getuid() != 0)
+ {
+ // The program is setuid root. Not normal on Linux where we use setcap, but if this
+ // needs to run on non-Linux Unixes, setuid root is what it will bneed to be to be able
+ // to do chroot().
+ if (setuid(getuid()) != 0)
+ {
+ Log::error("Error: setuid() failed.");
+ }
+ }
+#if ENABLE_DEBUG
+ if (geteuid() == 0 && getuid() == 0)
+ {
+#ifdef __linux
+ // Argh, awful hack
+ if (capability == CAP_FOWNER)
+ return;
+#endif
+
+ // Running under sudo, probably because being debugged? Let's drop super-user rights.
+ if (LOOLWSD::uid == 0)
+ {
+ struct passwd *nobody = getpwnam("nobody");
+ if (nobody)
+ LOOLWSD::uid = nobody->pw_uid;
+ else
+ LOOLWSD::uid = 65534;
+ }
+ if (setuid(LOOLWSD::uid) != 0)
+ {
+ Log::error("setuid() failed.");
+ }
+ }
+#endif
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/loolwsd/LOKitClient.cpp b/loolwsd/LOKitClient.cpp
index afbc62d..b6db978 100644
--- a/loolwsd/LOKitClient.cpp
+++ b/loolwsd/LOKitClient.cpp
@@ -101,7 +101,7 @@ protected:
return Application::EXIT_UNAVAILABLE;
}
- loKitDocument->pClass->registerCallback(loKitDocument, myCallback, NULL);
+ loKitDocument->pClass->registerCallback(loKitDocument, myCallback, nullptr);
loKitDocument->pClass->initializeForRendering(loKitDocument, nullptr);
diff --git a/loolwsd/LOOLBroker.cpp b/loolwsd/LOOLBroker.cpp
index 1262540..71e4d28 100644
--- a/loolwsd/LOOLBroker.cpp
+++ b/loolwsd/LOOLBroker.cpp
@@ -9,7 +9,6 @@
#include <sys/types.h>
#include <sys/wait.h>
-#include <sys/capability.h>
#include <utime.h>
#include <ftw.h>
@@ -33,6 +32,7 @@
#include <Poco/NamedMutex.h>
#include "Common.hpp"
+#include "Capabilities.hpp"
#include "Util.hpp"
// First include the grist of the helper process - ideally
@@ -150,56 +150,6 @@ namespace
if (nftw(source.c_str(), linkOrCopyFunction, 10, FTW_DEPTH) == -1)
Log::error("linkOrCopy: nftw() failed for '" + source + "'");
}
-
- void dropCapability(
-#ifdef __linux
- cap_value_t capability
-#endif
- )
- {
-#ifdef __linux
- cap_t caps;
- cap_value_t cap_list[] = { capability };
-
- caps = cap_get_proc();
- if (caps == nullptr)
- {
- Log::error("Error: cap_get_proc() failed.");
- exit(1);
- }
-
- if (cap_set_flag(caps, CAP_EFFECTIVE, sizeof(cap_list)/sizeof(cap_list[0]), cap_list, CAP_CLEAR) == -1 ||
- cap_set_flag(caps, CAP_PERMITTED, sizeof(cap_list)/sizeof(cap_list[0]), cap_list, CAP_CLEAR) == -1)
- {
- Log::error("Error: cap_set_flag() failed.");
- exit(1);
- }
-
- if (cap_set_proc(caps) == -1)
- {
- Log::error("Error: cap_set_proc() failed.");
- exit(1);
- }
-
- char *capText = cap_to_text(caps, nullptr);
- Log::info("Capabilities now: " + std::string(capText));
- cap_free(capText);
-
- cap_free(caps);
-#endif
- // We assume that on non-Linux we don't need to be root to be able to hardlink to files we
- // don't own, so drop root.
- if (geteuid() == 0 && getuid() != 0)
- {
- // The program is setuid root. Not normal on Linux where we use setcap, but if this
- // needs to run on non-Linux Unixes, setuid root is what it will bneed to be to be able
- // to do chroot().
- if (setuid(getuid()) != 0)
- {
- Log::error("Error: setuid() failed.");
- }
- }
- }
}
class PipeRunnable: public Runnable
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index 37bf655..f54c8a2 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -77,10 +77,10 @@ namespace
aSigAction.sa_flags = 0;
aSigAction.sa_handler = (isIgnored ? SIG_IGN : handleSignal);
- sigaction(SIGTERM, &aSigAction, NULL);
- sigaction(SIGINT, &aSigAction, NULL);
- sigaction(SIGQUIT, &aSigAction, NULL);
- sigaction(SIGHUP, &aSigAction, NULL);
+ sigaction(SIGTERM, &aSigAction, nullptr);
+ sigaction(SIGINT, &aSigAction, nullptr);
+ sigaction(SIGQUIT, &aSigAction, nullptr);
+ sigaction(SIGHUP, &aSigAction, nullptr);
#endif
}
}
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index fe95041..47cb3ed 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -46,7 +46,6 @@ DEALINGS IN THE SOFTWARE.
#include <unistd.h>
#ifdef __linux
-#include <sys/capability.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/prctl.h>
@@ -104,6 +103,7 @@ DEALINGS IN THE SOFTWARE.
#include <Poco/Environment.h>
#include "Common.hpp"
+#include "Capabilities.hpp"
#include "LOOLProtocol.hpp"
#include "LOOLSession.hpp"
#include "MasterProcessSession.hpp"
@@ -152,83 +152,6 @@ using Poco::NamedMutex;
using Poco::ProcessHandle;
using Poco::URI;
-namespace
-{
- void dropCapability(
-#ifdef __linux
- cap_value_t capability
-#endif
- )
- {
-#ifdef __linux
- cap_t caps;
- cap_value_t cap_list[] = { capability };
-
- caps = cap_get_proc();
- if (caps == NULL)
- {
- Log::error("cap_get_proc() failed.");
- exit(1);
- }
-
- if (cap_set_flag(caps, CAP_EFFECTIVE, sizeof(cap_list)/sizeof(cap_list[0]), cap_list, CAP_CLEAR) == -1 ||
- cap_set_flag(caps, CAP_PERMITTED, sizeof(cap_list)/sizeof(cap_list[0]), cap_list, CAP_CLEAR) == -1)
- {
- Log::error("cap_set_flag() failed.");
- exit(1);
- }
-
- if (cap_set_proc(caps) == -1)
- {
- Log::error("cap_set_proc() failed.");
- exit(1);
- }
-
- char *capText = cap_to_text(caps, NULL);
- Log::info(std::string("Capabilities now: ") + capText);
- cap_free(capText);
-
- cap_free(caps);
-#endif
- // We assume that on non-Linux we don't need to be root to be able to hardlink to files we
- // don't own, so drop root.
- if (geteuid() == 0 && getuid() != 0)
- {
- // The program is setuid root. Not normal on Linux where we use setcap, but if this
- // needs to run on non-Linux Unixes, setuid root is what it will bneed to be to be able
- // to do chroot().
- if (setuid(getuid()) != 0)
- {
- Log::error("setuid() failed.");
- }
- }
-#if ENABLE_DEBUG
- if (geteuid() == 0 && getuid() == 0)
- {
-#ifdef __linux
- // Argh, awful hack
- if (capability == CAP_FOWNER)
- return;
-#endif
-
- // Running under sudo, probably because being debugged? Let's drop super-user rights.
- if (LOOLWSD::uid == 0)
- {
- struct passwd *nobody = getpwnam("nobody");
- if (nobody)
- LOOLWSD::uid = nobody->pw_uid;
- else
- LOOLWSD::uid = 65534;
- }
- if (setuid(LOOLWSD::uid) != 0)
- {
- Log::error("setuid() failed.");
- }
- }
-#endif
- }
-}
-
class QueueHandler: public Runnable
{
public:
@@ -708,10 +631,10 @@ void LOOLWSD::setSignals(bool isIgnored)
aSigAction.sa_flags = 0;
aSigAction.sa_handler = (isIgnored ? SIG_IGN : handleSignal);
- sigaction(SIGTERM, &aSigAction, NULL);
- sigaction(SIGINT, &aSigAction, NULL);
- sigaction(SIGQUIT, &aSigAction, NULL);
- sigaction(SIGHUP, &aSigAction, NULL);
+ sigaction(SIGTERM, &aSigAction, nullptr);
+ sigaction(SIGINT, &aSigAction, nullptr);
+ sigaction(SIGQUIT, &aSigAction, nullptr);
+ sigaction(SIGHUP, &aSigAction, nullptr);
#endif
}
@@ -864,8 +787,8 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
Poco::Environment::set("LOK_VIEW_CALLBACK", "1");
#ifdef __linux
- char *locale = setlocale(LC_ALL, NULL);
- if (locale == NULL || std::strcmp(locale, "C") == 0)
+ char *locale = setlocale(LC_ALL, nullptr);
+ if (locale == nullptr || std::strcmp(locale, "C") == 0)
setlocale(LC_ALL, "en_US.utf8");
setSignals(false);
diff --git a/loolwsd/Makefile.am b/loolwsd/Makefile.am
index 02cfa0d..0d0f221 100644
--- a/loolwsd/Makefile.am
+++ b/loolwsd/Makefile.am
@@ -28,7 +28,7 @@ loolbroker_SOURCES = LOOLBroker.cpp $(broker_shared_sources)
loolmap_SOURCES = loolmap.c
noinst_HEADERS = LOKitHelper.hpp LOOLProtocol.hpp LOOLSession.hpp MasterProcessSession.hpp ChildProcessSession.hpp \
- LOOLWSD.hpp LoadTest.hpp MessageQueue.hpp TileCache.hpp Util.hpp Png.hpp Common.hpp \
+ LOOLWSD.hpp LoadTest.hpp MessageQueue.hpp TileCache.hpp Util.hpp Png.hpp Common.hpp Capabilities.hpp \
bundled/include/LibreOfficeKit/LibreOfficeKit.h bundled/include/LibreOfficeKit/LibreOfficeKitEnums.h \
bundled/include/LibreOfficeKit/LibreOfficeKitInit.h bundled/include/LibreOfficeKit/LibreOfficeKitTypes.h
diff --git a/loolwsd/Util.cpp b/loolwsd/Util.cpp
index 17d07df..62883c2 100644
--- a/loolwsd/Util.cpp
+++ b/loolwsd/Util.cpp
@@ -170,7 +170,7 @@ namespace Util
bool windowingAvailable()
{
#ifdef __linux
- return std::getenv("DISPLAY") != NULL;
+ return std::getenv("DISPLAY") != nullptr;
#endif
return false;
@@ -178,13 +178,13 @@ namespace Util
bool encodePNGAndAppendToBuffer(unsigned char *pixmap, int width, int height, std::vector<char>& output, LibreOfficeKitTileMode mode)
{
- png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+ png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
png_infop info_ptr = png_create_info_struct(png_ptr);
if (setjmp(png_jmpbuf(png_ptr)))
{
- png_destroy_write_struct(&png_ptr, NULL);
+ png_destroy_write_struct(&png_ptr, nullptr);
return false;
}
More information about the Libreoffice-commits
mailing list