fix: fix fd marshaling in QtDBus#1715
Conversation
Call Ping() to trigger QtDBus's file descriptor passing capability update. Signed-off-by: reddevillg <reddevillg@gmail.com>
deepin pr auto review★ 总体评分:100分■ 【总体评价】
■ 【详细分析】
■ 【改进建议代码示例】 // 当前diff中的修复代码已经非常规范,无需额外改进,此为当前最终正确形态的展示
utils::error::Result<api::dbus::v1::PackageManager *> Cli::getPkgMan()
{
if (this->pkgMan != nullptr) {
return this->pkgMan.get();
}
QString service;
QDBusConnection pkgManConn{ "ll-package-manager" };
if (this->peerMode) {
LogW("some subcommands will failed in --no-dbus mode.");
const auto pkgManAddress = QString("unix:path=/tmp/linglong-package-manager.socket");
pkgManConn = QDBusConnection::connectToPeer(pkgManAddress, "ll-package-manager");
if (!pkgManConn.isConnected()) {
return LINGLONG_ERR(fmt::format("Failed to connect to ll-package-manager: {}",
pkgManConn.lastError().message().toStdString()));
}
} else {
service = "org.deepin.linglong.PackageManager1";
pkgManConn = QDBusConnection::systemBus();
}
auto peer = linglong::api::dbus::v1::DBusPeer(service,
"/org/deepin/linglong/PackageManager1",
pkgManConn);
auto reply = peer.Ping();
reply.waitForFinished();
if (!reply.isValid()) {
const auto message = this->peerMode
? "Failed to initialize peer connection: {}"
: "Failed to activate org.deepin.linglong.PackageManager1: {}";
return LINGLONG_ERR(fmt::format(message, reply.error().message().toStdString()));
}
this->pkgMan =
std::make_unique<api::dbus::v1::PackageManager>(service,
"/org/deepin/linglong/PackageManager1",
pkgManConn,
QCoreApplication::instance());
auto ret = this->initPkgManSignals();
if (!ret) {
this->pkgMan.reset();
return LINGLONG_ERR(ret.error());
}
return this->pkgMan.get();
}
int Cli::installFromFile(const QFileInfo &fileInfo, common::CommonOptions &commonOptions) {
// ... 前置获取pkgMan及文件校验逻辑 ...
auto caps = (*pkgMan)->connection().connectionCapabilities();
if (!(caps & QDBusConnection::UnixFileDescriptorPassing)) {
this->printer.printErr(LINGLONG_ERRV("peer connection does not support Unix FD passing"));
return -1;
}
auto pendingReply = (*pkgMan)->InstallFromFile(dbusFileDescriptor,
fileInfo.suffix(),
common::serialize::toQVariantMap(commonOptions));
// ... 后续处理逻辑 ...
} |
|
Warning Gemini encountered an error creating the review. You can try again by commenting |
Codecov Report❌ Patch coverage is
🚀 New features to boost your workflow:
|
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: dengbo11, reddevillg The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
Call Ping() to trigger QtDBus's file descriptor passing capability update.