introspect: Fix whitelist check

The whitelist is a list of well-known D-Bus names, which we then search
for the unique name we get from the method invocation - unsuccesfully.

Fix this by watching the bus for any name in the whitelist in order
to maintain a map from wel-known to unique name that we can use for
matching.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/1916


(cherry picked from commit eee1ab4890)
This commit is contained in:
Florian Müllner 2019-11-25 18:44:10 +00:00 committed by Florian Müllner
parent 88e3dfa104
commit 334762ee9e

View File

@ -40,6 +40,15 @@ var IntrospectService = class {
}); });
this._syncRunningApplications(); this._syncRunningApplications();
this._whitelistMap = new Map();
APP_WHITELIST.forEach(appName => {
Gio.DBus.watch_name(Gio.BusType.SESSION,
appName,
Gio.BusNameWatcherFlags.NONE,
(conn, name, owner) => this._whitelistMap.set(name, owner),
(conn, name) => this._whitelistMap.delete(name));
});
} }
_isStandaloneApp(app) { _isStandaloneApp(app) {
@ -51,7 +60,7 @@ var IntrospectService = class {
} }
_isSenderWhitelisted(sender) { _isSenderWhitelisted(sender) {
return APP_WHITELIST.includes(sender); return [...this._whitelistMap.values()].includes(sender);
} }
_getSandboxedAppId(app) { _getSandboxedAppId(app) {