1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
// SPDX-FileCopyrightText: 2019 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later
#include "dbusmanager.h"
#include "utils.h"
#include <unistd.h>
#include <pwd.h>
#include <QDBusInterface>
#include <QDBusReply>
#include <QDebug>
#include <QLoggingCategory>
#include <QProcess>
#ifdef QT_DEBUG
Q_LOGGING_CATEGORY(logDBusManager, "org.deepin.log.viewer.dbus.manager")
#else
Q_LOGGING_CATEGORY(logDBusManager, "org.deepin.log.viewer.dbus.manager", QtInfoMsg)
#endif
/**
* @brief DBusManager::DBusManager
* dbus接口获取工具类
* @param parent
*/
DBusManager::DBusManager(QObject *parent) : QObject(parent)
{
}
bool DBusManager::isSEOpen()
{
bool bIsSEOpen = false;
QDBusInterface interfaceSE("com.deepin.daemon.SecurityEnhance", "/com/deepin/daemon/SecurityEnhance", "com.deepin.daemon.SecurityEnhance", QDBusConnection::systemBus());
if (interfaceSE.isValid()) {
QDBusReply<QString> reply = interfaceSE.call(QStringLiteral("Status"));
if (!reply.error().message().isEmpty())
qCWarning(logDBusManager) << qPrintable(QString("com.deepin.daemon.SecurityEnhance.Status DBus error: %1").arg(reply.error().message()));
if (reply.value() == "close")
bIsSEOpen = false;
else
bIsSEOpen = true;
} else {
qCWarning(logDBusManager) << qPrintable(QString("isSEOpen failed! interface error: %1").arg(interfaceSE.lastError().message()));
}
return bIsSEOpen;
}
bool DBusManager::isAuditAdmin()
{
bool bIsAuditAdmin = false;
// 获取当前系统用户名
struct passwd* pwd = getpwuid(getuid());
QString currentUserName = pwd->pw_name;
// 根据用户名判断用户身份,查看是否为审计管理员
QDBusInterface interfaceSE("com.deepin.daemon.SecurityEnhance", "/com/deepin/daemon/SecurityEnhance", "com.deepin.daemon.SecurityEnhance", QDBusConnection::systemBus());
if (interfaceSE.isValid()) {
QDBusReply<QString> reply = interfaceSE.call(QStringLiteral("GetSEUserByName"), currentUserName);
if (!reply.error().message().isEmpty())
qCWarning(logDBusManager) << qPrintable(QString("com.deepin.daemon.SecurityEnhance.GetSEUserByName DBus error: %1").arg(reply.error().message()));
if (reply.value() == "audadm_u" || reply.value() == "auditadm_u")
bIsAuditAdmin = true;
} else {
qCWarning(logDBusManager) << qPrintable(QString("isAuditAdmin failed! interface error: %1").arg(interfaceSE.lastError().message()));
}
return bIsAuditAdmin;
}
QString DBusManager::getHomePathByFreeDesktop()
{
QString homePath;
QDBusInterface interface("org.freedesktop.login1", "/org/freedesktop/login1/user/self", "org.freedesktop.login1.User", QDBusConnection::systemBus());
QString userName = qvariant_cast<QString>(interface.property("Name"));
if (!userName.isEmpty())
homePath = "/home/" + userName;
return homePath;
}
|