← Back to team overview

lightdm-gtk-greeter-team team mailing list archive

[Merge] lp:~uoms-gregt/lightdm-gtk-greeter/trim-username into lp:lightdm-gtk-greeter

 

Greg Trounson has proposed merging lp:~uoms-gregt/lightdm-gtk-greeter/trim-username into lp:lightdm-gtk-greeter.

Commit message:
Ignore whitespace before and after username when authenticating.

Requested reviews:
  LightDM Gtk+ Greeter Development Team (lightdm-gtk-greeter-team)

For more details, see:
https://code.launchpad.net/~uoms-gregt/lightdm-gtk-greeter/trim-username/+merge/362953

Our use case:
Users press the space bar to either power up the computer or bring the monitor out
of sleep.  If the computer is already powered on then that keypress propagates to the username
field in lightdm-gtk-greeter, inserting a <space> before they type their username, resulting in a failed login.  With proportional fonts this is almost impossible to see at a glance.

Given that whitespace can never be part of a valid username (cf IEEE 1003.1-2001), this patch trims the beginning and end of the username string before passing it to the authentication code.  <Space> characters still appear in the username field, but have no effect.

To test:
At a lightdm login prompt, type:
<space>username
or:
username<space>
then enter your password.

Pre-patch:
The login will fail.
Post-patch:
The login will succeed.

-- 
Your team LightDM Gtk+ Greeter Development Team is requested to review the proposed merge of lp:~uoms-gregt/lightdm-gtk-greeter/trim-username into lp:lightdm-gtk-greeter.
=== modified file 'src/lightdm-gtk-greeter.c'
--- src/lightdm-gtk-greeter.c	2018-03-15 00:29:41 +0000
+++ src/lightdm-gtk-greeter.c	2019-02-10 20:58:40 +0000
@@ -1999,13 +1999,17 @@
     password_prompted = FALSE;
     prompt_active = FALSE;
 
+    gchar* trimmed_username;
+    trimmed_username = g_strdup (username);
+    g_strstrip (trimmed_username);
+
     if (pending_questions)
     {
         g_slist_free_full (pending_questions, (GDestroyNotify) pam_message_finalize);
         pending_questions = NULL;
     }
 
-    config_set_string (STATE_SECTION_GREETER, STATE_KEY_LAST_USER, username);
+    config_set_string (STATE_SECTION_GREETER, STATE_KEY_LAST_USER, trimmed_username);
 
     if (g_strcmp0 (username, "*other") == 0)
     {
@@ -2031,7 +2035,7 @@
 			}
 		}
     }
-    else if (g_strcmp0 (username, "*guest") == 0)
+    else if (g_strcmp0 (trimmed_username, "*guest") == 0)
     {
 #ifdef HAVE_LIBLIGHTDMGOBJECT_1_19_2
         lightdm_greeter_authenticate_as_guest (greeter, NULL);
@@ -2043,7 +2047,7 @@
     {
         LightDMUser *user;
 
-        user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
+        user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), trimmed_username);
         if (user)
         {
             if (!current_session)
@@ -2057,11 +2061,12 @@
             set_language (NULL);
         }
 #ifdef HAVE_LIBLIGHTDMGOBJECT_1_19_2
-        lightdm_greeter_authenticate (greeter, username, NULL);
+        lightdm_greeter_authenticate (greeter, trimmed_username, NULL);
 #else
-        lightdm_greeter_authenticate (greeter, username);
+        lightdm_greeter_authenticate (greeter, trimmed_username);
 #endif
     }
+    g_free (trimmed_username);
 }
 
 static void