+lightdm (1.9.7-0ubuntu1) UNRELEASED; urgency=medium
+
+ * Add support for shared data directories that both the greeter and
+ user sessions can write to.
+
+ -- Michael Terry <mterry@ubuntu.com> Tue, 18 Feb 2014 15:40:46 -0500
+
lightdm (1.9.6-0ubuntu3) trusty; urgency=medium
[ Gunnar Hjalmarsson ]
lightdm_greeter_cancel_authentication@Base 0.9.2
lightdm_greeter_cancel_autologin@Base 0.9.2
lightdm_greeter_connect_sync@Base 0.9.2
+ lightdm_greeter_ensure_shared_data_dir@Base 1.9.7
lightdm_greeter_get_authentication_user@Base 0.9.2
lightdm_greeter_get_autologin_guest_hint@Base 0.9.2
lightdm_greeter_get_autologin_timeout_hint@Base 0.9.2
LightDMPromptType
lightdm_greeter_new
lightdm_greeter_connect_sync
+lightdm_greeter_ensure_shared_data_dir
lightdm_greeter_get_default_session_hint
lightdm_greeter_get_hint
lightdm_greeter_get_lock_hint
@Returns:
+<!-- ##### FUNCTION lightdm_greeter_ensure_shared_data_dir ##### -->
+<para>
+
+</para>
+
+@greeter:
+@username:
+
+
GREETER_MESSAGE_START_SESSION,
GREETER_MESSAGE_CANCEL_AUTHENTICATION,
GREETER_MESSAGE_SET_LANGUAGE,
- GREETER_MESSAGE_AUTHENTICATE_REMOTE
+ GREETER_MESSAGE_AUTHENTICATE_REMOTE,
+ GREETER_MESSAGE_ENSURE_SHARED_DIR,
} GreeterMessage;
/* Messages from the server to the greeter */
return return_code == 0;
}
+/**
+ * lightdm_greeter_ensure_shared_data_dir:
+ * @greeter: A #LightDMGreeter
+ * @username: A username
+ *
+ * Ensure that a shared data dir for the given user is available. This will
+ * be created at /var/lib/lightdm-data/@username. Both the greeter user and
+ * @username will have write access to that folder. The intention is that
+ * larger pieces of shared data would be stored there (files that the greeter
+ * creates but wants to give to a user -- like camera photos -- or files that
+ * the user creates but wants the greeter to see -- like contact avatars).
+ *
+ * LightDM will automatically create these if the user actually logs in, so
+ * greeters only need to call this method if they want to store something in
+ * the directory themselves.
+ **/
+void
+lightdm_greeter_ensure_shared_data_dir (LightDMGreeter *greeter, const gchar *username)
+{
+ LightDMGreeterPrivate *priv;
+ guint8 message[MAX_MESSAGE_LENGTH];
+ gsize offset = 0;
+
+ g_return_if_fail (LIGHTDM_IS_GREETER (greeter));
+
+ priv = GET_PRIVATE (greeter);
+
+ g_return_if_fail (priv->connected);
+
+ write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_ENSURE_SHARED_DIR, string_length (username), &offset);
+ write_string (message, MAX_MESSAGE_LENGTH, username, &offset);
+ write_message (greeter, message, offset);
+}
+
static void
lightdm_greeter_init (LightDMGreeter *greeter)
{
gboolean lightdm_greeter_start_session_sync (LightDMGreeter *greeter, const gchar *session, GError **error);
+void lightdm_greeter_ensure_shared_data_dir (LightDMGreeter *greeter, const gchar *username);
+
G_END_DECLS
#endif /* LIGHTDM_GREETER_H_ */
void cancelAuthentication();
void setLanguage (const QString &language);
bool startSessionSync(const QString &session=QString());
+ void ensureSharedDataDir (const QString &username);
Q_SIGNALS:
void showMessage(QString text, QLightDM::Greeter::MessageType type);
return lightdm_greeter_start_session_sync(d->ldmGreeter, session.toLocal8Bit().constData(), NULL);
}
+void Greeter::ensureSharedDataDir(const QString &username)
+{
+ Q_D(Greeter);
+ lightdm_greeter_ensure_shared_data_dir(d->ldmGreeter, username.toLocal8Bit().constData());
+}
+
QString Greeter::getHint(const QString &name) const
{
#include "greeter.h"
#include "configuration.h"
+#include "shared-data-manager.h"
enum {
PROP_0,
GREETER_MESSAGE_START_SESSION,
GREETER_MESSAGE_CANCEL_AUTHENTICATION,
GREETER_MESSAGE_SET_LANGUAGE,
- GREETER_MESSAGE_AUTHENTICATE_REMOTE
+ GREETER_MESSAGE_AUTHENTICATE_REMOTE,
+ GREETER_MESSAGE_ENSURE_SHARED_DIR,
} GreeterMessage;
/* Messages from the server to the greeter */
handle_set_language (greeter, language);
g_free (language);
break;
+ case GREETER_MESSAGE_ENSURE_SHARED_DIR:
+ username = read_string (greeter, &offset);
+ shared_data_manager_ensure_user_dir (shared_data_manager_get_instance (), username);
+ g_free (username);
+ break;
default:
l_warning (greeter, "Unknown message from greeter: %d", id);
break;
user_removed_cb (CommonUserList *list, CommonUser *user,
SharedDataManager *manager)
{
- delete_unused_user (common_user_get_name (user), NULL, manager);
+ delete_unused_user ((gpointer)common_user_get_name (user), NULL, manager);
}
void
#?GREETER-X-0 CONNECT-TO-DAEMON
#?GREETER-X-0 CONNECTED-TO-DAEMON
+# Make sure we can create/chown a directory from the greeter
+#?*GREETER-X-0 ENSURE-SHARED-DATA-DIR USERNAME=have-password2
+#?*WAIT
+#?*LIST-SHARED-DATA-DIRS
+#?RUNNER LIST-SHARED-DATA-DIRS DIRS=have-password1:1000:100:0770,have-password2:1001:100:0770,lightdm:100:100:0770
+
# Log into account without a password
#?*GREETER-X-0 AUTHENTICATE USERNAME=no-password1
#?GREETER-X-0 AUTHENTICATION-COMPLETE USERNAME=no-password1 AUTHENTICATED=TRUE
# Make sure we created the directory as we started session
#?*WAIT
#?*LIST-SHARED-DATA-DIRS
-#?RUNNER LIST-SHARED-DATA-DIRS DIRS=have-password1:1000:100:0770,have-password2:1000:1000:0777,lightdm:100:100:0770,no-password1:1005:100:0770
+#?RUNNER LIST-SHARED-DATA-DIRS DIRS=have-password1:1000:100:0770,have-password2:1001:100:0770,lightdm:100:100:0770,no-password1:1005:100:0770
# Delete one user
#?*DELETE-USER USERNAME=have-password1
#?RUNNER DELETE-USER USERNAME=have-password1
#?*WAIT
#?*LIST-SHARED-DATA-DIRS
-#?RUNNER LIST-SHARED-DATA-DIRS DIRS=have-password2:1000:1000:0777,lightdm:100:100:0770,no-password1:1005:100:0770
+#?RUNNER LIST-SHARED-DATA-DIRS DIRS=have-password2:1001:100:0770,lightdm:100:100:0770,no-password1:1005:100:0770
# Cleanup
#?*STOP-DAEMON
if (strcmp (name, "LOG-USER-LIST-LENGTH") == 0)
status_notify ("%s LOG-USER-LIST-LENGTH N=%d", greeter_id, lightdm_user_list_get_length (lightdm_user_list_get_instance ()));
+ if (strcmp (name, "ENSURE-SHARED-DATA-DIR") == 0)
+ lightdm_greeter_ensure_shared_data_dir (greeter, g_hash_table_lookup (params, "USERNAME"));
+
if (strcmp (name, "WATCH-USER") == 0)
{
LightDMUser *user;