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

Reply via email to