From 04fd09cfa88718838e02f4419befc1a0dd4b5a0e Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Mon, 12 Jan 2009 14:13:09 +0000 Subject: [PATCH] dbus + fprintd error On Mon, 2009-01-12 at 12:18 +0000, Konstantin V. Gavrilenko wrote: > Hi Bastien, > > by default the fprintd installs the pam_fprintd into the /usr/lib64/security, whil egentoo searches them in /lib/security. > So I simply simlinked it to the correct location /usr/lib64/security/pam_fprintd.so to /lib/security/pam_fprintd.so > I've removed the symlink, and copied the file, but it does not change anything, the same error appears. > > As you asked, recompiled some of the packages with "-O1 -gddb" and "nostrip" options. > #4 0x00007fa3344a3899 in dbus_connection_unref (connection=0x624e20) at dbus-connection.c:2686 > __FUNCTION__ = "dbus_connection_unref" > #5 0x00007fa334915284 in pam_sm_authenticate (pamh=0x6105c0, flags=, argc=, argv=) at pam_fprintd.c:375 > rhost = 0x0 > username = 0x610740 "root" > i = > r = 0 Could you please test the attached patch? Cheers --- pam/pam_fprintd.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pam/pam_fprintd.c b/pam/pam_fprintd.c index 133c33e..9847f4a 100644 --- a/pam/pam_fprintd.c +++ b/pam/pam_fprintd.c @@ -154,6 +154,15 @@ static DBusGProxy *create_manager (pam_handle_t *pamh, DBusGConnection **ret_con return manager; } +static close_and_unref (DBusGConnection *connection) +{ + DBusConnection *conn; + + conn = dbus_g_connection_get_connection (connection); + dbus_connection_close (conn); + dbus_g_connection_unref (connection); +} + static DBusGProxy *open_device(pam_handle_t *pamh, DBusGConnection *connection, DBusGProxy *manager, const char *username) { GError *error = NULL; @@ -372,7 +381,7 @@ static int do_auth(pam_handle_t *pamh, const char *username) g_object_unref (manager); if (!dev) { g_main_loop_unref (loop); - dbus_g_connection_unref (connection); + close_and_unref (connection); return PAM_AUTHINFO_UNAVAIL; } ret = do_verify(loop, pamh, dev); @@ -380,7 +389,7 @@ static int do_auth(pam_handle_t *pamh, const char *username) g_main_loop_unref (loop); release_device(pamh, dev); g_object_unref (dev); - dbus_g_connection_unref (connection); + close_and_unref (connection); return ret; }