Bug#643634: restore nested login in gdm3
dave bl
db.pub.mail at gmail.com
Fri Sep 30 12:14:01 UTC 2011
On 30 September 2011 20:20, Josselin Mouette <joss at debian.org> wrote:
> Le vendredi 30 septembre 2011 à 15:40 +1000, dave bl a écrit :
>> Ok I got it to work :) . It was fairly trivial to make it compile TM.
>> The one final issue (that I encountered) was that the configuration
>> stuffwasn't setting up the xephyr command :) (I have hard-coded it in
>> this diff, which I know is not ok - also needing removal is the extra
>> / useless debug messages that are currently in the code).
>
> Thanks a lot for your work. I have a few comments though.
>> /* fork X server process */
>> - res = gdm_server_spawn (server, firstserver ? "vt7" : NULL);
>> -
>> + res = gdm_server_spawn (server, vtarg);
>> return res;
>> }
>
> Looks like you’re using the Ubuntu patch for defining the first VT. This
> won’t apply cleanly to the Debian tree.
Yes, I was using the ubuntu based package.
>> @@ -1010,7 +1116,9 @@ gdm_server_init (GdmServer *server)
>>
>> server->priv->pid = -1;
>> server->priv->command = g_strdup (X_SERVER " -br -verbose");
>> + server->priv->nested_command = g_strdup ("/usr/bin/Xephyr -audit 0 -br");
>> server->priv->log_dir = g_strdup (LOGDIR);
>> + server->priv->is_ready = FALSE;
>>
>> add_ready_handler (server);
>> }
>
> I’m not really shocked to see Xephyr hardcoded. There’s not really much
> point in customizing this.
Well ... what if it is installed elsewhere? imho it should be a macro
and defined during ./configure time :)
>> -
>> +
>
> There’s a lot of such empty changes. Please clean up your diff.
Sorry, I switched my vimrc config half way through(it stripped the
white-space - that's why it is a little "noisy"). I'll clean it up in
a bit :) (I just wanted to get it working first :) ).
>> diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c
>> index da328d3..1c5e1f5 100644
>> --- a/daemon/gdm-slave.c
>> +++ b/daemon/gdm-slave.c
>> @@ -522,27 +531,6 @@ gdm_slave_set_busy_cursor (GdmSlave *slave)
>> }
>>
>> static void
>> -gdm_slave_setup_xhost_auth (XHostAddress *host_entries, XServerInterpretedAddress *si_entries)
>> -{
>> - si_entries[0].type = "localuser";
>> - si_entries[0].typelength = strlen ("localuser");
>> - si_entries[1].type = "localuser";
>> - si_entries[1].typelength = strlen ("localuser");
>> -
>> - si_entries[0].value = "root";
>> - si_entries[0].valuelength = strlen ("root");
>> - si_entries[1].value = GDM_USERNAME;
>> - si_entries[1].valuelength = strlen (GDM_USERNAME);
>> -
>> - host_entries[0].family = FamilyServerInterpreted;
>> - host_entries[0].address = (char *) &si_entries[0];
>> - host_entries[0].length = sizeof (XServerInterpretedAddress);
>> - host_entries[1].family = FamilyServerInterpreted;
>> - host_entries[1].address = (char *) &si_entries[1];
>> - host_entries[1].length = sizeof (XServerInterpretedAddress);
>> -}
>> -
>> -static void
>> gdm_slave_set_windowpath (GdmSlave *slave)
>> {
>> /* setting WINDOWPATH for clients */
>
> I talked about this with upstream and removing this code is a no-no. In
> order to keep this the following code needs to be refactored:
Right ok. What was the actual issue with the xhost code ? (I mean for
nested-login you could just "drop" the xauth hostname - or did they
want that to _still_ work? I would be surprised if they wanted that
... (how did gdm2.2 handle this? remote nested... :p) ).
>
>> @@ -633,6 +621,16 @@ gdm_slave_connect_to_x11_display (GdmSlave *slave)
>>
>> g_debug ("GdmSlave: Server is ready - opening display %s", slave->priv->display_name);
>>
>> + /* Nested displays are started with authorization for the parent
>> + * user only. Add the GDM user. */
>> + if (slave->priv->display_is_nested)
>> + {
>> + g_debug ("GdmSlave: Connected to display %s", slave->priv->display_name);
>> + g_free (slave->priv->display_x11_authority_file);
>> + gdm_slave_add_user_authorization (slave, GDM_USERNAME,
>> + &slave->priv->display_x11_authority_file);
>> + }
>> +
>> g_setenv ("DISPLAY", slave->priv->display_name, TRUE);
>> g_setenv ("XAUTHORITY", slave->priv->display_x11_authority_file, TRUE);
>>
>> @@ -655,25 +653,9 @@ gdm_slave_connect_to_x11_display (GdmSlave *slave)
>> g_warning ("Unable to connect to display %s", slave->priv->display_name);
>> ret = FALSE;
>> } else if (slave->priv->display_is_local) {
>> - XServerInterpretedAddress si_entries[2];
>> - XHostAddress host_entries[2];
>> -
>> g_debug ("GdmSlave: Connected to display %s", slave->priv->display_name);
>> ret = TRUE;
>>
>> - /* Give programs run by the slave and greeter access to the
>> - * display independent of current hostname
>> - */
>> - gdm_slave_setup_xhost_auth (host_entries, si_entries);
>> -
>> - gdm_error_trap_push ();
>> - XAddHosts (slave->priv->server_display, host_entries,
>> - G_N_ELEMENTS (host_entries));
>> - XSync (slave->priv->server_display, False);
>> - if (gdm_error_trap_pop ()) {
>> - g_warning ("Failed to give slave programs access to the display. Trying to proceed.");
>> - }
>> -
>> gdm_slave_set_windowpath (slave);
>> } else {
>> g_debug ("GdmSlave: Connected to display %s", slave->priv->display_name);
>
> I had to remove the call to gdm_slave_setup_xhost_auth in order for the
> nested functionality to work originally, because another call to this
> function is added indirectly (I don’t exactly recall where). So this
> requires moving the xhost code elsewhere.
Right ok.
>
>> @@ -970,8 +1092,6 @@ gdm_slave_add_user_authorization (GdmSlave *slave,
>> const char *username,
>> char **filenamep)
>> {
>> - XServerInterpretedAddress si_entries[2];
>> - XHostAddress host_entries[2];
>> gboolean res;
>> GError *error;
>> char *filename;
>> @@ -1009,19 +1129,6 @@ gdm_slave_add_user_authorization (GdmSlave *slave,
>> }
>> g_free (filename);
>>
>> - /* Remove access for the programs run by slave and greeter now that the
>> - * user session is starting.
>> - */
>> - gdm_slave_setup_xhost_auth (host_entries, si_entries);
>> - gdm_error_trap_push ();
>> - XRemoveHosts (slave->priv->server_display, host_entries,
>> - G_N_ELEMENTS (host_entries));
>> - XSync (slave->priv->server_display, False);
>> - if (gdm_error_trap_pop ()) {
>> - g_warning ("Failed to remove slave program access to the display. Trying to proceed.");
>> - }
>> -
>> -
>> return res;
>> }
>
> Same here.
Where do you think it should go?
Now I have it working, I'll revert the xhost code and see where
everything breaks :p
More information about the pkg-gnome-maintainers
mailing list