gnome-shell/gs-fate318433-prevent-same-account-multi-logins.patch
Bjørn Lie 0598ce145e Accepting request 525996 from home:xiaoguang_wang:branches:GNOME:Factory
- Update sle-classic patches to version 3.26.0:
  + Update SLEClassicExt.js
  + Update gnome-shell-1007468-lock-screen-SUSE-logo-missing.patch
  + Update gnome-shell-disable-ibus-when-not-installed.patch
  + Update gnome-shell-domain.patch
  + Update gnome-shell-gdm-login-applet.patch
  + Update gs-fate318433-prevent-same-account-multi-logins.patch
  + Update gs-sle-classic-ext.patch

OBS-URL: https://build.opensuse.org/request/show/525996
OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gnome-shell?expand=0&rev=322
2017-09-14 11:46:11 +00:00

88 lines
4.3 KiB
Diff

Index: gnome-shell-3.25.4/js/gdm/loginDialog.js
===================================================================
--- gnome-shell-3.25.4.orig/js/gdm/loginDialog.js
+++ gnome-shell-3.25.4/js/gdm/loginDialog.js
@@ -926,6 +926,8 @@ var LoginDialog = new Lang.Class({
this._authPrompt.updateSensitivity(false);
let answer = this._authPrompt.getAnswer();
this._user = this._userManager.get_user(answer);
+ this._userLoginForbidden =
+ this._user.is_x_logged_in_remotely();
this._authPrompt.clear();
this._authPrompt.startSpinning();
this._authPrompt.begin({ userName: answer });
@@ -990,6 +992,8 @@ var LoginDialog = new Lang.Class({
let answer = this._authPrompt.getAnswer();
let domain_answer = this._domainMenuButton.getDomainUser(answer);
this._user = this._userManager.get_user(domain_answer);
+ this._userLoginForbidden =
+ this._user.is_x_logged_in_remotely();
this._authPrompt.clear();
this._authPrompt.startSpinning();
this._authPrompt.begin({ userName: domain_answer});
@@ -1023,6 +1027,28 @@ var LoginDialog = new Lang.Class({
},
_onSessionOpened: function(client, serviceName) {
+ if ( this._userLoginForbidden ) {
+ this._authPrompt.setMessage(
+ _('Sorry, you have to log out a previous session first. Multiple logins are not supported.'),
+ GdmUtil.MessageType.ERROR);
+ // TODO: The following logic relies on the unverified fact that
+ // `AuthPrompt::_onVerificationComplete` seems to always run after
+ // current handler. This might root from the interaction between
+ // greeter and verifier, both are external programs.
+ this._authPrompt.verificationStatus = AuthPrompt.AuthPromptStatus.VERIFIED_BUT_FORBIDDEN;
+
+ // NOTE: Failed Attempts as references
+ //
+ // NOTE: reset is too heavy, it skips the error prompt all together
+ // this._authPrompt.reset();
+ //
+ // NOTE: Diconnect at this stage is not working
+ //
+ // this._authPrompt._userVerifier.disconnect(this._authPrompt._userVerifierCompleteId);
+
+ return;
+ }
+
this._authPrompt.finish(Lang.bind(this, function() {
this._startSession(serviceName);
}));
@@ -1206,6 +1232,7 @@ var LoginDialog = new Lang.Class({
_onUserListActivated: function(activatedItem) {
this._user = activatedItem.user;
+ this._userLoginForbidden = this._user.is_x_logged_in_remotely();
this._updateCancelButton();
Index: gnome-shell-3.25.4/js/gdm/authPrompt.js
===================================================================
--- gnome-shell-3.25.4.orig/js/gdm/authPrompt.js
+++ gnome-shell-3.25.4/js/gdm/authPrompt.js
@@ -30,7 +30,9 @@ var AuthPromptStatus = {
NOT_VERIFYING: 0,
VERIFYING: 1,
VERIFICATION_FAILED: 2,
- VERIFICATION_SUCCEEDED: 3
+ VERIFICATION_SUCCEEDED: 3,
+ // NOTE fate#318433 extra state to track multi-login situation
+ VERIFIED_BUT_FORBIDDEN: 4
};
var BeginRequestType = {
@@ -261,7 +263,12 @@ var AuthPrompt = new Lang.Class({
},
_onVerificationComplete: function() {
+ // NOTE update the spinning icon
this.setActorInDefaultButtonWell(null);
+
+ if (this.verificationStatus === AuthPromptStatus.VERIFIED_BUT_FORBIDDEN) {
+ return;
+ }
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
this.cancelButton.reactive = false;
},