#
# type = Seat type (xlocal, xremote)
# xdg-seat = Seat name to set pam_systemd XDG_SEAT variable and name to pass to X server
+# pam-service = PAM service to use for login
+# pam-autologin-service = PAM service to use for autologin
+# pam-greeter-service = PAM service to use for greeters
# xserver-command = X server command to run (can also contain arguments e.g. X -special-option)
# xserver-layout = Layout to pass to X server
# xserver-config = Config file to pass to X server
[SeatDefaults]
#type=xlocal
#xdg-seat=seat0
+#pam-service=lightdm
+#pam-autologin-service=lightdm-autologin
+#pam-greeter-service=lightdm-greeter
#xserver-command=X
#xserver-layout=
#xserver-config=
===================================================================
--- trunk.orig/src/seat.c
+++ trunk/src/seat.c
-@@ -955,7 +955,7 @@ configure_session (Session *session, Ses
+@@ -950,7 +950,7 @@ configure_session (Session *session, Ses
session_set_env (session, "XDG_CURRENT_DESKTOP", desktop_name);
if (language && language[0] != '\0')
{
config_set_boolean (config_get_instance (), "LightDM", "lock-memory", TRUE);
if (!config_has_key (config_get_instance (), "SeatDefaults", "type"))
config_set_string (config_get_instance (), "SeatDefaults", "type", "xlocal");
+ if (!config_has_key (config_get_instance (), "SeatDefaults", "pam-service"))
+ config_set_string (config_get_instance (), "SeatDefaults", "pam-service", "lightdm");
+ if (!config_has_key (config_get_instance (), "SeatDefaults", "pam-autologin-service"))
+ config_set_string (config_get_instance (), "SeatDefaults", "pam-autologin-service", "lightdm-autologin");
+ if (!config_has_key (config_get_instance (), "SeatDefaults", "pam-greeter-service"))
+ config_set_string (config_get_instance (), "SeatDefaults", "pam-greeter-service", "lightdm-greeter");
if (!config_has_key (config_get_instance (), "SeatDefaults", "xserver-command"))
config_set_string (config_get_instance (), "SeatDefaults", "xserver-command", "X");
if (!config_has_key (config_get_instance (), "SeatDefaults", "xserver-share"))
gboolean stopped;
};
-/* PAM services to use */
-#define GREETER_SERVICE "lightdm-greeter"
-#define USER_SERVICE "lightdm"
-#define AUTOLOGIN_SERVICE "lightdm-autologin"
-
static void seat_logger_iface_init (LoggerInterface *iface);
G_DEFINE_TYPE_WITH_CODE (Seat, seat, G_TYPE_OBJECT,
session = create_guest_session (seat, session_name);
if (!session)
return FALSE;
- session_set_pam_service (session, AUTOLOGIN_SERVICE);
+ session_set_pam_service (session, seat_get_string_property (seat, "pam-autologin-service"));
}
else
{
set_session_env (SESSION (greeter_session));
session_set_env (SESSION (greeter_session), "XDG_SESSION_CLASS", "greeter");
- session_set_pam_service (SESSION (greeter_session), GREETER_SERVICE);
+ session_set_pam_service (SESSION (greeter_session), seat_get_string_property (seat, "pam-greeter-service"));
if (getuid () == 0)
{
gchar *greeter_user;
session_set_argv (SESSION (greeter_session), argv);
g_strfreev (argv);
- greeter_set_pam_services (greeter_session, USER_SERVICE, AUTOLOGIN_SERVICE);
+ greeter_set_pam_services (greeter_session,
+ seat_get_string_property (seat, "pam-service"),
+ seat_get_string_property (seat, "pam-autologin-service"));
g_signal_connect (greeter_session, "create-session", G_CALLBACK (greeter_create_session_cb), seat);
g_signal_connect (greeter_session, "start-session", G_CALLBACK (greeter_start_session_cb), seat);
/* Attempt to authenticate them */
session = create_user_session (seat, username, FALSE);
g_signal_connect (session, "authentication-complete", G_CALLBACK (switch_authentication_complete_cb), seat);
- session_set_pam_service (session, USER_SERVICE);
+ session_set_pam_service (session, seat_get_string_property (seat, "pam-service"));
session_start (session);
return FALSE;
if (seat->priv->session_to_activate)
g_object_unref (seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (session);
- session_set_pam_service (session, AUTOLOGIN_SERVICE);
+ session_set_pam_service (session, seat_get_string_property (seat, "pam-autologin-service"));
session_set_display_server (session, display_server);
return display_server_start (display_server);
session = create_user_session (seat, autologin_username, TRUE);
if (session)
- session_set_pam_service (session, AUTOLOGIN_SERVICE);
+ session_set_pam_service (session, seat_get_string_property (seat, "pam-autologin-service"));
/* Load in background if required */
if (autologin_in_background && session)
test-headless \
test-autologin \
test-autologin-pam \
+ test-autologin-pam-config \
test-autologin-in-background \
test-autologin-guest-in-background \
test-autologin-timeout-in-background \
test-restart-authentication \
test-cancel-authentication-gobject \
test-login-pam \
+ test-login-pam-config \
test-denied \
test-expired \
test-cred-error \
scripts/autologin-in-background.conf \
scripts/autologin-invalid-greeter.conf \
scripts/autologin-pam.conf \
+ scripts/autologin-pam-config.conf \
scripts/autologin-invalid-session.conf \
scripts/autologin-invalid-user.conf \
scripts/autologin-logout.conf \
scripts/login-new-authtok.conf \
scripts/login-no-password.conf \
scripts/login-pam.conf \
+ scripts/login-pam-config.conf \
scripts/login-pick-session.conf \
scripts/login-previous-session.conf \
scripts/login-remember-session.conf \
--- /dev/null
+#
+# Check we can configure the PAM service for automatic login
+#
+
+[SeatDefaults]
+autologin-user=no-password1
+user-session=default
+pam-autologin-service=lightdm-autologin-alternative
+
+[test-pam]
+log-events=true
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Session authenticates
+#?PAM-no-password1 START SERVICE=lightdm-autologin-alternative USER=no-password1
+#?PAM-no-password1 AUTHENTICATE
+#?PAM-no-password1 ACCT-MGMT
+#?PAM-no-password1 SETCRED ESTABLISH_CRED
+#?PAM-no-password1 OPEN-SESSION
+
+# Session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/no-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=no-password1
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?PAM-no-password1 CLOSE-SESSION
+#?PAM-no-password1 SETCRED DELETE_CRED
+#?PAM-no-password1 END
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
--- /dev/null
+#
+# Check we can configure the PAM service for login
+#
+
+[SeatDefaults]
+user-session=default
+pam-service=lightdm-alternative
+pam-greeter-service=lightdm-greeter-alternative
+
+[test-pam]
+log-events=true
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Create PAM session for greeter
+#?PAM-lightdm START SERVICE=lightdm-greeter-alternative USER=lightdm
+#?PAM-lightdm SETCRED ESTABLISH_CRED
+#?PAM-lightdm OPEN-SESSION
+
+# Greeter starts
+#?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-0 ACCEPT-CONNECT
+#?GREETER-X-0 CONNECT-XSERVER
+#?GREETER-X-0 CONNECT-TO-DAEMON
+#?GREETER-X-0 CONNECTED-TO-DAEMON
+
+# Greeter does authentication via PAM
+#?*GREETER-X-0 AUTHENTICATE USERNAME=have-password1
+#?PAM-have-password1 START SERVICE=lightdm-alternative USER=have-password1
+#?PAM-have-password1 AUTHENTICATE
+#?GREETER-X-0 SHOW-PROMPT TEXT="Password:"
+#?*GREETER-X-0 RESPOND TEXT="password"
+#?PAM-have-password1 ACCT-MGMT
+#?GREETER-X-0 AUTHENTICATION-COMPLETE USERNAME=have-password1 AUTHENTICATED=TRUE
+
+# User session starts
+#?*GREETER-X-0 START-SESSION
+#?PAM-have-password1 SETCRED ESTABLISH_CRED
+#?PAM-have-password1 OPEN-SESSION
+
+# Greeter session stops
+#?GREETER-X-0 TERMINATE SIGNAL=15
+#?PAM-lightdm CLOSE-SESSION
+#?PAM-lightdm SETCRED DELETE_CRED
+#?PAM-lightdm END
+
+# Session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1
+#?LOGIN1 ACTIVATE-SESSION SESSION=c1
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?PAM-have-password1 CLOSE-SESSION
+#?PAM-have-password1 SETCRED DELETE_CRED
+#?PAM-have-password1 END
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner autologin-pam-config test-gobject-greeter
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner login-pam-config test-gobject-greeter