]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Tidy up greeter protocol
authorRobert Ancell <robert.ancell@canonical.com>
Mon, 18 Jul 2011 05:16:24 +0000 (15:16 +1000)
committerRobert Ancell <robert.ancell@canonical.com>
Mon, 18 Jul 2011 05:16:24 +0000 (15:16 +1000)
liblightdm-gobject/Makefile.am
liblightdm-gobject/greeter-protocol.h [deleted file]
liblightdm-gobject/greeter.c
liblightdm-qt/QLightDM/greeter.cpp
src/Makefile.am
src/greeter-protocol.h [deleted file]
src/greeter.c

index ddf2ee61069dbbc329891910a6ab18e778d47d38..ebf680499625345b2d6b7c466b1060d2480d3e2c 100644 (file)
@@ -11,7 +11,6 @@ liblightdm_gobject_0_la_CFLAGS = $(LIBLIGHTDM_GOBJECT_CFLAGS) \
 
 liblightdm_gobject_0_la_SOURCES= \
        greeter.c \
-       greeter-protocol.h \
        language.c \
        layout.c \
        session.c \
diff --git a/liblightdm-gobject/greeter-protocol.h b/liblightdm-gobject/greeter-protocol.h
deleted file mode 100644 (file)
index 2853a65..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010-2011 Robert Ancell.
- * Author: Robert Ancell <robert.ancell@canonical.com>
- * 
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
- * license.
- */
-
-#ifndef _GREETER_PROTOCOL_H_
-#define _GREETER_PROTOCOL_H_
-
-typedef enum
-{
-    /* Messages from the greeter to the server */
-    GREETER_MESSAGE_CONNECT                 = 1,
-    GREETER_MESSAGE_LOGIN                   = 2,
-    GREETER_MESSAGE_LOGIN_AS_GUEST          = 3,
-    GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 4,
-    GREETER_MESSAGE_START_SESSION           = 5,
-    GREETER_MESSAGE_CANCEL_AUTHENTICATION   = 6,
-
-    /* Messages from the server to the greeter */
-    GREETER_MESSAGE_CONNECTED               = 101,
-    GREETER_MESSAGE_QUIT                    = 102,
-    GREETER_MESSAGE_PROMPT_AUTHENTICATION   = 103,
-    GREETER_MESSAGE_END_AUTHENTICATION      = 104,
-    GREETER_MESSAGE_SESSION_FAILED          = 105
-} GreeterMessage;
-
-#endif /* _GREETER_PROTOCOL_H_ */
index 3eee88134ca78923e2af942315b48ec4819ee023..832ecc3bdc162782dc9e0b8e0dbd72478149a408 100644 (file)
@@ -9,6 +9,8 @@
  * license.
  */
 
+#include <config.h>
+
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
@@ -21,7 +23,6 @@
 
 #include "lightdm/greeter.h"
 #include "user-private.h"
-#include "greeter-protocol.h"
 
 enum {
     PROP_0,
@@ -115,6 +116,27 @@ G_DEFINE_TYPE (LdmGreeter, ldm_greeter, G_TYPE_OBJECT);
 #define PASSWD_FILE      "/etc/passwd"
 #define USER_CONFIG_FILE "/etc/lightdm/users.conf"
 
+/* Messages from the greeter to the server */
+typedef enum
+{
+    GREETER_MESSAGE_CONNECT = 0,
+    GREETER_MESSAGE_LOGIN,
+    GREETER_MESSAGE_LOGIN_AS_GUEST,
+    GREETER_MESSAGE_CONTINUE_AUTHENTICATION,
+    GREETER_MESSAGE_START_SESSION,
+    GREETER_MESSAGE_CANCEL_AUTHENTICATION
+} GreeterMessage;
+
+/* Messages from the server to the greeter */
+typedef enum
+{
+    SERVER_MESSAGE_CONNECTED = 0,
+    SERVER_MESSAGE_QUIT,
+    SERVER_MESSAGE_PROMPT_AUTHENTICATION,
+    SERVER_MESSAGE_END_AUTHENTICATION,
+    SERVER_MESSAGE_SESSION_FAILED,
+} ServerMessage;
+
 /**
  * ldm_greeter_new:
  *
@@ -419,19 +441,19 @@ from_server_cb (GIOChannel *source, GIOCondition condition, gpointer data)
     read_int (greeter, &offset);
     switch (id)
     {
-    case GREETER_MESSAGE_CONNECTED:
+    case SERVER_MESSAGE_CONNECTED:
         handle_connected (greeter, &offset);
         break;
-    case GREETER_MESSAGE_PROMPT_AUTHENTICATION:
+    case SERVER_MESSAGE_PROMPT_AUTHENTICATION:
         handle_prompt_authentication (greeter, &offset);
         break;
-    case GREETER_MESSAGE_END_AUTHENTICATION:
+    case SERVER_MESSAGE_END_AUTHENTICATION:
         handle_end_authentication (greeter, &offset);
         break;
-    case GREETER_MESSAGE_SESSION_FAILED:
+    case SERVER_MESSAGE_SESSION_FAILED:
         handle_session_failed (greeter, &offset);
         break;
-    case GREETER_MESSAGE_QUIT:
+    case SERVER_MESSAGE_QUIT:
         handle_quit (greeter, &offset);
         break;
     default:
@@ -499,7 +521,8 @@ ldm_greeter_connect_to_server (LdmGreeter *greeter)
     g_io_add_watch (greeter->priv->from_server_channel, G_IO_IN, from_server_cb, greeter);
 
     g_debug ("Connecting to display manager...");
-    write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_CONNECT, 0, &offset);
+    write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_CONNECT, string_length (VERSION), &offset);
+    write_string (message, MAX_MESSAGE_LENGTH, VERSION, &offset);
     write_message (greeter, message, offset);
 
     return TRUE;
index e81575c860a12521148213a2ad20c73062255b75..bb1ee2678a4d99e1d5cf748b27502857741ad019 100644 (file)
 #include <QtDBus/QDBusInterface>
 #include <QtDBus/QDBusReply>
 
+/* Messages from the greeter to the server */
 typedef enum
 {
-    /* Messages from the greeter to the server */
-    GREETER_MESSAGE_CONNECT                 = 1,
-    GREETER_MESSAGE_LOGIN                   = 2,
-    GREETER_MESSAGE_LOGIN_AS_GUEST          = 3,
-    GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 4,
-    GREETER_MESSAGE_START_SESSION           = 5,
-    GREETER_MESSAGE_CANCEL_AUTHENTICATION   = 6,
-
-    /* Messages from the server to the greeter */
-    GREETER_MESSAGE_CONNECTED               = 101,
-    GREETER_MESSAGE_QUIT                    = 102,
-    GREETER_MESSAGE_PROMPT_AUTHENTICATION   = 103,
-    GREETER_MESSAGE_END_AUTHENTICATION      = 104,
-    GREETER_MESSAGE_SESSION_FAILED          = 105
+    GREETER_MESSAGE_CONNECT = 0,
+    GREETER_MESSAGE_LOGIN,
+    GREETER_MESSAGE_LOGIN_AS_GUEST,
+    GREETER_MESSAGE_CONTINUE_AUTHENTICATION,
+    GREETER_MESSAGE_START_SESSION,
+    GREETER_MESSAGE_CANCEL_AUTHENTICATION
 } GreeterMessage;
 
+/* Messages from the server to the greeter */
+typedef enum
+{
+    SERVER_MESSAGE_CONNECTED = 0,
+    SERVER_MESSAGE_QUIT,
+    SERVER_MESSAGE_PROMPT_AUTHENTICATION,
+    SERVER_MESSAGE_END_AUTHENTICATION,
+    SERVER_MESSAGE_SESSION_FAILED,
+} ServerMessage;
+
 #define HEADER_SIZE 8
 
 using namespace QLightDM;
@@ -203,7 +206,8 @@ void Greeter::connectToServer()
     connect(d->n, SIGNAL(activated(int)), this, SLOT(onRead(int)));
 
     qDebug() << "Connecting to display manager...";
-    writeHeader(GREETER_MESSAGE_CONNECT, 0);
+    writeHeader(GREETER_MESSAGE_CONNECT, stringLength(VERSION));
+    writeString(VERSION);
     flush();
 }
 
@@ -320,7 +324,7 @@ void Greeter::onRead(int fd)
     QString version, username;
     switch(id)
     {
-    case GREETER_MESSAGE_CONNECTED:
+    case SERVER_MESSAGE_CONNECTED:
         version = readString(&offset);
         d->defaultSession = readString(&offset);
         d->timedUser = readString(&offset);
@@ -336,11 +340,11 @@ void Greeter::onRead(int fd)
         }
         emit connected();
         break;
-    case GREETER_MESSAGE_QUIT:
+    case SERVER_MESSAGE_QUIT:
         qDebug() << "Got quit request from server";
         emit quit();
         break;
-    case GREETER_MESSAGE_PROMPT_AUTHENTICATION:
+    case SERVER_MESSAGE_PROMPT_AUTHENTICATION:
         sequenceNumber = readInt(&offset);
 
         if (sequenceNumber == d->authenticateSequenceNumber &&
@@ -370,7 +374,7 @@ void Greeter::onRead(int fd)
             }
         }
         break;
-    case GREETER_MESSAGE_END_AUTHENTICATION:
+    case SERVER_MESSAGE_END_AUTHENTICATION:
         sequenceNumber = readInt(&offset);
         returnCode = readInt(&offset);
 
@@ -388,7 +392,7 @@ void Greeter::onRead(int fd)
         else
             qDebug () << "Ignoring end authentication with invalid sequence number " << sequenceNumber;
         break;
-    case GREETER_MESSAGE_SESSION_FAILED:
+    case SERVER_MESSAGE_SESSION_FAILED:
         qDebug() << "Session failed to start";
         emit sessionFailed();
         break;
index 35e8d1b394e81f9870dfb89daac660c4cfffe4f4..6ce844d21bcb6cf8182362654f4fcd41b9425acf 100644 (file)
@@ -21,7 +21,6 @@ lightdm_SOURCES = \
        dmrc.h \
        greeter.c \
        greeter.h \
-       greeter-protocol.h \
        guest-account.c \
        guest-account.h \
        lightdm.c \
diff --git a/src/greeter-protocol.h b/src/greeter-protocol.h
deleted file mode 100644 (file)
index 2853a65..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010-2011 Robert Ancell.
- * Author: Robert Ancell <robert.ancell@canonical.com>
- * 
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
- * license.
- */
-
-#ifndef _GREETER_PROTOCOL_H_
-#define _GREETER_PROTOCOL_H_
-
-typedef enum
-{
-    /* Messages from the greeter to the server */
-    GREETER_MESSAGE_CONNECT                 = 1,
-    GREETER_MESSAGE_LOGIN                   = 2,
-    GREETER_MESSAGE_LOGIN_AS_GUEST          = 3,
-    GREETER_MESSAGE_CONTINUE_AUTHENTICATION = 4,
-    GREETER_MESSAGE_START_SESSION           = 5,
-    GREETER_MESSAGE_CANCEL_AUTHENTICATION   = 6,
-
-    /* Messages from the server to the greeter */
-    GREETER_MESSAGE_CONNECTED               = 101,
-    GREETER_MESSAGE_QUIT                    = 102,
-    GREETER_MESSAGE_PROMPT_AUTHENTICATION   = 103,
-    GREETER_MESSAGE_END_AUTHENTICATION      = 104,
-    GREETER_MESSAGE_SESSION_FAILED          = 105
-} GreeterMessage;
-
-#endif /* _GREETER_PROTOCOL_H_ */
index b6e4f2ca29076784b4abf42fe63437f5c7225ebc..0f0cc8c2dab231d08780c6d83979e45e65c4ad19 100644 (file)
@@ -17,7 +17,6 @@
 
 #include "greeter.h"
 #include "ldm-marshal.h"
-#include "greeter-protocol.h"
 #include "guest-account.h"
 
 enum {
@@ -31,9 +30,6 @@ struct GreeterPrivate
     /* Session running on */
     Session *session;
 
-    /* TRUE if the greeter has connected to the daemon pipe */
-    gboolean connected;
-
     /* Buffer for data read from greeter */
     guint8 *read_buffer;
     gsize n_read;
@@ -62,6 +58,27 @@ struct GreeterPrivate
 
 G_DEFINE_TYPE (Greeter, greeter, G_TYPE_OBJECT);
 
+/* Messages from the greeter to the server */
+typedef enum
+{
+    GREETER_MESSAGE_CONNECT = 0,
+    GREETER_MESSAGE_LOGIN,
+    GREETER_MESSAGE_LOGIN_AS_GUEST,
+    GREETER_MESSAGE_CONTINUE_AUTHENTICATION,
+    GREETER_MESSAGE_START_SESSION,
+    GREETER_MESSAGE_CANCEL_AUTHENTICATION
+} GreeterMessage;
+
+/* Messages from the server to the greeter */
+typedef enum
+{
+    SERVER_MESSAGE_CONNECTED = 0,
+    SERVER_MESSAGE_QUIT,
+    SERVER_MESSAGE_PROMPT_AUTHENTICATION,
+    SERVER_MESSAGE_END_AUTHENTICATION,
+    SERVER_MESSAGE_SESSION_FAILED,
+} ServerMessage;
+
 Greeter *
 greeter_new (Session *session)
 {
@@ -174,18 +191,14 @@ string_length (const gchar *value)
 }
 
 static void
-handle_connect (Greeter *greeter)
+handle_connect (Greeter *greeter, const gchar *version)
 {
     guint8 message[MAX_MESSAGE_LENGTH];
     gsize offset = 0;
 
-    if (!greeter->priv->connected)
-    {
-        greeter->priv->connected = TRUE;
-        g_debug ("Greeter connected");
-    }
+    g_debug ("Greeter connected version=%s", version);
 
-    write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_CONNECTED, string_length (VERSION) + string_length (greeter->priv->default_session) + string_length (greeter->priv->selected_user) + int_length () + int_length (), &offset);
+    write_header (message, MAX_MESSAGE_LENGTH, SERVER_MESSAGE_CONNECTED, string_length (VERSION) + string_length (greeter->priv->default_session) + string_length (greeter->priv->selected_user) + int_length () + int_length (), &offset);
     write_string (message, MAX_MESSAGE_LENGTH, VERSION, &offset);
     write_string (message, MAX_MESSAGE_LENGTH, greeter->priv->default_session, &offset);
     write_string (message, MAX_MESSAGE_LENGTH, greeter->priv->selected_user, &offset);
@@ -207,7 +220,7 @@ pam_messages_cb (PAMSession *session, int num_msg, const struct pam_message **ms
     size = int_length () + int_length ();
     for (i = 0; i < num_msg; i++)
         size += int_length () + string_length (msg[i]->msg);
-    write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_PROMPT_AUTHENTICATION, size, &offset);
+    write_header (message, MAX_MESSAGE_LENGTH, SERVER_MESSAGE_PROMPT_AUTHENTICATION, size, &offset);
     write_int (message, MAX_MESSAGE_LENGTH, greeter->priv->authentication_sequence_number, &offset);
     write_int (message, MAX_MESSAGE_LENGTH, num_msg, &offset);
     for (i = 0; i < num_msg; i++)
@@ -224,7 +237,7 @@ send_end_authentication (Greeter *greeter, guint32 sequence_number, int result)
     guint8 message[MAX_MESSAGE_LENGTH];
     gsize offset = 0;
 
-    write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_END_AUTHENTICATION, int_length () + int_length (), &offset);
+    write_header (message, MAX_MESSAGE_LENGTH, SERVER_MESSAGE_END_AUTHENTICATION, int_length () + int_length (), &offset);
     write_int (message, MAX_MESSAGE_LENGTH, sequence_number, &offset);
     write_int (message, MAX_MESSAGE_LENGTH, result, &offset);
     write_message (greeter, message, offset); 
@@ -314,10 +327,6 @@ handle_continue_authentication (Greeter *greeter, gchar **secrets)
     struct pam_response *response;
     int i, j, n_secrets = 0;
 
-    /* Not connected */
-    if (!greeter->priv->connected)
-        return;
-
     /* Not in authorization */
     if (greeter->priv->pam_session == NULL)
         return;
@@ -358,10 +367,6 @@ handle_continue_authentication (Greeter *greeter, gchar **secrets)
 static void
 handle_cancel_authentication (Greeter *greeter)
 {
-    /* Not connected */
-    if (!greeter->priv->connected)
-        return;
-
     /* Not in authorization */
     if (greeter->priv->pam_session == NULL)
         return;
@@ -379,7 +384,7 @@ greeter_quit (Greeter *greeter)
 
     g_return_if_fail (greeter != NULL);
 
-    write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_QUIT, 0, &offset);
+    write_header (message, MAX_MESSAGE_LENGTH, SERVER_MESSAGE_QUIT, 0, &offset);
     write_message (greeter, message, offset);
 }
 
@@ -398,7 +403,7 @@ handle_start_session (Greeter *greeter, gchar *session)
         guint8 message[MAX_MESSAGE_LENGTH];
         gsize offset = 0;
 
-        write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_SESSION_FAILED, 0, &offset);
+        write_header (message, MAX_MESSAGE_LENGTH, SERVER_MESSAGE_SESSION_FAILED, 0, &offset);
         write_message (greeter, message, offset);
     }
 }
@@ -448,7 +453,7 @@ read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
     GIOStatus status;
     int id, n_secrets, i;
     guint32 sequence_number;
-    gchar *username, *session_name;
+    gchar *version, *username, *session_name;
     gchar **secrets;
     GError *error = NULL;
 
@@ -503,7 +508,9 @@ read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
     switch (id)
     {
     case GREETER_MESSAGE_CONNECT:
-        handle_connect (greeter);
+        version = read_string (greeter, &offset);
+        handle_connect (greeter, version);
+        g_free (version);
         break;
     case GREETER_MESSAGE_LOGIN:
         sequence_number = read_int (greeter, &offset);