From fba3ad56b4ac654b60b4096bb6471c26bdba3226 Mon Sep 17 00:00:00 2001 From: Martin Kampas Date: Fri, 24 May 2013 06:57:35 +0000 Subject: [PATCH] [sandbox] Re-enable sandbox dependent code Reverts parts of 1cf47e0a62af9788edc0d74286af63043925bf1f --- libssu/libssu.pro | 2 ++ libssu/ssusettings.cpp | 21 ++++-------- libssu/ssusettings.h | 1 - ssuks/ssukickstarter.cpp | 3 +- ssuks/ssuks.cpp | 17 +++++++--- tests/tests.pro | 1 + tests/ut_coreconfig/main.cpp | 3 +- tests/ut_deviceinfo/main.cpp | 3 +- tests/ut_repomanager/main.cpp | 3 +- tests/ut_rndssucli/rndssuclitest.cpp | 5 +-- tests/ut_sandbox/sandboxtest.cpp | 48 ++++++++++++++-------------- tests/ut_urlresolver/main.cpp | 3 +- 12 files changed, 53 insertions(+), 57 deletions(-) diff --git a/libssu/libssu.pro b/libssu/libssu.pro index d5f1aee..ca5899d 100644 --- a/libssu/libssu.pro +++ b/libssu/libssu.pro @@ -12,12 +12,14 @@ public_headers = \ HEADERS = \ $${public_headers} \ + sandbox_p.h \ ssucoreconfig.h \ mobility-booty/qofonoservice_linux_p.h \ mobility-booty/qsysteminfo_linux_common_p.h \ mobility-booty/qsysteminfo_dbus_p.h SOURCES = \ + sandbox.cpp \ ssu.cpp \ ssucoreconfig.cpp \ ssudeviceinfo.cpp \ diff --git a/libssu/ssusettings.cpp b/libssu/ssusettings.cpp index 4322abd..2370b5a 100644 --- a/libssu/ssusettings.cpp +++ b/libssu/ssusettings.cpp @@ -10,6 +10,7 @@ #include #include +#include "sandbox_p.h" #include "ssusettings.h" #include "ssulog.h" @@ -18,32 +19,22 @@ SsuSettings::SsuSettings(): QSettings(){ } SsuSettings::SsuSettings(const QString &fileName, Format format, QObject *parent): - QSettings(SsuSettings::sandboxPrefix() + fileName, format, parent){ + QSettings(Sandbox::map(fileName), format, parent){ } SsuSettings::SsuSettings(const QString &fileName, Format format, const QString &defaultFileName, QObject *parent): - QSettings(SsuSettings::sandboxPrefix() + fileName, format, parent){ - defaultSettingsFile = SsuSettings::sandboxPrefix() + defaultFileName; + QSettings(Sandbox::map(fileName), format, parent){ + defaultSettingsFile = Sandbox::map(defaultFileName); upgrade(); } SsuSettings::SsuSettings(const QString &fileName, const QString &settingsDirectory, QObject *parent): - QSettings(SsuSettings::sandboxPrefix() + fileName, QSettings::IniFormat, parent){ - settingsd = SsuSettings::sandboxPrefix() + settingsDirectory; + QSettings(Sandbox::map(fileName), QSettings::IniFormat, parent){ + settingsd = Sandbox::map(settingsDirectory); merge(); } -QString SsuSettings::sandboxPrefix(){ - /// @TODO: do some verification on the sandbox dir before using it - QString sandboxDir = getenv("SSU_SANDBOX_DIR"); - - if (!sandboxDir.isEmpty() && !sandboxDir.endsWith("/")) - sandboxDir += "/"; - - return sandboxDir; -} - void SsuSettings::merge(bool keepOld){ if (settingsd == "") return; diff --git a/libssu/ssusettings.h b/libssu/ssusettings.h index 28bd51c..55a5c4e 100644 --- a/libssu/ssusettings.h +++ b/libssu/ssusettings.h @@ -28,7 +28,6 @@ class SsuSettings: public QSettings { * style settings are supported in this mode. */ SsuSettings(const QString &fileName, const QString &settingsDirectory, QObject *parent=0); - static QString sandboxPrefix(); private: QString defaultSettingsFile, settingsd; diff --git a/ssuks/ssukickstarter.cpp b/ssuks/ssukickstarter.cpp index 09dfef4..d956984 100644 --- a/ssuks/ssukickstarter.cpp +++ b/ssuks/ssukickstarter.cpp @@ -10,6 +10,7 @@ #include #include "ssukickstarter.h" +#include "libssu/sandbox_p.h" #include "libssu/ssurepomanager.h" #include "libssu/ssuvariables.h" @@ -22,7 +23,7 @@ SsuKickstarter::SsuKickstarter() { - pathPrefix = SsuSettings::sandboxPrefix(); + pathPrefix = Sandbox::effectiveRootDir().path(); SsuDeviceInfo deviceInfo; deviceModel = deviceInfo.deviceModel(); diff --git a/ssuks/ssuks.cpp b/ssuks/ssuks.cpp index 1550101..7baf498 100644 --- a/ssuks/ssuks.cpp +++ b/ssuks/ssuks.cpp @@ -15,6 +15,7 @@ #include "ssukickstarter.h" #include "constants.h" +#include "libssu/sandbox_p.h" #include "ssuks.h" @@ -43,14 +44,13 @@ void SsuKs::run(){ } QString sandbox; + Sandbox *sb; if (repoParameters.contains("sandbox")){ - setenv("SSU_SANDBOX_DIR", repoParameters.value("sandbox").toLatin1(), 1); sandbox = repoParameters.value("sandbox"); repoParameters.remove("sandbox"); - } - sandbox = SsuSettings::sandboxPrefix(); - if (!sandbox.isEmpty()){ + + // copy files into sandbox QDirIterator it(SSU_DATA_DIR, QDir::AllEntries|QDir::NoDot|QDir::NoDotDot, QDirIterator::Subdirectories); while (it.hasNext()){ it.next(); @@ -72,6 +72,15 @@ void SsuKs::run(){ QString("%1/%2") .arg(sandbox) .arg(SSU_BOARD_MAPPING_CONFIGURATION_DIR)); + + sb = new Sandbox(sandbox, Sandbox::UseDirectly, Sandbox::ThisProcess); + + if (sb->activate()) + qout << "Using sandbox at " << sandbox << endl; + else { + qout << "Failed to activate sandbox" << endl; + return; + } } SsuKickstarter kickstarter; diff --git a/tests/tests.pro b/tests/tests.pro index 0c73e02..a4c143b 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -7,6 +7,7 @@ SUBDIRS = \ ut_deviceinfo \ ut_repomanager \ ut_rndssucli \ + ut_sandbox \ ut_settings \ ut_ssuurlresolver \ ut_urlresolver \ diff --git a/tests/ut_coreconfig/main.cpp b/tests/ut_coreconfig/main.cpp index c84b3a4..6fc2205 100644 --- a/tests/ut_coreconfig/main.cpp +++ b/tests/ut_coreconfig/main.cpp @@ -7,16 +7,15 @@ #include +#include "libssu/sandbox_p.h" #include "coreconfigtest.h" int main(int argc, char **argv){ - /* Sandbox sandbox(QString("%1/configroot").arg(TESTS_DATA_PATH), Sandbox::UseAsSkeleton, Sandbox::ThisProcess); if (!sandbox.activate()){ qFatal("Failed to activate sandbox"); } - */ CoreconfigTest coreconfigTest; diff --git a/tests/ut_deviceinfo/main.cpp b/tests/ut_deviceinfo/main.cpp index ad93482..1e363a9 100644 --- a/tests/ut_deviceinfo/main.cpp +++ b/tests/ut_deviceinfo/main.cpp @@ -7,16 +7,15 @@ #include +#include "libssu/sandbox_p.h" #include "deviceinfotest.h" int main(int argc, char **argv){ - /* Sandbox sandbox(QString("%1/configroot").arg(TESTS_DATA_PATH), Sandbox::UseAsSkeleton, Sandbox::ThisProcess); if (!sandbox.activate()){ qFatal("Failed to activate sandbox"); } - */ DeviceInfoTest deviceinfoTest; diff --git a/tests/ut_repomanager/main.cpp b/tests/ut_repomanager/main.cpp index 6e8a67d..bf999f6 100644 --- a/tests/ut_repomanager/main.cpp +++ b/tests/ut_repomanager/main.cpp @@ -7,16 +7,15 @@ #include +#include "libssu/sandbox_p.h" #include "repomanagertest.h" int main(int argc, char **argv){ - /* Sandbox sandbox(QString("%1/configroot").arg(TESTS_DATA_PATH), Sandbox::UseAsSkeleton, Sandbox::ThisProcess); if (!sandbox.activate()){ qFatal("Failed to activate sandbox"); } - */ RepoManagerTest repomanagerTest; diff --git a/tests/ut_rndssucli/rndssuclitest.cpp b/tests/ut_rndssucli/rndssuclitest.cpp index 2cae757..6ac423f 100644 --- a/tests/ut_rndssucli/rndssuclitest.cpp +++ b/tests/ut_rndssucli/rndssuclitest.cpp @@ -12,12 +12,12 @@ #include +#include "libssu/sandbox_p.h" #include "testutils/process.h" typedef QStringList Args; // improve readability void RndSsuCliTest::init(){ - /* Q_ASSERT(m_sandbox == 0); m_sandbox = new Sandbox(QString("%1/configroot").arg(TESTS_DATA_PATH), @@ -26,14 +26,11 @@ void RndSsuCliTest::init(){ QFAIL("Failed to activate sandbox"); } setenv("LD_PRELOAD", qPrintable(QString("%1/libsandboxhook.so").arg(TESTS_PATH)), 1); - */ } void RndSsuCliTest::cleanup(){ - /* delete m_sandbox; m_sandbox = 0; - */ } void RndSsuCliTest::testSubcommandFlavour(){ diff --git a/tests/ut_sandbox/sandboxtest.cpp b/tests/ut_sandbox/sandboxtest.cpp index 72058cf..bf56c00 100644 --- a/tests/ut_sandbox/sandboxtest.cpp +++ b/tests/ut_sandbox/sandboxtest.cpp @@ -15,55 +15,55 @@ void SandboxTest::test(){ const QDir::Filters noHidden = QDir::AllEntries | QDir::NoDotAndDotDot; - QCOMPARE(QDir(TESTS_DATA_PATH "/world").entryList(noHidden, QDir::Name), + QCOMPARE(QDir(Sandbox::map(TESTS_DATA_PATH "/world")).entryList(noHidden, QDir::Name), QStringList() << "world-and-sandbox" << "world-only" << "world-only-to-be-copied-into-sandbox"); - QVERIFY(!QFileInfo(TESTS_DATA_PATH "/world/world-only").isWritable()); - QCOMPARE(readAll(TESTS_DATA_PATH "/world/world-only").trimmed(), + QVERIFY(!QFileInfo(Sandbox::map(TESTS_DATA_PATH "/world/world-only")).isWritable()); + QCOMPARE(readAll(Sandbox::map(TESTS_DATA_PATH "/world/world-only")).trimmed(), QString("world/world-only")); - QVERIFY(!QFileInfo(TESTS_DATA_PATH "/world/world-and-sandbox").isWritable()); - QCOMPARE(readAll(TESTS_DATA_PATH "/world/world-and-sandbox").trimmed(), + QVERIFY(!QFileInfo(Sandbox::map(TESTS_DATA_PATH "/world/world-and-sandbox")).isWritable()); + QCOMPARE(readAll(Sandbox::map(TESTS_DATA_PATH "/world/world-and-sandbox")).trimmed(), QString("world/world-and-sandbox")); - QVERIFY(!QFileInfo(TESTS_DATA_PATH "/world/world-only-to-be-copied-into-sandbox").isWritable()); - QCOMPARE(readAll(TESTS_DATA_PATH "/world/world-only-to-be-copied-into-sandbox").trimmed(), - QString("world/world-only-to-be-copied-into-sandbox")); + QVERIFY(!QFileInfo(Sandbox::map(TESTS_DATA_PATH "/world/world-only-to-be-copied-into-sandbox")) + .isWritable()); + QCOMPARE(readAll(Sandbox::map(TESTS_DATA_PATH "/world/world-only-to-be-copied-into-sandbox")) + .trimmed(), QString("world/world-only-to-be-copied-into-sandbox")); - QVERIFY(!QFileInfo(TESTS_DATA_PATH "/world/sandbox-only").exists()); + QVERIFY(!QFileInfo(Sandbox::map(TESTS_DATA_PATH "/world/sandbox-only")).exists()); - Sandbox sandbox(TESTS_DATA_PATH "/sandbox", + Sandbox sandbox(Sandbox::map(TESTS_DATA_PATH "/sandbox"), Sandbox::UseAsSkeleton, Sandbox::ThisProcess | Sandbox::ChildProcesses); - sandbox.addWorldFiles(TESTS_DATA_PATH "/world", QDir::AllEntries, + sandbox.addWorldFiles(Sandbox::map(TESTS_DATA_PATH "/world"), QDir::AllEntries, QStringList() << "*-to-be-copied-into-sandbox"); QVERIFY(sandbox.activate()); - QCOMPARE(QDir(TESTS_DATA_PATH "/world").entryList(noHidden, QDir::Name), + QCOMPARE(QDir(Sandbox::map(TESTS_DATA_PATH "/world")).entryList(noHidden, QDir::Name), QStringList() + << "sandbox-only" << "world-and-sandbox" - << "world-only" << "world-only-to-be-copied-into-sandbox"); - QVERIFY(!QFileInfo(TESTS_DATA_PATH "/world/world-only").isWritable()); - QCOMPARE(readAll(TESTS_DATA_PATH "/world/world-only").trimmed(), - QString("world/world-only")); + QVERIFY(!QFileInfo(Sandbox::map(TESTS_DATA_PATH "/world/world-only")).exists()); - QVERIFY(QFileInfo(TESTS_DATA_PATH "/world/world-and-sandbox").isWritable()); - QCOMPARE(readAll(TESTS_DATA_PATH "/world/world-and-sandbox").trimmed(), + QVERIFY(QFileInfo(Sandbox::map(TESTS_DATA_PATH "/world/world-and-sandbox")).isWritable()); + QCOMPARE(readAll(Sandbox::map(TESTS_DATA_PATH "/world/world-and-sandbox")).trimmed(), QString("sandbox/world-and-sandbox")); - QVERIFY(QFileInfo(TESTS_DATA_PATH "/world/world-only-to-be-copied-into-sandbox").isWritable()); - QCOMPARE(readAll(TESTS_DATA_PATH "/world/world-only-to-be-copied-into-sandbox").trimmed(), - QString("world/world-only-to-be-copied-into-sandbox")); + QVERIFY(QFileInfo(Sandbox::map(TESTS_DATA_PATH "/world/world-only-to-be-copied-into-sandbox")) + .isWritable()); + QCOMPARE(readAll(Sandbox::map(TESTS_DATA_PATH "/world/world-only-to-be-copied-into-sandbox")) + .trimmed(), QString("world/world-only-to-be-copied-into-sandbox")); - QVERIFY(QFileInfo(TESTS_DATA_PATH "/world/sandbox-only").exists()); - QVERIFY(QFileInfo(TESTS_DATA_PATH "/world/sandbox-only").isWritable()); - QCOMPARE(readAll(TESTS_DATA_PATH "/world/sandbox-only").trimmed(), + QVERIFY(QFileInfo(Sandbox::map(TESTS_DATA_PATH "/world/sandbox-only")).exists()); + QVERIFY(QFileInfo(Sandbox::map(TESTS_DATA_PATH "/world/sandbox-only")).isWritable()); + QCOMPARE(readAll(Sandbox::map(TESTS_DATA_PATH "/world/sandbox-only")).trimmed(), QString("sandbox/sandbox-only")); } diff --git a/tests/ut_urlresolver/main.cpp b/tests/ut_urlresolver/main.cpp index c001b35..1873572 100644 --- a/tests/ut_urlresolver/main.cpp +++ b/tests/ut_urlresolver/main.cpp @@ -7,16 +7,15 @@ #include +#include "libssu/sandbox_p.h" #include "urlresolvertest.cpp" int main(int argc, char **argv){ - /* Sandbox sandbox(QString("%1/configroot").arg(TESTS_DATA_PATH), Sandbox::UseAsSkeleton, Sandbox::ThisProcess); if (!sandbox.activate()){ qFatal("Failed to activate sandbox"); } - */ UrlResolverTest urlResolverTest;