Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,11 @@ bool DriverManager::isDriverPackage(const QString &filepath)
*/
bool DriverManager::isSigned(const QString &filepath)
{
// If hierarchical verification is enabled, we assume that all packages are signed.
if (Utils::HierarchicalVerifyAvailable == Utils::hierarchicalEnabled()) {
return true;
}

//如果是开发者模式,直接返回true
QDBusInterface *dbusInterFace = new QDBusInterface("com.deepin.sync.Helper", "/com/deepin/sync/Helper",
"com.deepin.sync.Helper", QDBusConnection::systemBus());
Expand All @@ -392,7 +397,7 @@ bool DriverManager::isSigned(const QString &filepath)
strSignCheckString = "Verified successfully";
}

QString outInfo = Utils::executeServerCmd(program, arguments, QString(), -1);
QString outInfo = Utils::executeServerCmd(program, arguments, QString(), -1, true);
return outInfo.contains(strSignCheckString);
}
bool DriverManager::isArchMatched(const QString &path)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

#include <QProcess>
#include <QDir>
#include <QDBusInterface>
#include <QDBusReply>
#include <QUuid>
#include <QFile>
#include <QLoggingCategory>
Expand Down Expand Up @@ -217,17 +219,26 @@ QString Utils::getUrl()
}
}



QByteArray Utils::executeServerCmd(const QString &cmd, const QStringList &args, const QString &workPath, int msecsWaiting/* = 30000*/)
QByteArray Utils::executeServerCmd(const QString &cmd,
const QStringList &args,
const QString &workPath,
int msecsWaiting/* = 30000*/,
bool readAll/* = false*/)
{
QProcess process;
if (!workPath.isEmpty())
process.setWorkingDirectory(workPath);

process.setProgram(cmd);
process.setArguments(args);
process.setEnvironment({"LANG=en_US.UTF-8", "LANGUAGE=en_US"});
auto env = QProcess::systemEnvironment();
env.append("LANG=en_US.UTF-8");
env.append("LANGUAGE=en_US");
process.setEnvironment(env);
if (readAll) {
process.setProcessChannelMode(QProcess::MergedChannels);
}

process.start();
// Wait for process to finish without timeout.
process.waitForFinished(msecsWaiting);
Expand All @@ -240,3 +251,37 @@ QByteArray Utils::executeServerCmd(const QString &cmd, const QStringList &args,
}
return outPut;
}

Utils::HierarchicalVerifyStatus Utils::hierarchicalEnabled()
{
static const QString kHierService = "com.deepin.daemon.ACL";
static const QString kHierPath = "/org/deepin/security/hierarchical/Control";
static const QString kHierInterface = "org.deepin.security.hierarchical.Control";
static const QString kHierMethod = "Availabled";

QDBusInterface interface(kHierService, kHierPath, kHierInterface, QDBusConnection::systemBus());

if (interface.isValid()) {
QDBusMessage message = interface.call(kHierMethod);
QDBusError error = interface.lastError();
if (QDBusError::NoError != error.type()) {
qCWarning(appLog) << QString("[Hierarchical] DBus %1 read property %2 error: type(%2) [%3] %4")
.arg(kHierService)
.arg(kHierMethod)
.arg(error.type())
.arg(error.name())
.arg(error.message());
} else {
QDBusReply<bool> reply(message);
bool availabled = reply.value();
qCWarning(appLog) << QString("[Hierarchical] Get %1 property %2 value: %3")
.arg(kHierService)
.arg(kHierMethod)
.arg(availabled);

return availabled ? HierarchicalVerifyAvailable : HierarchicalVerifyUnavailable;
}
}

return HierarchicalVerifyNotReady;
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,29 @@ class Utils
static QString machineArch();
static bool addModBlackList(const QString &moduleName);
static bool unInstallPackage(const QString &packageName);
//判断Deb是否为驱动包
// 判断Deb是否为驱动包
static bool isDriverPackage(const QString &filepath);
//更新mod dep
// 更新mod dep
static bool updateModDeps(bool bquick = true);
//判断文件是否被占用
// 判断文件是否被占用
static bool isFileLocked(const QString &filepath, bool bread = false);
//判断dpkg是否被占用
// 判断dpkg是否被占用
static bool isDpkgLocked();
//获取url
// 获取url
static QString getUrl();
static QByteArray executeServerCmd(const QString& cmd, const QStringList& args = QStringList(), const QString& workPath = QString(), int msecsWaiting = 30000);
static QByteArray executeServerCmd(const QString &cmd,
const QStringList &args = QStringList(),
const QString &workPath = QString(),
int msecsWaiting = 30000,
bool readAll = false);

// check system hierarchical verify available.
enum HierarchicalVerifyStatus {
HierarchicalVerifyNotReady,
HierarchicalVerifyAvailable,
HierarchicalVerifyUnavailable,
};
static HierarchicalVerifyStatus hierarchicalEnabled();
};

#endif // UTILS_H
#endif // UTILS_H
Loading