[gdm] Add Solaris logindevperm support. Fixes bug #531651.
- From: Brian Cameron <bcameron src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gdm] Add Solaris logindevperm support. Fixes bug #531651.
- Date: Mon, 24 Aug 2009 20:42:08 +0000 (UTC)
commit 6e199dfefc9a15a6a5067c16f9f6004e404ac96c
Author: Brian Cameron <Brian Cameron sun com>
Date: Mon Aug 24 15:42:16 2009 -0500
Add Solaris logindevperm support. Fixes bug #531651.
configure.ac | 6 ++++++
daemon/gdm-session-worker.c | 41 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+), 0 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 9006020..e709dcc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1056,6 +1056,12 @@ AC_SUBST(EXTRA_SETUP_LIBS)
AC_SUBST(EXTRA_TEST_LIBS)
AC_SUBST(EXTRA_GREETER_LIBS)
+# Check for Solaris logindevperm support
+#
+AC_CHECK_LIB(devinfo, di_devperm_login, [
+ AC_DEFINE(HAVE_LOGINDEVPERM)
+ PAM_LIBS="$PAM_LIBS -ldevinfo" ])
+
dnl ---------------------------------------------------------------------------
dnl - Check for X Server location
dnl ---------------------------------------------------------------------------
diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index c1331df..13e08b1 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -32,6 +32,10 @@
#include <grp.h>
#include <pwd.h>
+#ifdef HAVE_LOGINDEVPERM
+#include <libdevinfo.h>
+#endif /* HAVE_LOGINDEVPERM */
+
#include <security/pam_appl.h>
#include <glib.h>
@@ -977,6 +981,22 @@ gdm_session_worker_uninitialize_pam (GdmSessionWorker *worker,
if (worker->priv->state >= GDM_SESSION_WORKER_STATE_SESSION_OPENED) {
pam_close_session (worker->priv->pam_handle, 0);
gdm_session_auditor_report_logout (worker->priv->auditor);
+
+#ifdef HAVE_LOGINDEVPERM
+ /*
+ * Only do logindevperm processing if /dev/console or
+ * a device associated with a VT
+ */
+ if (worker->priv->display_device != NULL &&
+ (strncmp (worker->priv->display_device, "/dev/vt/", strlen ("/dev/vt/")) == 0 ||
+ strcmp (worker->priv->display_device, "/dev/console") == 0)) {
+ g_debug ("Logindevperm logout for user %s, device %s",
+ worker->priv->username,
+ worker->priv->display_device);
+ (void) di_devperm_logout (worker->priv->display_device);
+ }
+#endif /* HAVE_LOGINDEVPERM */
+
} else {
void *p;
@@ -1729,6 +1749,7 @@ static gboolean
gdm_session_worker_start_user_session (GdmSessionWorker *worker,
GError **error)
{
+ struct passwd *passwd_entry;
pid_t session_pid;
int error_code;
@@ -1737,6 +1758,26 @@ gdm_session_worker_start_user_session (GdmSessionWorker *worker,
register_ck_session (worker);
+ passwd_entry = getpwnam (worker->priv->username);
+
+#ifdef HAVE_LOGINDEVPERM
+ /*
+ * Only do logindevperm processing if /dev/console or
+ * a device associated with a VT
+ */
+ if (worker->priv->display_device != NULL &&
+ (strncmp (worker->priv->display_device, "/dev/vt/", strlen ("/dev/vt/")) == 0 ||
+ strcmp (worker->priv->display_device, "/dev/console") == 0)) {
+ g_debug ("Logindevperm login for user %s, device %s",
+ worker->priv->username,
+ worker->priv->display_device);
+ (void) di_devperm_login (worker->priv->display_device,
+ passwd_entry->pw_uid,
+ passwd_entry->pw_gid,
+ NULL);
+ }
+#endif /* HAVE_LOGINDEVPERM */
+
g_debug ("GdmSessionWorker: opening user session with program '%s'",
worker->priv->arguments[0]);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]