8108N/A--- gdm-2.32.0/data/gdm.schemas.in.in-orig 2010-09-28 15:44:14.832286965 -0500
8108N/A+++ gdm-2.32.0/data/gdm.schemas.in.in 2010-09-28 15:46:08.634572870 -0500
8108N/A@@ -47,6 +47,11 @@
8283N/A <signature>i</signature>
8283N/A <default>30</default>
8283N/A </schema>
8283N/A+ <schema>
8283N/A+ <key>daemon/PamService</key>
8283N/A+ <signature>s</signature>
8283N/A+ <default>gdm</default>
8283N/A+ </schema>
8283N/A
8283N/A <schema>
8283N/A <key>debug/Enable</key>
8283N/A--- gdm-2.32.0/common/gdm-settings-keys.h-orig 2010-09-28 15:44:04.818052668 -0500
8283N/A+++ gdm-2.32.0/common/gdm-settings-keys.h 2010-09-28 15:45:50.765986480 -0500
8283N/A@@ -29,6 +29,7 @@ G_BEGIN_DECLS
8283N/A #define GDM_KEY_GROUP "daemon/Group"
8283N/A #define GDM_KEY_AUTO_LOGIN_ENABLE "daemon/AutomaticLoginEnable"
8283N/A #define GDM_KEY_AUTO_LOGIN_USER "daemon/AutomaticLogin"
8283N/A+#define GDM_KEY_PAM_SERVICE "daemon/PamService"
8283N/A #define GDM_KEY_TIMED_LOGIN_ENABLE "daemon/TimedLoginEnable"
8283N/A #define GDM_KEY_TIMED_LOGIN_USER "daemon/TimedLogin"
8283N/A #define GDM_KEY_TIMED_LOGIN_DELAY "daemon/TimedLoginDelay"
8283N/A--- gdm-2.32.0/daemon/gdm-slave.c-orig 2010-09-28 15:43:54.339306817 -0500
8283N/A+++ gdm-2.32.0/daemon/gdm-slave.c 2010-09-28 15:45:05.910009548 -0500
8283N/A@@ -48,6 +48,8 @@
8283N/A #include <X11/Xatom.h>
8283N/A
8108N/A #include "gdm-common.h"
8108N/A+#include "gdm-settings-direct.h"
8283N/A+#include "gdm-settings-keys.h"
8283N/A #include "gdm-xerrors.h"
8283N/A
8283N/A #include "gdm-slave.h"
8283N/A@@ -943,37 +945,35 @@ gdm_slave_add_user_authorization (GdmSla
8283N/A }
8283N/A
8283N/A static char *
8108N/A-gdm_slave_parse_enriched_login (GdmSlave *slave,
8108N/A- const char *username,
8108N/A- const char *display_name)
8108N/A+gdm_slave_parse_enriched_value (GdmSlave *slave,
8108N/A+ const char *value)
8108N/A {
8108N/A char **argv;
8283N/A- int username_len;
8283N/A+ int value_len;
8108N/A GPtrArray *env;
8108N/A GError *error;
8108N/A gboolean res;
8108N/A- char *parsed_username;
8108N/A+ char *parsed_value;
8108N/A char *command;
8108N/A char *std_output;
8392N/A char *std_error;
8108N/A
8108N/A- parsed_username = NULL;
8108N/A+ parsed_value = NULL;
8108N/A
8108N/A- if (username == NULL || username[0] == '\0') {
8108N/A+ if (value == NULL || value[0] == '\0') {
8108N/A return NULL;
8108N/A }
8108N/A
8392N/A- /* A script may be used to generate the automatic/timed login name
8108N/A- based on the display/host by ending the name with the pipe symbol
8108N/A- '|'. */
8108N/A-
8108N/A- username_len = strlen (username);
8108N/A- if (username[username_len - 1] != '|') {
8108N/A- return g_strdup (username);
8108N/A+ /* Some keys that end with '|' can cause a script to be run to get
8108N/A+ * the value based on display/host/etc. */
8108N/A+
8108N/A+ value_len = strlen (value);
8108N/A+ if (value[value_len - 1] != '|') {
8108N/A+ return g_strdup (value);
8108N/A }
8108N/A
8108N/A /* Remove the pipe symbol */
8108N/A- command = g_strndup (username, username_len - 1);
8108N/A+ command = g_strndup (value, value_len - 1);
8108N/A
8108N/A argv = NULL;
8108N/A error = NULL;
8108N/A@@ -985,7 +985,7 @@ gdm_slave_parse_enriched_login (GdmSlave
8108N/A goto out;
8108N/A }
8108N/A
8108N/A- g_debug ("GdmSlave: running '%s' to acquire auto/timed username", command);
8108N/A+ g_debug ("GdmSlave: running '%s' to acquire value", command);
8108N/A g_free (command);
8108N/A
8108N/A env = get_script_environment (slave, NULL);
8108N/A@@ -1009,7 +1009,7 @@ gdm_slave_parse_enriched_login (GdmSlave
8108N/A g_strfreev (argv);
8108N/A
8108N/A if (! res) {
8108N/A- g_warning ("GdmSlave: Unable to launch auto/timed login script '%s': %s", username, error->message);
8108N/A+ g_warning ("GdmSlave: Unable to launch script '%s': %s", value, error->message);
8108N/A g_error_free (error);
8108N/A
8108N/A g_free (std_output);
8108N/A@@ -1020,13 +1020,55 @@ gdm_slave_parse_enriched_login (GdmSlave
8108N/A if (std_output != NULL) {
8108N/A g_strchomp (std_output);
8108N/A if (std_output[0] != '\0') {
8108N/A- parsed_username = g_strdup (std_output);
8108N/A+ parsed_value = g_strdup (std_output);
8283N/A }
8283N/A }
8283N/A
8108N/A out:
8108N/A
8108N/A- return parsed_username;
8108N/A+ return parsed_value;
8392N/A+}
8108N/A+
8108N/A+char *
8283N/A+gdm_slave_get_pam_service (GdmSlave *slave,
8108N/A+ gboolean is_autologin)
8283N/A+{
9021N/A+ char *pam_service;
8108N/A+ char *temp;
8108N/A+
9021N/A+ pam_service = NULL;
8392N/A+ temp = NULL;
8392N/A+
8108N/A+ gdm_settings_direct_get_string (GDM_KEY_PAM_SERVICE,
8108N/A+ &temp);
8108N/A+
8392N/A+ if (temp != NULL) {
8283N/A+ g_debug ("GdmSlave: PAM service name configuration value: %s",
8283N/A+ temp);
8283N/A+ pam_service = gdm_slave_parse_enriched_value (slave, temp);
8392N/A+ }
8283N/A+ g_free (temp);
8283N/A+
8283N/A+ if (pam_service == NULL) {
8283N/A+ /* Default values */
8283N/A+ if (is_autologin) {
8283N/A+ pam_service = g_strdup ("gdm-autologin");
8392N/A+ } else {
8108N/A+ pam_service = g_strdup ("gdm");
8108N/A+ }
8108N/A+ } else {
8108N/A+ /* append "-autologin" to PAM service name if using autologin */
8108N/A+ if (is_autologin) {
8108N/A+ char *temp;
8108N/A+
8108N/A+ temp = g_strdup_printf ("%s-autologin", pam_service);
8108N/A+ g_free (pam_service);
8108N/A+ pam_service = temp;
8108N/A+ }
8108N/A+ }
8108N/A+
8108N/A+ g_debug ("Using PAM service name %s", pam_service);
8283N/A+ return pam_service;
8108N/A }
8108N/A
8108N/A gboolean
8108N/A@@ -1070,9 +1112,8 @@ gdm_slave_get_timed_login_details (GdmSl
8108N/A }
8108N/A
8108N/A if (usernamep != NULL) {
8108N/A- *usernamep = gdm_slave_parse_enriched_login (slave,
- username,
- slave->priv->display_name);
+ *usernamep = gdm_slave_parse_enriched_value (slave,
+ username);
} else {
g_free (username);
--- gdm-2.32.0/daemon/gdm-simple-slave.c-orig 2010-09-28 15:43:27.226261134 -0500
+++ gdm-2.32.0/daemon/gdm-simple-slave.c 2010-09-28 15:45:05.909777279 -0500
@@ -593,10 +593,14 @@ on_session_conversation_started (GdmSess
if (slave->priv->greeter_server != NULL) {
gdm_greeter_server_request_timed_login (slave->priv->greeter_server, username, delay);
} else {
+ char *pam_service;
+
g_debug ("GdmSimpleSlave: begin auto login for user '%s'", username);
+
+ pam_service = gdm_slave_get_pam_service (GDM_SLAVE (slave), TRUE);
gdm_session_setup_for_user (GDM_SESSION (slave->priv->session),
- "gdm-autologin",
- username);
+ pam_service, username);
+ g_free (pam_service);
}
g_free (username);
@@ -889,9 +893,13 @@ static void
on_greeter_begin_verification (GdmGreeterServer *greeter_server,
GdmSimpleSlave *slave)
{
+ char *pam_service;
+
g_debug ("GdmSimpleSlave: begin verification");
- gdm_session_setup (GDM_SESSION (slave->priv->session),
- "gdm");
+
+ pam_service = gdm_slave_get_pam_service (GDM_SLAVE (slave), FALSE);
+ gdm_session_setup (GDM_SESSION (slave->priv->session), pam_service);
+ g_free (pam_service);
}
static void
@@ -899,10 +907,14 @@ on_greeter_begin_auto_login (GdmGreeterS
const char *username,
GdmSimpleSlave *slave)
{
+ char *pam_service;
+
g_debug ("GdmSimpleSlave: begin auto login for user '%s'", username);
+
+ pam_service = gdm_slave_get_pam_service (GDM_SLAVE (slave), TRUE);
gdm_session_setup_for_user (GDM_SESSION (slave->priv->session),
- "gdm-autologin",
- username);
+ pam_service, username);
+ g_free (pam_service);
}
static void
@@ -910,10 +922,14 @@ on_greeter_begin_verification_for_user (
const char *username,
GdmSimpleSlave *slave)
{
+ char *pam_service;
+
g_debug ("GdmSimpleSlave: begin verification");
+
+ pam_service = gdm_slave_get_pam_service (GDM_SLAVE (slave), FALSE);
gdm_session_setup_for_user (GDM_SESSION (slave->priv->session),
- "gdm",
- username);
+ pam_service, username);
+ g_free (pam_service);
}
static void
--- gdm-2.32.0/daemon/gdm-factory-slave.c-orig 2010-09-28 15:43:46.654247696 -0500
+++ gdm-2.32.0/daemon/gdm-factory-slave.c 2010-09-28 15:45:05.909572158 -0500
@@ -396,9 +396,14 @@ static void
on_greeter_begin_verification (GdmGreeterServer *greeter_server,
GdmFactorySlave *slave)
{
+ char *pam_service;
+
g_debug ("GdmFactorySlave: begin verification");
+
+ pam_service = gdm_slave_get_pam_service (GDM_SLAVE (slave), FALSE);
gdm_session_setup (GDM_SESSION (slave->priv->session),
- "gdm");
+ pam_service);
+ g_free (pam_service);
}
static void
@@ -406,10 +411,14 @@ on_greeter_begin_verification_for_user (
const char *username,
GdmFactorySlave *slave)
{
+ char *pam_service;
+
g_debug ("GdmFactorySlave: begin verification for user");
+
+ pam_service = gdm_slave_get_pam_service (GDM_SLAVE (slave), FALSE);
gdm_session_setup_for_user (GDM_SESSION (slave->priv->session),
- "gdm",
- username);
+ pam_service, username);
+ g_free (pam_service);
}
static void
--- gdm-2.32.0/daemon/gdm-slave.h-orig 2010-09-28 15:43:36.891148076 -0500
+++ gdm-2.32.0/daemon/gdm-slave.h 2010-09-28 15:45:08.292835757 -0500
@@ -80,6 +80,8 @@ void gdm_slave_set_busy_c
gboolean gdm_slave_run_script (GdmSlave *slave,
const char *dir,
const char *username);
+char * gdm_slave_get_pam_service (GdmSlave *slave,
+ gboolean is_autologin);
void gdm_slave_stopped (GdmSlave *slave);
void gdm_slave_set_console_session_id (GdmSlave *slave,
const char *session_id);