gnome-screensaver-dialog hang with kerberized NFS homedir

Bug #1014910 reported by Steve Atwell on 2012-06-19
18
This bug affects 3 people
Affects Status Importance Assigned to Milestone
gnome-screensaver (Ubuntu)
Undecided
Unassigned

Bug Description

My home directory is on kerberized NFS. If I try to unlock the screensaver when my Kerberos ticket is expired, I don't get a password entry dialog after the screen wakes up. This worked properly in Lucid but no longer works with Precise.

Steps to reproduce:

1) Set up home directory on kerberized NFS.
2) Set ticket life to just a couple minutes in /etc/krb5.conf (not necessary, but makes testing much easier!)
3) Log in to a fresh account with the default desktop environment (unity)
4) Lock the screen
5) Come back when the kerberos ticket is expired, and press a key

Expected behavior:

Screen wakes up and gnome-password-dialog shows me a password prompt

Actual behavior:

Screen wakes up and I can move the mouse around, but I get no password prompt

This is in Ubuntu 12.04 with the following package versions:

gnome-screensaver 3.4.1-0ubuntu1
libgtk-3-0 3.4.2-0ubuntu0.2
libglib2.0-0 2.32.3-0ubuntu1
dconf-gsettings-backend 0.12.0-0ubuntu1

If I run strace -f on the running gnome-screensaver before attempting to unlock, I can see that the gnome-screensaver-dialog process hangs when it tries to call stat() on my home directory. This happens inside some dconf code that gets called from gtk_init_with_args. You can see this by attaching gdb to the hung gnome-screensaver-dialog process in one ssh session, and then running kinit in another ssh session to get a new kerberos ticket. Here's the backtrace with debugging symbols:

#0 0x00007f8621e46a05 in __GI___xstat (vers=<optimized out>, name=0x12b1cc0 "/home/satwell", buf=0x7fffafc2e460)
   at ../sysdeps/unix/sysv/linux/wordsize-64/xstat.c:38
#1 0x00007f862258c480 in stat (__statbuf=0x7fffafc2e460, __path=0x12b1cc0 "/home/satwell") at /usr/include/x86_64-linux-gnu/sys/stat.h:457
#2 g_file_test (filename=0x12b1cc0 "/home/satwell", test=G_FILE_TEST_IS_DIR) at /build/buildd/glib2.0-2.32.3/./glib/gfileutils.c:440
#3 0x00007f862258d7cd in g_mkdir_with_parents (pathname=<optimized out>, mode=448) at /build/buildd/glib2.0-2.32.3/./glib/gfileutils.c:248
#4 0x00007f861b5b4fa9 in dconf_shmdir_from_environment () at ../common/dconf-shmdir.c:31
#5 0x00007f861b5b3ce1 in dconf_engine_get_session_dir () at ../engine/dconf-engine.c:67
#6 dconf_engine_setup_user (engine=0x12ab5e0, i=0) at ../engine/dconf-engine.c:98
#7 0x00007f861b5b4985 in dconf_engine_setup (engine=<optimized out>) at ../engine/dconf-engine.c:216
#8 dconf_engine_new (profile=<optimized out>) at ../engine/dconf-engine.c:376
#9 0x00007f861b5b650b in dconf_settings_backend_init (dcsb=0x12b2010) at dconfsettingsbackend.c:662
#10 0x00007f8622ca0957 in g_type_create_instance (type=<optimized out>) at /build/buildd/glib2.0-2.32.3/./gobject/gtype.c:1892
#11 0x00007f8622c850b9 in g_object_constructor (type=<optimized out>, n_construct_properties=0, construct_params=0x0)
   at /build/buildd/glib2.0-2.32.3/./gobject/gobject.c:1849
#12 0x00007f8622c86c02 in g_object_newv (object_type=19600960, n_parameters=0, parameters=0x0)
   at /build/buildd/glib2.0-2.32.3/./gobject/gobject.c:1632
#13 0x00007f8622c871ec in g_object_new (object_type=19600960, first_property_name=0x0)
   at /build/buildd/glib2.0-2.32.3/./gobject/gobject.c:1542
#14 0x00007f86233f8e41 in try_implementation (extension=<optimized out>, verify_func=0x7f8623441810 <g_settings_backend_verify>)
   at /build/buildd/glib2.0-2.32.3/./gio/giomodule.c:645
#15 0x00007f86233f8ff1 in _g_io_module_get_default (extension_point=0x7f8623491d74 "gsettings-backend",
   envvar=0x7f86234a4112 "GSETTINGS_BACKEND", verify_func=0x7f8623441810 <g_settings_backend_verify>)
   at /build/buildd/glib2.0-2.32.3/./gio/giomodule.c:742
#16 0x00007f86234426fe in g_settings_backend_get_default () at /build/buildd/glib2.0-2.32.3/./gio/gsettingsbackend.c:985
#17 0x00007f8623445995 in g_settings_constructed (object=0x12ab590) at /build/buildd/glib2.0-2.32.3/./gio/gsettings.c:567
#18 0x00007f8622c86b83 in g_object_newv (object_type=<optimized out>, n_parameters=19585792, parameters=<optimized out>)
   at /build/buildd/glib2.0-2.32.3/./gobject/gobject.c:1741
#19 0x00007f8622c86ec6 in g_object_new_valist (object_type=19566112, first_property_name=<optimized out>, var_args=0x7fffafc2eb08)
   at /build/buildd/glib2.0-2.32.3/./gobject/gobject.c:1830
#20 0x00007f8622c871d4 in g_object_new (object_type=19566112, first_property_name=0x7f86234a496b "schema-id")
   at /build/buildd/glib2.0-2.32.3/./gobject/gobject.c:1545
#21 0x00007f861b7c6c57 in os_utils_is_blacklisted () from /usr/lib/liboverlay-scrollbar3-0.2.so.0
#22 0x00007f8623c529ab in _ubuntu_overlay_scrollbar_init () at /build/buildd/gtk+3.0-3.4.2/./gtk/ubuntuoverlayscrollbar.c:67
#23 0x00007f8623ae3d3a in do_post_parse_initialization (argc=<optimized out>, argv=<optimized out>)
   at /build/buildd/gtk+3.0-3.4.2/./gtk/gtkmain.c:721
#24 post_parse_hook (context=<optimized out>, group=<optimized out>, data=0x12a61a0, error=0x7fffafc2edc0)
   at /build/buildd/gtk+3.0-3.4.2/./gtk/gtkmain.c:767
#25 0x00007f86225a9f70 in g_option_context_parse (context=<optimized out>, argc=<optimized out>, argv=<optimized out>, error=<optimized out>)
   at /build/buildd/glib2.0-2.32.3/./glib/goption.c:1995
#26 0x00007f8623ae40d6 in gtk_init_with_args (argc=0x7fffafc2edbc, argv=0x7fffafc2edb0, parameter_string=<optimized out>, entries=0x60f8e0,
   translation_domain=0x0, error=0x7fffafc2edc0) at /build/buildd/gtk+3.0-3.4.2/./gtk/gtkmain.c:910
#27 0x00000000004068ba in main ()

Steve Atwell (satwell) wrote :

The underlying issue seems to be a change in kerberized NFS on Linux that happened some time between Lucid and Precise. In Lucid, an expired ticket will cause syscalls to return with EACCESS, but in Precise they hang. See bug 794112.

Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in gnome-screensaver (Ubuntu):
status: New → Confirmed
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers