Advertisement
darkxst

Untitled

Apr 11th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 2.74 KB | None | 0 0
  1. Index: gdm3-3.18.2/daemon/gdm-session-worker.c
  2. ===================================================================
  3. --- gdm3-3.18.2.orig/daemon/gdm-session-worker.c
  4. +++ gdm3-3.18.2/daemon/gdm-session-worker.c
  5. @@ -1058,6 +1059,40 @@ gdm_session_worker_initialize_pam (GdmSe
  6.  }
  7.  
  8.  static gboolean
  9. +set_pam_login_vt (GdmSessionWorker *worker)
  10. +{
  11. +        int fd;
  12. +        char tty_string[256];
  13. +        struct vt_stat vt_state = { 0 };
  14. +
  15. +
  16. +        fd = open ("/dev/tty0", O_RDWR | O_NOCTTY);
  17. +
  18. +        if (fd < 0) {
  19. +                g_debug ("GdmSessionWorker: couldn't open VT master: %m");
  20. +                return FALSE;
  21. +        }
  22. +
  23. +        if (ioctl (fd, VT_GETSTATE, &vt_state) < 0) {
  24. +                g_debug ("GdmSessionWorker: couldn't get current VT: %m");
  25. +                goto fail;
  26. +        }
  27. +
  28. +        worker->priv->login_vt = vt_state.v_active;
  29. +
  30. +        close (fd);
  31. +
  32. +        g_snprintf (tty_string, 256, "/dev/tty%d", worker->priv->login_vt);
  33. +        pam_set_item (worker->priv->pam_handle, PAM_TTY, tty_string);
  34. +
  35. +        return TRUE;
  36. +
  37. +fail:
  38. +        close (fd);
  39. +        return FALSE;
  40. +}
  41. +
  42. +static gboolean
  43.  gdm_session_worker_authenticate_user (GdmSessionWorker *worker,
  44.                                        gboolean          password_is_required,
  45.                                        GError          **error)
  46. @@ -1067,12 +1102,15 @@ gdm_session_worker_authenticate_user (Gd
  47.  
  48.          g_debug ("GdmSessionWorker: authenticating user %s", worker->priv->username);
  49.  
  50. +
  51.          authentication_flags = 0;
  52.  
  53.          if (password_is_required) {
  54.                  authentication_flags |= PAM_DISALLOW_NULL_AUTHTOK;
  55.          }
  56.  
  57. +        set_pam_login_vt (worker);
  58. +
  59.          /* blocking call, does the actual conversation */
  60.          error_code = pam_authenticate (worker->priv->pam_handle, authentication_flags);
  61.  
  62. @@ -2021,7 +2059,6 @@ set_up_for_new_vt (GdmSessionWorker *wor
  63.  {
  64.          int fd;
  65.          char vt_string[256], tty_string[256];
  66. -        struct vt_stat vt_state = { 0 };
  67.          int session_vt = 0;
  68.  
  69.          fd = open ("/dev/tty0", O_RDWR | O_NOCTTY);
  70. @@ -2031,11 +2068,6 @@ set_up_for_new_vt (GdmSessionWorker *wor
  71.                  return FALSE;
  72.          }
  73.  
  74. -        if (ioctl (fd, VT_GETSTATE, &vt_state) < 0) {
  75. -                g_debug ("GdmSessionWorker: couldn't get current VT: %m");
  76. -                goto fail;
  77. -        }
  78. -
  79.          if (worker->priv->display_is_initial) {
  80.                  session_vt = atoi (GDM_INITIAL_VT);
  81.          } else {
  82. @@ -2045,7 +2077,6 @@ set_up_for_new_vt (GdmSessionWorker *wor
  83.                  }
  84.          }
  85.  
  86. -        worker->priv->login_vt = vt_state.v_active;
  87.          worker->priv->session_vt = session_vt;
  88.  
  89.          close (fd);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement