Enlightenment CVS committal
Author : xcomputerman
Project : e17
Module : apps/entrance
Dir : e17/apps/entrance/src/client
Modified Files:
entrance_auth.h entrance_ipc.c entrance_ipc.h
entrance_session.c entrance_session.h main.c
Log Message:
Fill in client-side IPC functions/refactor code
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_auth.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- entrance_auth.h 3 Mar 2004 18:16:15 -0000 1.7
+++ entrance_auth.h 25 Mar 2004 06:44:52 -0000 1.8
@@ -3,6 +3,7 @@
#include "../config.h"
#include "entrance_config.h"
+#include <sys/types.h>
#include <pwd.h>
#include <grp.h>
#include <paths.h>
@@ -54,9 +55,9 @@
#endif
struct passwd *pw;
- char user[PATH_MAX];
- char pass[PATH_MAX];
- char **env;
+ char user[PATH_MAX];
+ char pass[PATH_MAX];
+ char **env;
};
typedef struct _Entrance_Auth Entrance_Auth;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_ipc.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- entrance_ipc.c 25 Mar 2004 05:23:00 -0000 1.2
+++ entrance_ipc.c 25 Mar 2004 06:44:52 -0000 1.3
@@ -1,14 +1,13 @@
/*==========================================================================
* Filename: entrance_ipc.c
*========================================================================*/
-#include <Ecore.h>
-#include <Ecore_Ipc.h>
-#include <limits.h>
-#include <stdio.h>
+#include "entrance_ipc.h"
#define IPC_TITLE "entrance_ipc"
static Ecore_Ipc_Server *server = NULL;
+static Entrance_Session *_session = NULL;
+
/**
* _entrance_ipc_server_add - when we connect to the ipc daemon
* @data -
@@ -52,9 +51,28 @@
{
Ecore_Ipc_Event_Server_Data *e;
- e = (Ecore_Ipc_Event_Server_Data *) event;
- printf("_entrance_ipc_server_data: Received [%i] [%i] (%i) \"%s\"\n", e->major,
e->minor,
- e->size, (char *) e->data);
+ if ((e = (Ecore_Ipc_Event_Server_Data *) event) && _session)
+ {
+ printf("_entrance_ipc_server_data: Received [%i] [%i] (%i) \"%s\"\n",
+ e->major, e->minor, e->size, (char *) e->data);
+
+ if (e->major == E_XAUTH_ACK)
+ {
+ printf("_entrance_ipc_server_data: Xauthority write success\n");
+ ecore_main_loop_quit();
+ }
+ else if (e->major == E_XAUTH_NAK)
+ {
+ printf("_entrance_ipc_server_data: Xauthority write failure!\n");
+ /* For now we'll attempt to start the user session regardless */
+ ecore_main_loop_quit();
+ }
+ else
+ {
+ printf("_entrance_ipc_server_data: Invalid message received\n");
+ }
+ }
+
return TRUE;
}
@@ -102,8 +120,10 @@
Ecore_Ipc_Event_Client_Data *e;
e = (Ecore_Ipc_Event_Client_Data *) event;
- printf("_entrance_ipc_client_data: Sent [%i] [%i] (%i) \"%s\"\n", e->major,
e->minor,
- e->size, (char *) e->data);
+
+ printf("_entrance_ipc_client_data: Received [%i] [%i] (%i) \"%s\"\n",
+ e->major, e->minor, e->size, (char *) e->data);
+
return TRUE;
}
@@ -163,3 +183,25 @@
ecore_ipc_shutdown();
fprintf(stderr, "entrance_ipc_shutdown: Success\n");
}
+
+int
+entrance_ipc_connected_get(void)
+{
+ return server && ecore_ipc_server_connected_get(server);
+}
+
+void
+entrance_ipc_session_set(Entrance_Session *session)
+{
+ _session = session;
+}
+
+void
+entrance_ipc_request_xauth(char *homedir, uid_t uid, gid_t gid)
+{
+ ecore_ipc_server_send(server, E_XAUTH_REQ, E_UID, 0, 0, (int) uid, "", 0);
+ ecore_ipc_server_send(server, E_XAUTH_REQ, E_GID, 0, 0, (int) gid, "", 0);
+ ecore_ipc_server_send(server, E_XAUTH_REQ, E_HOMEDIR, 0, 0, 0, homedir,
+ strlen(homedir));
+}
+
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_ipc.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- entrance_ipc.h 23 Mar 2004 17:43:34 -0000 1.1
+++ entrance_ipc.h 25 Mar 2004 06:44:52 -0000 1.2
@@ -1,7 +1,25 @@
#ifndef ENTRANCE_IPC_H
#define ENTRANCE_IPC_H
+#include <sys/types.h>
+#define E_MAJOR 0xEE
+#define E_UID 0x10
+#define E_GID 0x11
+#define E_HOMEDIR 0x12
+
+#include <Ecore.h>
+#include <Ecore_Ipc.h>
+#include <stdio.h>
+#include <limits.h>
+#include <sys/types.h>
+
+#include "../ipc.h"
+#include "entrance_session.h"
+
void entrance_ipc_shutdown(void);
-int entrance_ipc_init(int argc, const char **argv);
+int entrance_ipc_init(int argc, const char **argv);
+int entrance_ipc_connected_get(void);
+void entrance_ipc_session_set(Entrance_Session *session);
+void entrance_ipc_request_xauth(char *homedir, uid_t uid, gid_t gid);
#endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_session.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -3 -r1.45 -r1.46
--- entrance_session.c 25 Mar 2004 05:29:21 -0000 1.45
+++ entrance_session.c 25 Mar 2004 06:44:52 -0000 1.46
@@ -277,13 +277,34 @@
}
/**
- * entrance_session_start_user_session: Set up user environment
- * This function set's up the user's environment, then launches the
- * requested X session using the login watchdog process
+ * entrance_session_setup_user_session: Setup user session
+ * Set up user's environment, including environment variables,
+ * Xauth cookie and any other necessary parameters
+ * @param e The current Entrance Session
+ */
+void
+entrance_session_setup_user_session(Entrance_Session *e)
+{
+ char *homedir;
+
+ entrance_auth_setup_environment(e->auth);
+ homedir = getenv("HOME");
+ if (entrance_ipc_connected_get())
+ entrance_ipc_request_xauth(homedir, e->auth->pw->pw_uid,
+ e->auth->pw->pw_gid);
+ else
+ /* No daemon available, assume no xauth */
+ ecore_main_loop_quit();
+}
+
+/**
+ * entrance_session_start_user_session: Launch user session
+ * This function launches the requested X session using the
+ * login watchdog process
* @param e - the currently running session
*/
void
-entrance_session_start_user_session(Entrance_Session * e)
+entrance_session_start_user_session(Entrance_Session *e)
{
char buf[PATH_MAX];
char *session_key = NULL;
@@ -343,6 +364,7 @@
syslog(LOG_CRIT, "Unable to set group id.");
if (setuid(e->auth->pw->pw_uid))
syslog(LOG_CRIT, "Unable to set user id.");
+ entrance_auth_clear_pass(e->auth);
entrance_auth_free(e->auth);
e->auth = NULL;
execl("/bin/sh", "/bin/sh", "-c", buf, NULL);
@@ -357,7 +379,6 @@
_entrance_session_user_list_fix(e);
/* clear users's password out of memory */
entrance_auth_clear_pass(e->auth);
- entrance_ipc_shutdown();
/* this bypasses a race condition where entrance loses its x connection */
/* before the wm gets it and x goes and resets itself */
sleep(10);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/entrance_session.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- entrance_session.h 11 Mar 2004 20:21:33 -0000 1.16
+++ entrance_session.h 25 Mar 2004 06:44:52 -0000 1.17
@@ -45,6 +45,7 @@
void entrance_session_user_reset(Entrance_Session * e);
void entrance_session_user_set(Entrance_Session * e, Entrance_User * user);
void entrance_session_user_session_default_set(Entrance_Session * e);
+void entrance_session_setup_user_session(Entrance_Session * e);
void entrance_session_start_user_session(Entrance_Session * e);
void entrance_session_edje_object_set(Entrance_Session * e,
Evas_Object * obj);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/entrance/src/client/main.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -3 -r1.46 -r1.47
--- main.c 25 Mar 2004 05:23:00 -0000 1.46
+++ main.c 25 Mar 2004 06:44:52 -0000 1.47
@@ -303,7 +303,7 @@
* receive the cookie back from server
*/
}
- ecore_main_loop_quit();
+ entrance_session_setup_user_session(session);
}
/**
@@ -852,6 +852,7 @@
#endif
entrance_session_ecore_evas_set(session, e);
+ entrance_ipc_session_set(session);
entrance_session_run(session);
if (session->authed)
@@ -862,9 +863,9 @@
else
{
entrance_session_free(session);
- entrance_ipc_shutdown();
ecore_evas_shutdown();
}
+ entrance_ipc_shutdown();
edje_shutdown();
ecore_x_shutdown();
ecore_shutdown();
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs