Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Work around sandbox not sandboxing directories
  • Loading branch information
Bernd Wachter committed Apr 5, 2013
1 parent 6a9c80c commit c30bd37
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 14 deletions.
14 changes: 10 additions & 4 deletions ssuks/ssukickstarter.cpp
Expand Up @@ -21,7 +21,9 @@
*/


SsuKickstarter::SsuKickstarter() {
SsuKickstarter::SsuKickstarter(QString sandbox) {
pathPrefix = sandbox;

SsuDeviceInfo deviceInfo;
deviceModel = deviceInfo.deviceModel();

Expand Down Expand Up @@ -93,7 +95,9 @@ QStringList SsuKickstarter::partitions(){
QString partitionFile;
QFile part;

QDir dir(QString("%1/kickstart/part/").arg(SSU_DATA_DIR));
QDir dir(QString("/%1/%2/kickstart/part/")
.arg(pathPrefix)
.arg(SSU_DATA_DIR));

if (dir.exists(deviceModel.toLower()))
partitionFile = deviceModel.toLower();
Expand Down Expand Up @@ -124,11 +128,13 @@ QStringList SsuKickstarter::scriptletSection(QString name, bool chroot){
QDir dir;

if (chroot)
path = QString("%1/kickstart/%2/")
path = QString("/%1/%2/kickstart/%3/")
.arg(pathPrefix)
.arg(SSU_DATA_DIR)
.arg(name);
else
path = QString("%1/kickstart/%2_nochroot/")
path = QString("/%1/%2/kickstart/%3_nochroot/")
.arg(pathPrefix)
.arg(SSU_DATA_DIR)
.arg(name);

Expand Down
3 changes: 2 additions & 1 deletion ssuks/ssukickstarter.h
Expand Up @@ -21,12 +21,13 @@ class Q_CORE_EXPORT SsuKickstarter: public QObject {
*/
class SsuKickstarter {
public:
SsuKickstarter();
SsuKickstarter(QString sandbox="");
void setRepoParameters(QHash<QString, QString> parameters);
bool write(QString kickstart="");

private:
QHash<QString, QString> repoOverride;
QString pathPrefix;
Ssu ssu;
bool rndMode;
QString deviceModel;
Expand Down
41 changes: 32 additions & 9 deletions ssuks/ssuks.cpp
Expand Up @@ -11,6 +11,7 @@
#include <QLibraryInfo>
#include <QTimer>
#include <QStringList>
#include <QDirIterator>

#include "ssukickstarter.h"
#include "constants.h"
Expand Down Expand Up @@ -42,16 +43,38 @@ void SsuKs::run(){
repoParameters.insert(split.at(0), split.at(1));
}


QString sandbox;
Sandbox *sb;
if (repoParameters.contains("sandbox")){
QString sandbox = repoParameters.value("sandbox");
sandbox = repoParameters.value("sandbox");
repoParameters.remove("sandbox");

sb = new Sandbox(sandbox, Sandbox::UseAsSkeleton, Sandbox::ThisProcess);
sb->addWorldFiles(SSU_BOARD_MAPPING_CONFIGURATION_DIR);
sb->addWorldFiles("/etc/ssu");
sb->addWorldFiles("/usr/share/ssu");

// work around sandbox not sandboxing directories
QDirIterator it(SSU_DATA_DIR, QDir::AllEntries|QDir::NoDot|QDir::NoDotDot, QDirIterator::Subdirectories);
while (it.hasNext()){
it.next();

if (it.fileName() == "board-mappings.ini")
continue;

QDir dir;
QFileInfo info = it.fileInfo();

dir.mkpath(sandbox + info.absoluteDir().path());
QFile::copy(it.filePath(), sandbox + it.filePath());
}

QFile::remove(sandbox + "/" + SSU_BOARD_MAPPING_CONFIGURATION);
SsuSettings boardMappings(QString("%1/%2")
.arg(sandbox)
.arg(SSU_BOARD_MAPPING_CONFIGURATION),
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 {
Expand All @@ -60,9 +83,9 @@ void SsuKs::run(){
}
}

SsuKickstarter *kickstarter = new SsuKickstarter();
kickstarter->setRepoParameters(repoParameters);
kickstarter->write(fileName);
SsuKickstarter kickstarter(sandbox);
kickstarter.setRepoParameters(repoParameters);
kickstarter.write(fileName);
} else
usage();

Expand Down

0 comments on commit c30bd37

Please sign in to comment.