Eugen Minciu wrote: > On Mon, 28 Aug 2006 08:01:54 +0300 > Eugen Minciu <[EMAIL PROTECTED]> wrote: > > And here is another version that frees the memory it allocates in the correct > place. > > Sorry about so many posts on what should have been a simple thingie. It's the > first patch I'm sending you guys, I promise I'll try to shut up a bit more > from now on ;) >
hahaha... i'll wait a couple of hours for good measure then I'll commit ;) thx for actually taking the time to solve this. > >> On Mon, 28 Aug 2006 05:04:10 +0100 >> Essien Ita Essien <[EMAIL PROTECTED]> wrote: >> >> Ouch, sorry, lol :) >> Here it is >> >> >>> Eugen Minciu wrote: >>> >>>> On Sun, 27 Aug 2006 23:22:38 +0300 >>>> Eugen Minciu <[EMAIL PROTECTED]> wrote: >>>> And finally, I've got it. >>>> >>>> The problem was in entrance_auth_setup_environment() which called >>>> clearenv(). >>>> >>>> For some reasong calling getenv() there did not return the path either. So >>>> I added an extra parameter, const char *path. >>>> >>>> This finally works, I can run apps and everything appears to be working >>>> correctly. >>>> >>>> >>> Nice, but no patch attached ;) >>> >>>> Eugen. >>>> >>>> >>>>> On Sun, 27 Aug 2006 22:36:31 +0300 >>>>> Eugen Minciu <[EMAIL PROTECTED]> wrote: >>>>> I've figured out what causes the problem, but I don't know how to fix it >>>>> this time. >>>>> >>>>> This happens because once I replace the execl() call in >>>>> entrance_session_start_user_session, the environment variables for the >>>>> user are no longer loaded. If anyone could tell me how to load these >>>>> settings from C code, I'd very much appreciate it. >>>>> >>>>> As things stand, at this point, entrance does work with this, and the E17 >>>>> session starts, but many issues can quickly be noticed, probably caused >>>>> by not setting the environment variables to some proper values. >>>>> >>>>> >>>>> >>>>>> On Sun, 27 Aug 2006 22:30:58 +0300 >>>>>> Eugen Minciu <[EMAIL PROTECTED]> wrote: >>>>>> >>>>>> Sorry, it seems that if I use this I get some issues within e. If I try >>>>>> to start an application from the run command thingie, it will tell me >>>>>> that the application failed to start. >>>>>> >>>>>> I'll try to see what causes this. If anyone would be willing to >>>>>> investigate and/or give me any clues it would be appreciated. >>>>>> >>>>>> >>>>>> >>>>>>> Here's a new patch for entranced and entrance. >>>>>>> >>>>>>> This time I did what the comment suggested in both places. I used >>>>>>> strtok and parsed directly into a char ** which then gets run by >>>>>>> execv/execvp. >>>>>>> >>>>>>> If my code strikes you as ugly (I'm not sure if it should) be sure to >>>>>>> tell me what I did wrong and I'll try to fix it some more. >>>>>>> >>>>>>> BTW, this diff is made from e17/apps/entrance. I'm sorry, is this what >>>>>>> you meant or should I have made it dirrectly from e17/ ? >>>>>>> >>>>>>> Eugen. >>>>>>> >>>>>>> >>>>>>> >>>> ------------------------------------------------------------------------- >>>> Using Tomcat but need to do more? Need to support web services, security? >>>> Get stuff done quickly with pre-integrated technology to make your job >>>> easier >>>> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo >>>> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 >>>> _______________________________________________ >>>> enlightenment-devel mailing list >>>> enlightenment-devel@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel >>>> >>>> >>>> >> ------------------------------------------------------------------------ >> >> Index: src/client/entrance_auth.c >> =================================================================== >> RCS file: /var/cvs/e/e17/apps/entrance/src/client/entrance_auth.c,v >> retrieving revision 1.26 >> diff -u -r1.26 entrance_auth.c >> --- src/client/entrance_auth.c 9 Aug 2005 08:11:32 -0000 1.26 >> +++ src/client/entrance_auth.c 28 Aug 2006 08:15:59 -0000 >> @@ -377,7 +377,7 @@ >> * I'm not sure if this is correct, but for now it works. >> */ >> void >> -entrance_auth_setup_environment(Entrance_Auth * e, const char *display) >> +entrance_auth_setup_environment(Entrance_Auth * e, const char *display, >> const char *path) >> { >> extern char **environ; >> int size; >> @@ -394,10 +394,15 @@ >> environ = NULL; >> #endif >> >> + /* We purge the config but keep $PATH in place */ >> + /* We need this because we're not running "sh -l" anymore */ >> + >> + >> e->env = environ; >> snprintf(buf, PATH_MAX, "%s/.Xauthority", e->pw->pw_dir); >> setenv("XAUTHORITY", buf, 1); >> setenv("TERM", "vt100", 0); // TERM=linux? >> + setenv("PATH", path, 1); >> setenv("HOME", e->pw->pw_dir, 1); >> setenv("SHELL", e->pw->pw_shell, 1); >> setenv("USER", e->pw->pw_name, 1); >> Index: src/client/entrance_auth.h >> =================================================================== >> RCS file: /var/cvs/e/e17/apps/entrance/src/client/entrance_auth.h,v >> retrieving revision 1.13 >> diff -u -r1.13 entrance_auth.h >> --- src/client/entrance_auth.h 28 May 2005 09:31:14 -0000 1.13 >> +++ src/client/entrance_auth.h 28 Aug 2006 08:15:59 -0000 >> @@ -77,7 +77,7 @@ >> >> /* 0 on success, 1 on no user by that name */ >> int entrance_auth_user_set(Entrance_Auth * e, const char *str); >> -void entrance_auth_setup_environment(Entrance_Auth * e, const char >> *display); >> +void entrance_auth_setup_environment(Entrance_Auth * e, const char >> *display,const char *path); >> void entrance_auth_reset(Entrance_Auth * e); >> >> #endif >> Index: src/client/entrance_session.c >> =================================================================== >> RCS file: /var/cvs/e/e17/apps/entrance/src/client/entrance_session.c,v >> retrieving revision 1.84 >> diff -u -r1.84 entrance_session.c >> --- src/client/entrance_session.c 3 Jun 2006 07:24:49 -0000 1.84 >> +++ src/client/entrance_session.c 28 Aug 2006 08:16:00 -0000 >> @@ -355,9 +355,12 @@ >> entrance_session_setup_user_session(Entrance_Session * e) >> { >> char *homedir; >> + char *path; >> >> - entrance_auth_setup_environment(e->auth, e->display); >> homedir = getenv("HOME"); >> + path = strdup(getenv("PATH")); >> + entrance_auth_setup_environment(e->auth, e->display, >> strdup(getenv("PATH"))); >> + free(path); >> if (entrance_ipc_connected_get()) >> entrance_ipc_request_xauth(homedir, e->auth->pw->pw_uid, >> e->auth->pw->pw_gid); >> @@ -377,14 +380,24 @@ >> { >> pid_t pid; >> char buf[PATH_MAX]; >> + char *session_cmd_argv[32]; >> + >> char *shell = NULL; >> + char *path = NULL; >> struct passwd *pwent = NULL; >> Entrance_X_Session *exs = NULL; >> + int i; >> + >> + path=strdup(getenv("PATH")); >> + >> + for (i=0;i<32;i++) session_cmd_argv[i]=NULL; >> >> if (e->session) >> exs = evas_hash_find(e->config->sessions.hash, e->session); >> >> - entrance_auth_setup_environment(e->auth, e->display); >> + entrance_auth_setup_environment(e->auth, e->display, path); >> + free(path); >> + >> if ((exs->session) && (exs->session[0] != 0)) >> { >> if (!strcmp(exs->session, "default")) >> @@ -497,7 +510,13 @@ >> entrance_session_free(e); >> /* replace this process with a clean small one that just waits for its */ >> /* child to exit.. passed on the cmd-line */ >> - execl("/bin/sh", "/bin/sh", "-l", "-c", buf, NULL); >> + >> + session_cmd_argv[0]=strtok(buf," "); >> + i=1; >> + while ((session_cmd_argv[i]=strtok(NULL," "))!=NULL) { >> + i++; >> + } >> + execvp(session_cmd_argv[0], session_cmd_argv); >> } >> >> >> Index: src/daemon/entranced_display.c >> =================================================================== >> RCS file: /var/cvs/e/e17/apps/entrance/src/daemon/entranced_display.c,v >> retrieving revision 1.2 >> diff -u -r1.2 entranced_display.c >> --- src/daemon/entranced_display.c 1 Aug 2006 05:30:58 -0000 1.2 >> +++ src/daemon/entranced_display.c 28 Aug 2006 08:16:02 -0000 >> @@ -124,6 +124,11 @@ >> double start_time; >> char x_cmd[PATH_MAX]; >> >> + int i; >> + char *x_cmd_argv[32]; >> + >> + for (i=0;i<32;i++) x_cmd_argv[i]=NULL; >> + >> /* Ecore_Exe *x_exe; */ >> pid_t xpid; >> >> @@ -160,9 +165,15 @@ >> _entrance_x_sa.sa_flags = 0; >> sigemptyset(&_entrance_x_sa.sa_mask); >> sigaction(SIGUSR1, &_entrance_x_sa, NULL); >> - /* FIXME: need to parse command and NOT go thru /bin/sh!!!! */ >> - /* why? some /bin/sh's wont pass on this SIGUSR1 thing... */ >> - execl("/bin/sh", "/bin/sh", "-c", x_cmd, NULL); >> + >> + x_cmd_argv[0]=strtok(x_cmd," "); >> + i=1; >> + >> + while ((x_cmd_argv[i]=strtok(NULL," "))!=NULL) { >> + i++; >> + } >> + >> + execvp(x_cmd_argv[0], x_cmd_argv); >> syslog(LOG_WARNING, "Could not execute X server."); >> exit(1); >> default: >> >> ------------------------------------------------------------------------ >> >> ------------------------------------------------------------------------- >> Using Tomcat but need to do more? Need to support web services, security? >> Get stuff done quickly with pre-integrated technology to make your job easier >> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo >> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> enlightenment-devel mailing list >> enlightenment-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel >> ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel