Skip to content

Commit 0cdfcab

Browse files
committed
fix(auth): add polkit support
Replace UnixProcessSubject(PID) with SystemBusNameSubject for Polkit authorization, and add centralized checkAuthorization() to all service methods for consistent access control. 将Polkit鉴权方式从进程PID切换为DBus总线名,并在所有服务 方法中添加统一的鉴权检查,实现一致的访问控制。 Log: 将DBus鉴权方式从PID切换为总线名并统一鉴权入口 PMS: BUG-364093 Influence: 所有通过DBus调用的服务方法现在均需通过Polkit鉴权,提升系统安全性。
1 parent 91b48dd commit 0cdfcab

7 files changed

Lines changed: 177 additions & 17 deletions

File tree

application/main.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
1+
// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd.
22
//
33
// SPDX-License-Identifier: GPL-3.0-only
44

@@ -128,7 +128,10 @@ int main(int argc, char *argv[])
128128
proc.startDetached("/usr/bin/dbus-send --system --type=method_call --dest=com.deepin.diskmanager /com/deepin/diskmanager com.deepin.diskmanager.Quit");
129129
}
130130

131-
proc.startDetached("/usr/bin/deepin-diskmanager-authenticateProxy");
131+
QStringList argList;
132+
argList << QDBusConnection::systemBus().baseService();
133+
qDebug() << "Starting deepin-diskmanager-authenticateProxy with args:" << argList;
134+
proc.startDetached("deepin-diskmanager-authenticateProxy", argList);
132135

133136
//正常启动程序后,循环查询后台服务是否已经启动,如果后台服务启动说明鉴权成功,启动前端界面
134137
while (1) {

service/PolicyKitHelper.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
1+
// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd.
22
//
33
// SPDX-License-Identifier: GPL-3.0-only
44

@@ -8,17 +8,18 @@
88

99
#include "PolicyKitHelper.h"
1010
#include <QDebug>
11-
bool PolicyKitHelper::checkAuthorization(const QString& actionId, qint64 applicationPid)
11+
12+
bool PolicyKitHelper::checkAuthorization(const QString& actionId, const QString& appBusName)
1213
{
14+
if (appBusName.isEmpty())
15+
return false;
16+
1317
Authority::Result result;
14-
// 第一个参数是需要验证的action,和规则文件写的保持一致
15-
result = Authority::instance()->checkAuthorizationSync(actionId, UnixProcessSubject(applicationPid),
18+
result = Authority::instance()->checkAuthorizationSync(actionId, SystemBusNameSubject(appBusName),
1619
Authority::AllowUserInteraction);
1720
if (result == Authority::Yes) {
18-
// qDebug() << 111111111;
1921
return true;
2022
}else {
21-
// qDebug() << 22222222;
2223
return false;
2324
}
2425
}

service/PolicyKitHelper.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
1+
// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd.
22
//
33
// SPDX-License-Identifier: GPL-3.0-only
44

@@ -14,7 +14,7 @@ class PolicyKitHelper
1414
return &instance;
1515
}
1616

17-
bool checkAuthorization(const QString& actionId, qint64 applicationPid);
17+
bool checkAuthorization(const QString& actionId, const QString& appBusName);
1818

1919
private:
2020
PolicyKitHelper();

0 commit comments

Comments
 (0)