[gnome-shell/wip/rstrode/rhel-7.9: 25/86] shellActionModes: disable POPUP keybindings in unlock screen




commit 9f59857df6b1178ed7cc9930d48640be7c10d4c9
Author: Ray Strode <rstrode redhat com>
Date:   Wed Jan 23 15:59:42 2019 -0500

    shellActionModes: disable POPUP keybindings in unlock screen
    
    Certain keybindings should continue to work even when a popup
    menu is on screen. For instance, the keybinding for showing
    the app menu and the keyinding for showing the calendar are
    examples.
    
    This is achieved by putting in place a special "POPUP" action
    mode, whenever a popup menu is active.  This mode replaces
    the (e.g., "NORMAL" or "OVERVIEW") action mode that was in place
    for as long as the popup menu is active.
    
    But those keybindings should not work when the user is at the
    unlock dialog (which uses an action mode of "UNLOCK").
    
    Unfortunately, since commit c79d24b6 they do.
    
    This commit addresses the problem by forcing the action mode
    to NONE at the unlock screen when popups are visible.
    
    CVE-2019-3820
    
    Closes https://gitlab.gnome.org/GNOME/gnome-shell/issues/851

 js/gdm/authPrompt.js  | 3 ++-
 js/gdm/loginDialog.js | 3 ++-
 js/ui/shellEntry.js   | 6 ++++--
 3 files changed, 8 insertions(+), 4 deletions(-)
---
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 27a55246a0..15d3273fa3 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -14,6 +14,7 @@ const Batch = imports.gdm.batch;
 const GdmUtil = imports.gdm.util;
 const Meta = imports.gi.Meta;
 const Params = imports.misc.params;
+const Shell = imports.gi.Shell;
 const ShellEntry = imports.ui.shellEntry;
 const Tweener = imports.ui.tweener;
 const UserWidget = imports.ui.userWidget;
@@ -110,7 +111,7 @@ var AuthPrompt = new Lang.Class({
                          x_align: St.Align.START });
         this._entry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
                                      can_focus: true });
-        ShellEntry.addContextMenu(this._entry, { isPassword: true });
+        ShellEntry.addContextMenu(this._entry, { isPassword: true, actionMode: Shell.ActionMode.NONE });
 
         this.actor.add(this._entry,
                        { expand: true,
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index 54a1f419f4..06122eaa61 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -338,7 +338,8 @@ var SessionMenuButton = new Lang.Class({
                  this._button.remove_style_pseudo_class('active');
         });
 
-        this._manager = new PopupMenu.PopupMenuManager({ actor: this._button });
+        this._manager = new PopupMenu.PopupMenuManager({ actor: this._button },
+                                                       { actionMode: Shell.ActionMode.NONE });
         this._manager.addMenu(this._menu);
 
         this._button.connect('clicked', () => { this._menu.toggle(); });
diff --git a/js/ui/shellEntry.js b/js/ui/shellEntry.js
index f0ee1d9e01..d2eaca0421 100644
--- a/js/ui/shellEntry.js
+++ b/js/ui/shellEntry.js
@@ -10,6 +10,7 @@ const BoxPointer = imports.ui.boxpointer;
 const Main = imports.ui.main;
 const Params = imports.misc.params;
 const PopupMenu = imports.ui.popupMenu;
+const Shell = imports.gi.Shell;
 
 const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
 const DISABLE_SHOW_PASSWORD_KEY = 'disable-show-password';
@@ -172,11 +173,12 @@ function addContextMenu(entry, params) {
     if (entry.menu)
         return;
 
-    params = Params.parse (params, { isPassword: false });
+    params = Params.parse (params, { isPassword: false, actionMode: Shell.ActionMode.POPUP });
 
     entry.menu = new EntryMenu(entry);
     entry.menu.isPassword = params.isPassword;
-    entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry });
+    entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry },
+                                                        { actionMode: params.actionMode });
     entry._menuManager.addMenu(entry.menu);
 
     // Add an event handler to both the entry and its clutter_text; the former


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]