parent
3254d5845f
commit
a1c7376558
|
@ -6,23 +6,15 @@
|
|||
#include <xcb/xcb.h>
|
||||
|
||||
#define ENTRANCE_DISPLAY ":0.0"
|
||||
|
||||
#define PT(x) \
|
||||
{ \
|
||||
ct = time(NULL); \
|
||||
lc = localtime(&ct); \
|
||||
memset(entrance_time_d, 0, sizeof(entrance_time_d)); \
|
||||
strftime(entrance_time_d, sizeof(entrance_time_d), \
|
||||
"%b %_2d %T", lc); \
|
||||
fprintf(stderr, "(%s) "PACKAGE": %s\n", entrance_time_d, x); \
|
||||
}
|
||||
|
||||
time_t current_time;
|
||||
struct tm *local_time;
|
||||
char entrance_time_d[4096];
|
||||
|
||||
static Eina_Bool _open_log();
|
||||
static int _entrance_main(const char *dname);
|
||||
static void _remove_lock();
|
||||
static void _signal_cb();
|
||||
static void _signal_log();
|
||||
static void _signal_cb(int sig);
|
||||
static void _signal_log(int sig);
|
||||
static Eina_Bool _entrance_client_del(void *data, int type, void *event);
|
||||
|
||||
static Eina_Bool _testing = 0;
|
||||
|
@ -34,7 +26,9 @@ static Ecore_Exe *_entrance_client = NULL;
|
|||
static void
|
||||
_signal_cb(int sig)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": signal %d received\n", sig);
|
||||
char buf[1024];
|
||||
snprintf(buf, sizeof(buf), "signal %d received\n", sig);
|
||||
PT(buf);
|
||||
//FIXME if I don't have main loop at this time ?
|
||||
if (_entrance_client) ecore_exe_terminate(_entrance_client);
|
||||
/*
|
||||
|
@ -45,9 +39,9 @@ _signal_cb(int sig)
|
|||
}
|
||||
|
||||
static void
|
||||
_signal_log(int sig)
|
||||
_signal_log(int sig __UNUSED__)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": signal %d received reopen the log file\n", sig);
|
||||
PT("reopen the log file\n");
|
||||
entrance_close_log();
|
||||
_open_log();
|
||||
}
|
||||
|
@ -67,15 +61,14 @@ _get_lock()
|
|||
f = fopen(entrance_config->lockfile, "w");
|
||||
if (!f)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": Couldn't create lockfile %s!\n",
|
||||
entrance_config->lockfile);
|
||||
PT("Couldn't create lockfile!\n");
|
||||
return (EINA_FALSE);
|
||||
}
|
||||
snprintf(buf, sizeof(buf), "%d\n", my_pid);
|
||||
if (!fwrite(buf, strlen(buf), 1, f))
|
||||
{
|
||||
fclose(f);
|
||||
fprintf(stderr, PACKAGE": Couldn't write the lockfile\n");
|
||||
PT("Couldn't write the lockfile\n");
|
||||
return EINA_FALSE;
|
||||
}
|
||||
fclose(f);
|
||||
|
@ -89,7 +82,8 @@ _get_lock()
|
|||
fclose(f);
|
||||
if (pid == my_pid)
|
||||
return EINA_TRUE;
|
||||
fprintf(stderr, "A lock file are present another instance are present ?\n");
|
||||
|
||||
PT("A lock file are present another instance are present ?\n");
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
|
@ -104,7 +98,7 @@ _update_lock()
|
|||
f = fopen(entrance_config->lockfile, "w");
|
||||
snprintf(buf, sizeof(buf), "%d\n", getpid());
|
||||
if (!fwrite(buf, strlen(buf), 1, f))
|
||||
fprintf(stderr, PACKAGE": Coudn't update lockfile\n");
|
||||
PT("Coudn't update lockfile\n");
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
|
@ -121,16 +115,15 @@ _open_log()
|
|||
elog = fopen(entrance_config->logfile, "a");
|
||||
if (!elog)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": could not open logfile %s!!!\n",
|
||||
entrance_config->logfile);
|
||||
PT("could not open logfile !\n");
|
||||
return EINA_FALSE;
|
||||
}
|
||||
fclose(elog);
|
||||
if (!freopen(entrance_config->logfile, "a", stdout))
|
||||
fprintf(stderr, PACKAGE": Error on reopen stdout\n");
|
||||
PT("Error on reopen stdout\n");
|
||||
setvbuf(stdout, NULL, _IOLBF, BUFSIZ);
|
||||
if (!freopen(entrance_config->logfile, "a", stderr))
|
||||
fprintf(stderr, PACKAGE": Error on reopen stderr\n");
|
||||
PT("Error on reopen stderr\n");
|
||||
setvbuf(stderr, NULL, _IONBF, BUFSIZ);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
@ -148,7 +141,8 @@ static void
|
|||
_entrance_wait()
|
||||
{
|
||||
execl(PACKAGE_BIN_DIR"/entrance_wait", "/usr/sbin/entrance", NULL);
|
||||
fprintf(stderr, PACKAGE": HUM HUM HUM ...\n\n\n");
|
||||
PT("HUM HUM HUM can't wait ...\n\n\n");
|
||||
_exit(1);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -161,7 +155,7 @@ _entrance_main(const char *dname)
|
|||
char buf[PATH_MAX];
|
||||
ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
|
||||
_entrance_client_del, NULL);
|
||||
fprintf(stderr, PACKAGE": Exec entrance_client\n");
|
||||
PT("Exec entrance_client\n");
|
||||
snprintf(buf, sizeof(buf),
|
||||
PACKAGE_BIN_DIR"/entrance_client -d %s -t %s",
|
||||
dname, entrance_config->theme);
|
||||
|
@ -183,7 +177,7 @@ _entrance_client_del(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|||
return ECORE_CALLBACK_PASS_ON;
|
||||
ecore_main_loop_quit();
|
||||
_entrance_client = NULL;
|
||||
fprintf(stderr, PACKAGE": client have terminated\n");
|
||||
PT("client have terminated\n");
|
||||
|
||||
return ECORE_CALLBACK_DONE;
|
||||
}
|
||||
|
@ -219,9 +213,6 @@ main (int argc, char ** argv)
|
|||
char *entrance_user = NULL;
|
||||
unsigned char nodaemon = 0;
|
||||
unsigned char quit_option = 0;
|
||||
time_t ct;
|
||||
struct tm *lc;
|
||||
char entrance_time_d[4096];
|
||||
|
||||
Ecore_Getopt_Value values[] =
|
||||
{
|
||||
|
@ -238,7 +229,7 @@ main (int argc, char ** argv)
|
|||
args = ecore_getopt_parse(&options, values, argc, argv);
|
||||
if (args < 0)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": ERROR: could not parse options.\n");
|
||||
PT("ERROR: could not parse options.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -265,7 +256,7 @@ main (int argc, char ** argv)
|
|||
{
|
||||
if (daemon(0, 1) == -1)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": Error on daemonize !");
|
||||
PT("Error on daemonize !\n");
|
||||
quit_option = EINA_TRUE;
|
||||
}
|
||||
_update_lock();
|
||||
|
@ -284,7 +275,7 @@ main (int argc, char ** argv)
|
|||
}
|
||||
if (!_open_log())
|
||||
{
|
||||
fprintf(stderr, PACKAGE": Can't open log file !!!!\n");
|
||||
PT("Can't open log file !!!!\n");
|
||||
entrance_config_shutdown();
|
||||
exit(1);
|
||||
}
|
||||
|
@ -306,16 +297,17 @@ main (int argc, char ** argv)
|
|||
unsetenv("ENTRANCE_QUIT");
|
||||
_remove_lock();
|
||||
entrance_config_shutdown();
|
||||
PT("Good bye");
|
||||
PT("Good bye\n");
|
||||
entrance_close_log();
|
||||
exit(0);
|
||||
}
|
||||
entrance_close_log();
|
||||
PT("Nice to see you again.");
|
||||
PT("Nice to see you again.\n");
|
||||
exit(1);
|
||||
}
|
||||
PT("Welcome");
|
||||
PT("Welcome\n");
|
||||
ecore_init();
|
||||
efreet_init();
|
||||
/* Initialise event handler */
|
||||
|
||||
signal(SIGQUIT, _signal_cb);
|
||||
|
@ -327,69 +319,70 @@ main (int argc, char ** argv)
|
|||
signal(SIGALRM, _signal_cb);
|
||||
signal(SIGUSR2, _signal_log);
|
||||
|
||||
PT("session init");
|
||||
PT("session init\n");
|
||||
entrance_session_init(entrance_config->command.xauth_file);
|
||||
PT("xserver init");
|
||||
PT("xserver init\n");
|
||||
pid = entrance_xserver_init(_entrance_main, dname);
|
||||
PT("history init");
|
||||
PT("history init\n");
|
||||
entrance_history_init();
|
||||
if (entrance_config->autologin && !entrance_user)
|
||||
{
|
||||
PT("autologin init");
|
||||
PT("autologin init\n");
|
||||
xcb_connection_t *disp = NULL;
|
||||
disp = xcb_connect(dname, NULL);
|
||||
PT("main loop begin");
|
||||
PT("main loop begin\n");
|
||||
ecore_main_loop_begin();
|
||||
PT("auth user");
|
||||
PT("auth user\n");
|
||||
#ifdef HAVE_PAM
|
||||
entrance_pam_item_set(ENTRANCE_PAM_ITEM_USER, entrance_config->userlogin);
|
||||
#endif
|
||||
PT("login user");
|
||||
PT("login user\n");
|
||||
entrance_session_login(entrance_config->command.session_login, EINA_FALSE);
|
||||
sleep(30);
|
||||
xcb_disconnect(disp);
|
||||
}
|
||||
else
|
||||
{
|
||||
PT("action init");
|
||||
PT("action init\n");
|
||||
entrance_action_init();
|
||||
PT("server init");
|
||||
PT("server init\n");
|
||||
entrance_server_init();
|
||||
PT("starting main loop");
|
||||
PT("starting main loop\n");
|
||||
ecore_main_loop_begin();
|
||||
PT("main loop end");
|
||||
PT("main loop end\n");
|
||||
entrance_server_shutdown();
|
||||
PT("server shutdown");
|
||||
PT("server shutdown\n");
|
||||
entrance_action_shutdown();
|
||||
PT("action shutdown");
|
||||
PT("action shutdown\n");
|
||||
}
|
||||
entrance_history_shutdown();
|
||||
PT("history shutdown");
|
||||
PT("history shutdown\n");
|
||||
entrance_xserver_shutdown();
|
||||
PT("xserver shutdown");
|
||||
PT("xserver shutdown\n");
|
||||
#ifdef HAVE_PAM
|
||||
entrance_pam_shutdown();
|
||||
PT("pam shutdown");
|
||||
PT("pam shutdown\n");
|
||||
#endif
|
||||
efreet_shutdown();
|
||||
ecore_shutdown();
|
||||
PT("ecore shutdown");
|
||||
PT("ecore shutdown\n");
|
||||
entrance_config_shutdown();
|
||||
PT("config shutdown");
|
||||
PT("config shutdown\n");
|
||||
entrance_session_shutdown();
|
||||
PT("session shutdown");
|
||||
PT("session shutdown\n");
|
||||
eet_shutdown();
|
||||
PT("eet shutdown");
|
||||
PT("eet shutdown\n");
|
||||
free(dname);
|
||||
if (entrance_session_logged_get())
|
||||
{
|
||||
PT("Bye user logged, see you.");
|
||||
PT("Bye user logged, see you.\n");
|
||||
entrance_close_log();
|
||||
_entrance_wait();
|
||||
}
|
||||
PT("ending xserver");
|
||||
PT("ending xserver\n");
|
||||
kill(pid, SIGTERM);
|
||||
entrance_xserver_end();
|
||||
PT("Bye, see you.\n");
|
||||
PT("Bye, see you.\n\n");
|
||||
entrance_close_log();
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <Eet.h>
|
||||
#include <Ecore.h>
|
||||
#include <Ecore_File.h>
|
||||
#include <Efreet.h>
|
||||
|
||||
#include "entrance_session.h"
|
||||
#ifdef HAVE_PAM
|
||||
|
@ -23,6 +24,20 @@
|
|||
#include "entrance_action.h"
|
||||
#include "../event/entrance_event.h"
|
||||
|
||||
#define PT(x) \
|
||||
{ \
|
||||
current_time = time(NULL); \
|
||||
local_time = localtime(¤t_time); \
|
||||
memset(entrance_time_d, 0, sizeof(entrance_time_d)); \
|
||||
strftime(entrance_time_d, sizeof(entrance_time_d), \
|
||||
"%b %_2d %T", local_time); \
|
||||
fprintf(stderr, "(%s) "PACKAGE": %s", entrance_time_d, x); \
|
||||
}
|
||||
|
||||
extern time_t current_time;
|
||||
extern struct tm *local_time;
|
||||
extern char entrance_time_d[4096];
|
||||
|
||||
void entrance_close_log();
|
||||
|
||||
#endif /* ENTRANCE_H_ */
|
||||
|
|
|
@ -172,7 +172,7 @@ _entrance_action_grub2_get(void)
|
|||
char *s;
|
||||
int i;
|
||||
|
||||
fprintf(stderr, PACKAGE": trying to open "GRUB2_FILE);
|
||||
PT("trying to open "GRUB2_FILE);
|
||||
f = eina_file_open(GRUB2_FILE, EINA_FALSE);
|
||||
if (!f) return ;
|
||||
fprintf(stderr, " o");
|
||||
|
@ -211,7 +211,7 @@ _entrance_action_grub2_get(void)
|
|||
if (!grub2_ok)
|
||||
{
|
||||
grub2_ok = 1;
|
||||
fprintf(stderr, PACKAGE": GRUB2 save mode found \n");
|
||||
PT("GRUB2 save mode found \n");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -238,7 +238,7 @@ _entrance_action_grub2_get(void)
|
|||
if (!action) goto end_line;
|
||||
|
||||
sprintf(action, "Reboot on %s", local);
|
||||
fprintf(stderr, PACKAGE": GRUB2 '%s'\n", action);
|
||||
PT("GRUB2 '%s'\n", action);
|
||||
_entrance_actions =
|
||||
eina_list_append(_entrance_actions,
|
||||
_entrance_action_add(action,
|
||||
|
|
|
@ -56,7 +56,7 @@ _entrance_history_read()
|
|||
EET_FILE_MODE_READ_WRITE);
|
||||
if (!(ef) || !(_entrance_history = eet_data_read(ef, _eddh, ENTRANCE_SESSION_KEY)))
|
||||
{
|
||||
fprintf(stderr, PACKAGE": Error on reading last session login\n");
|
||||
PT("Error on reading last session login\n");
|
||||
_entrance_history = calloc(1, sizeof(Entrance_History));
|
||||
}
|
||||
eet_close(ef);
|
||||
|
@ -71,7 +71,7 @@ _entrance_history_write()
|
|||
|
||||
if (_history_update)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": writing history file\n");
|
||||
PT("writing history file\n");
|
||||
ef = eet_open("/var/cache/"PACKAGE"/"ENTRANCE_HISTORY_FILE,
|
||||
EET_FILE_MODE_READ_WRITE);
|
||||
if (!ef)
|
||||
|
@ -79,7 +79,7 @@ _entrance_history_write()
|
|||
EET_FILE_MODE_WRITE);
|
||||
|
||||
if (!eet_data_write(ef, _eddh, ENTRANCE_SESSION_KEY, _entrance_history, 1))
|
||||
fprintf(stderr, PACKAGE": Error on updating last session login\n");
|
||||
PT("Error on updating last session login\n");
|
||||
|
||||
eet_close(ef);
|
||||
}
|
||||
|
|
|
@ -44,25 +44,26 @@ _entrance_pam_conv(int num_msg, const struct pam_message **msg,
|
|||
switch(msg[i]->msg_style){
|
||||
case PAM_PROMPT_ECHO_ON:
|
||||
// We assume PAM is asking for the username
|
||||
fprintf(stderr, PACKAGE": echo on\n");
|
||||
PT("echo on\n");
|
||||
resp[i]->resp = _login;
|
||||
break;
|
||||
|
||||
case PAM_PROMPT_ECHO_OFF:
|
||||
fprintf(stderr, PACKAGE": echo off\n");
|
||||
PT("echo off\n");
|
||||
resp[i]->resp = _passwd;
|
||||
_passwd = NULL;
|
||||
break;
|
||||
case PAM_ERROR_MSG:
|
||||
fprintf(stderr, PACKAGE": error msg\n");
|
||||
PT("error msg\n");
|
||||
case PAM_TEXT_INFO:
|
||||
fprintf(stderr, PACKAGE": info %s\n", msg[i]->msg);
|
||||
PT("info ");
|
||||
fprintf(stderr, "%s\n", msg[i]->msg);
|
||||
break;
|
||||
case PAM_SUCCESS:
|
||||
fprintf(stderr, PACKAGE": success :)\n");
|
||||
PT("success :)\n");
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, PACKAGE": default\n");
|
||||
PT("default\n");
|
||||
|
||||
}
|
||||
if (result != PAM_SUCCESS) break;
|
||||
|
@ -99,14 +100,14 @@ entrance_pam_open_session()
|
|||
{
|
||||
case PAM_CRED_ERR:
|
||||
case PAM_USER_UNKNOWN:
|
||||
fprintf(stderr, PACKAGE": PAM user unknow\n");
|
||||
PT("PAM user unknow\n");
|
||||
return 1;
|
||||
case PAM_AUTH_ERR:
|
||||
case PAM_PERM_DENIED:
|
||||
fprintf(stderr, PACKAGE": PAM error on login password\n");
|
||||
PT("PAM error on login password\n");
|
||||
return 1;
|
||||
default:
|
||||
fprintf(stderr, PACKAGE": PAM open warning unknow error\n");
|
||||
PT("PAM open warning unknow error\n");
|
||||
return 1;
|
||||
case PAM_SUCCESS:
|
||||
break;
|
||||
|
@ -126,7 +127,7 @@ entrance_pam_open_session()
|
|||
|
||||
void
|
||||
entrance_pam_close_session() {
|
||||
fprintf(stderr, PACKAGE": PAM close session\n");
|
||||
PT("PAM close session\n");
|
||||
last_result = pam_close_session(_pam_handle, PAM_SILENT);
|
||||
switch (last_result) {
|
||||
default:
|
||||
|
@ -166,24 +167,24 @@ entrance_pam_authenticate()
|
|||
{
|
||||
case PAM_ABORT:
|
||||
case PAM_AUTHINFO_UNAVAIL:
|
||||
fprintf(stderr, PACKAGE": PAM error !\n");
|
||||
PT("PAM error !\n");
|
||||
entrance_pam_end();
|
||||
return 1;
|
||||
case PAM_USER_UNKNOWN:
|
||||
fprintf(stderr, PACKAGE": PAM user unknow error !\n");
|
||||
PT("PAM user unknow error !\n");
|
||||
return 1;
|
||||
case PAM_MAXTRIES:
|
||||
fprintf(stderr, PACKAGE": PAM max tries error !\n");
|
||||
PT("PAM max tries error !\n");
|
||||
entrance_server_client_wait();
|
||||
return 1;
|
||||
case PAM_CRED_INSUFFICIENT:
|
||||
fprintf(stderr, PACKAGE": PAM %s don't have sufficient credential to authenticate !\n", PACKAGE);
|
||||
PT("PAM don't have sufficient credential to authenticate !\n");
|
||||
return 1;
|
||||
case PAM_AUTH_ERR:
|
||||
fprintf(stderr, PACKAGE": PAM authenticate error !\n");
|
||||
PT("PAM authenticate error !\n");
|
||||
return 1;
|
||||
default:
|
||||
fprintf(stderr, PACKAGE": PAM auth warning unknow error\n");
|
||||
PT("PAM auth warning unknow error\n");
|
||||
return 1;
|
||||
case PAM_SUCCESS:
|
||||
break;
|
||||
|
@ -218,8 +219,6 @@ entrance_pam_init(const char *service, const char *display, const char *user) {
|
|||
_pam_conversation.conv = _entrance_pam_conv;
|
||||
_pam_conversation.appdata_ptr = NULL;
|
||||
|
||||
|
||||
fprintf(stderr, PACKAGE": Pam init with name %s\n", service);
|
||||
if (_pam_handle) entrance_pam_end();
|
||||
status = pam_start(service, user, &_pam_conversation, &_pam_handle);
|
||||
|
||||
|
@ -233,17 +232,22 @@ entrance_pam_init(const char *service, const char *display, const char *user) {
|
|||
return 0;
|
||||
|
||||
pam_error:
|
||||
fprintf(stderr, PACKAGE": PAM error !!!\n");
|
||||
PT("PAM error !!!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
entrance_pam_item_set(ENTRANCE_PAM_ITEM_TYPE type, const void *value) {
|
||||
entrance_pam_item_set(ENTRANCE_PAM_ITEM_TYPE type, const void *value)
|
||||
{
|
||||
char buf[4096];
|
||||
|
||||
last_result = pam_set_item(_pam_handle, type, value);
|
||||
if (last_result == PAM_SUCCESS) {
|
||||
return 0;
|
||||
}
|
||||
fprintf(stderr, PACKAGE": PAM error: %d on %d", last_result, type);
|
||||
|
||||
snprintf(buf, sizeof(buf), "PAM error: %d on %d", last_result, type);
|
||||
PT(buf);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -255,7 +259,7 @@ entrance_pam_item_get(ENTRANCE_PAM_ITEM_TYPE type) {
|
|||
default:
|
||||
case PAM_SYSTEM_ERR:
|
||||
entrance_pam_end();
|
||||
fprintf(stderr, PACKAGE": error on pam item get\n");
|
||||
PT("error on pam item get\n");
|
||||
case PAM_PERM_DENIED: /* Here data was NULL */
|
||||
case PAM_SUCCESS:
|
||||
break;
|
||||
|
@ -290,7 +294,6 @@ entrance_pam_env_list_get() {
|
|||
|
||||
void
|
||||
entrance_pam_shutdown() {
|
||||
fprintf(stderr, PACKAGE": Pam shutdown\n");
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
@ -52,7 +52,7 @@ _entrance_server_add(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|||
void *enc;
|
||||
int size;
|
||||
|
||||
fprintf(stderr, PACKAGE": server client connected\n");
|
||||
PT("server client connected\n");
|
||||
eeu.type = ENTRANCE_EVENT_USERS;
|
||||
eeu.event.users.users = entrance_history_get();
|
||||
enc = entrance_event_encode(&eeu, &size);
|
||||
|
@ -77,7 +77,7 @@ _entrance_server_del(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|||
{
|
||||
Ecore_Con_Event_Client_Del *ev;
|
||||
ev = event;
|
||||
fprintf(stderr, PACKAGE": server client disconnected\n");
|
||||
PT("server client disconnected\n");
|
||||
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
@ -101,12 +101,12 @@ _entrance_server_data(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|||
{
|
||||
entrance_session_login(eev->event.auth.session, EINA_TRUE);
|
||||
neev.event.status.granted = EINA_TRUE;
|
||||
fprintf(stderr, PACKAGE": server authenticate granted\n");
|
||||
PT("server authenticate granted\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
neev.event.status.granted = EINA_FALSE;
|
||||
fprintf(stderr, PACKAGE": server authenticate error\n");
|
||||
PT("server authenticate error\n");
|
||||
}
|
||||
enc = entrance_event_encode(&neev, &size);
|
||||
ecore_con_client_send(ev->client, enc, size);
|
||||
|
@ -114,7 +114,7 @@ _entrance_server_data(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|||
else if (eev->type == ENTRANCE_EVENT_ACTION)
|
||||
entrance_action_run(eev->event.action.action);
|
||||
else
|
||||
fprintf(stderr, PACKAGE": UNKNOW signal server\n");
|
||||
PT("UNKNOW signal server\n");
|
||||
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
@ -127,7 +127,7 @@ entrance_server_init()
|
|||
_entrance_server = ecore_con_server_add(ECORE_CON_LOCAL_SYSTEM,
|
||||
"entrance", 42, NULL);
|
||||
if (!_entrance_server)
|
||||
fprintf(stderr, PACKAGE": server init fail\n");
|
||||
PT("server init fail\n");
|
||||
|
||||
h = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_ADD,
|
||||
_entrance_server_add, NULL);
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
#include <crypt.h>
|
||||
#endif
|
||||
|
||||
#include <Ecore_File.h>
|
||||
#include <Efreet.h>
|
||||
#include "entrance.h"
|
||||
|
||||
#define HAVE_SHADOW 1
|
||||
|
@ -50,13 +48,18 @@ _entrance_session_cookie_add(const char *mcookie, const char *display,
|
|||
|
||||
if (!xauth_cmd || !auth_file) return 1;
|
||||
snprintf(buf, sizeof(buf), "%s -f %s -q", xauth_cmd, auth_file);
|
||||
fprintf(stderr, PACKAGE": write auth '%s'\n", buf);
|
||||
PT("write auth");
|
||||
cmd = popen(buf, "w");
|
||||
if (!cmd) return 1;
|
||||
if (!cmd)
|
||||
{
|
||||
fprintf(stderr, " fail !\n");
|
||||
return 1;
|
||||
}
|
||||
fprintf(cmd, "remove %s\n", display);
|
||||
fprintf(cmd, "add %s . %s\n", display, mcookie);
|
||||
fprintf(cmd, "exit\n");
|
||||
pclose(cmd);
|
||||
fprintf(stderr, " done\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -65,26 +68,26 @@ _entrance_session_userid_set(struct passwd *pwd)
|
|||
{
|
||||
if (!pwd)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": no passwd !\n");
|
||||
PT("no passwd !\n");
|
||||
return 1;
|
||||
}
|
||||
if (initgroups(pwd->pw_name, pwd->pw_gid) != 0)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": can't init group\n");
|
||||
PT("can't init group\n");
|
||||
return 1;
|
||||
}
|
||||
if (setgid(pwd->pw_gid) != 0)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": can't set gid\n");
|
||||
PT("can't set gid\n");
|
||||
return 1;
|
||||
}
|
||||
if (setuid(pwd->pw_uid) != 0)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": can't set uid\n");
|
||||
PT("can't set uid\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* fprintf(stderr, PACKAGE": name -> %s, gid -> %d, uid -> %d\n",
|
||||
/* PT("name -> %s, gid -> %d, uid -> %d\n",
|
||||
pwd->pw_name, pwd->pw_gid, pwd->pw_uid); */
|
||||
return 0;
|
||||
}
|
||||
|
@ -92,7 +95,7 @@ _entrance_session_userid_set(struct passwd *pwd)
|
|||
static Eina_Bool
|
||||
_entrance_session_begin(struct passwd *pwd, const char *cookie)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": Session Init\n");
|
||||
PT("Session Init\n");
|
||||
if (pwd->pw_shell[0] == '\0')
|
||||
{
|
||||
setusershell();
|
||||
|
@ -125,7 +128,7 @@ _entrance_session_run(struct passwd *pwd, const char *cmd, const char *cookie)
|
|||
if (pid == 0)
|
||||
{
|
||||
|
||||
fprintf(stderr, PACKAGE": Session Run\n");
|
||||
PT("Session Run\n");
|
||||
#ifdef HAVE_PAM
|
||||
env = entrance_pam_env_list_get();
|
||||
entrance_pam_end();
|
||||
|
@ -161,16 +164,16 @@ _entrance_session_run(struct passwd *pwd, const char *cmd, const char *cookie)
|
|||
entrance_config->command.session_start,
|
||||
pwd->pw_name);
|
||||
if (-1 == system(buf))
|
||||
fprintf(stderr, PACKAGE": Error on session start command %s\n", buf);
|
||||
PT("Error on session start command\n");
|
||||
if(_entrance_session_userid_set(pwd)) return;
|
||||
_entrance_session_cookie_add(_mcookie, ":0",
|
||||
entrance_config->command.xauth_path, cookie);
|
||||
if (chdir(pwd->pw_dir))
|
||||
{
|
||||
fprintf(stderr, PACKAGE": change directory for user fail\n");
|
||||
PT("change directory for user fail");
|
||||
return;
|
||||
}
|
||||
// fprintf(stderr, PACKAGE": Open %s`s session\n", pwd->pw_name);
|
||||
// PT("Open %s`s session\n", pwd->pw_name);
|
||||
snprintf(buf, sizeof(buf), "%s/.entrance_session.log", pwd->pw_dir);
|
||||
remove(buf);
|
||||
|
||||
|
@ -182,7 +185,7 @@ _entrance_session_run(struct passwd *pwd, const char *cmd, const char *cookie)
|
|||
cmd, pwd->pw_dir);
|
||||
#endif
|
||||
execle(pwd->pw_shell, pwd->pw_shell, "-c", buf, NULL, env);
|
||||
fprintf(stderr, PACKAGE": The Xsessions are not launched :(\n");
|
||||
PT("The Xsessions are not launched :(\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -193,7 +196,7 @@ entrance_session_end(const char *user)
|
|||
snprintf(buf, sizeof(buf),
|
||||
"%s %s ", entrance_config->command.session_stop, user);
|
||||
if (-1 == system(buf))
|
||||
fprintf(stderr, PACKAGE": Error on session stop command %s", buf);
|
||||
PT("Error on session stop command\n");
|
||||
#ifdef HAVE_PAM
|
||||
entrance_pam_close_session();
|
||||
entrance_pam_end();
|
||||
|
@ -224,7 +227,7 @@ entrance_session_init(const char *file)
|
|||
int i;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
fprintf(stderr, PACKAGE": Session init '%s'\n", file);
|
||||
PT("Session init\n");
|
||||
|
||||
_mcookie = calloc(33, sizeof(char));
|
||||
_mcookie[0] = 'a';
|
||||
|
@ -240,10 +243,10 @@ entrance_session_init(const char *file)
|
|||
_mcookie[i+2] = dig[hi & 0x0f];
|
||||
_mcookie[i+3] = dig[hi >> 4];
|
||||
}
|
||||
remove(file);
|
||||
// remove(file);
|
||||
snprintf(buf, sizeof(buf), "XAUTHORITY=%s", file);
|
||||
putenv(strdup(buf));
|
||||
//fprintf(stderr, PACKAGE": cookie %s \n", _mcookie);
|
||||
//PT("cookie %s \n", _mcookie);
|
||||
_entrance_session_cookie_add(_mcookie, ":0",
|
||||
entrance_config->command.xauth_path, file);
|
||||
_entrance_session_desktops_init();
|
||||
|
@ -325,7 +328,8 @@ entrance_session_login(const char *session, Eina_Bool push)
|
|||
}
|
||||
if (push) entrance_history_push(pwd->pw_name, session);
|
||||
cmd = _entrance_session_find_command(pwd->pw_dir, session);
|
||||
fprintf(stderr, PACKAGE": launching %s for user %s\n", cmd, _login);
|
||||
PT("launching session for user ");
|
||||
fprintf(stderr, "%s\n", _login);
|
||||
_entrance_session_run(pwd, cmd, buf);
|
||||
return ECORE_CALLBACK_CANCEL;
|
||||
}
|
||||
|
@ -385,8 +389,8 @@ _entrance_session_desktops_init()
|
|||
xsession->icon = eina_stringshare_add("entrance/system");
|
||||
_xsessions = eina_list_append(_xsessions, xsession);
|
||||
|
||||
efreet_init();
|
||||
efreet_desktop_type_alias(EFREET_DESKTOP_TYPE_APPLICATION, "XSession");
|
||||
PT("scanning directory: ");
|
||||
/* Maybee need to scan other directories ?
|
||||
* _entrance_session_desktops_scan("/etc/share/xsessions");
|
||||
*/
|
||||
|
@ -399,7 +403,8 @@ _entrance_session_desktops_init()
|
|||
snprintf(buf, sizeof(buf), "%s/xsessions", path);
|
||||
_entrance_session_desktops_scan(buf);
|
||||
}
|
||||
efreet_shutdown();
|
||||
fprintf(stderr, "\n");
|
||||
PT("scan directory end\n");
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -411,7 +416,7 @@ _entrance_session_desktops_scan(const char *dir)
|
|||
|
||||
if (ecore_file_is_dir(dir))
|
||||
{
|
||||
fprintf(stderr, PACKAGE": scanning directory %s\n", dir);
|
||||
fprintf(stderr, "%s", dir);
|
||||
files = ecore_file_ls(dir);
|
||||
EINA_LIST_FREE(files, filename)
|
||||
{
|
||||
|
@ -452,7 +457,6 @@ _entrance_session_desktops_scan_file(const char *path)
|
|||
xsession->name = eina_stringshare_add(desktop->name);
|
||||
if (desktop->icon) xsession->icon = eina_stringshare_add(desktop->icon);
|
||||
_xsessions = eina_list_append(_xsessions, xsession);
|
||||
fprintf(stderr, PACKAGE": client find sessions %s\n", desktop->name);
|
||||
}
|
||||
EINA_LIST_FREE(commands, command)
|
||||
free(command);
|
||||
|
|
|
@ -85,7 +85,7 @@ _xserver_start()
|
|||
execv(args[0], args);
|
||||
if (buf) free(buf);
|
||||
if (args) free(args);
|
||||
fprintf(stderr, PACKAGE": Couldn't launch Xserver ...\n");
|
||||
PT("Couldn't launch Xserver ...\n");
|
||||
}
|
||||
return pid;
|
||||
xserver_error:
|
||||
|
@ -95,7 +95,7 @@ xserver_error:
|
|||
static Eina_Bool
|
||||
_xserver_started(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
|
||||
{
|
||||
fprintf(stderr, PACKAGE": xserver started\n");
|
||||
PT("xserver started\n");
|
||||
_env_set(_xserver->dname);
|
||||
_xserver->start(_xserver->dname);
|
||||
return ECORE_CALLBACK_PASS_ON;
|
||||
|
@ -109,7 +109,7 @@ entrance_xserver_init(Entrance_X_Cb start, const char *dname)
|
|||
sigset_t newset;
|
||||
sigemptyset(&newset);
|
||||
|
||||
fprintf(stderr, PACKAGE": xserver init\n");
|
||||
PT("xserver init\n");
|
||||
_xserver = calloc(1, sizeof(Entrance_Xserver));
|
||||
_xserver->dname = eina_stringshare_add(dname);
|
||||
_xserver->start = start;
|
||||
|
@ -125,7 +125,7 @@ entrance_xserver_init(Entrance_X_Cb start, const char *dname)
|
|||
void
|
||||
entrance_xserver_end()
|
||||
{
|
||||
fprintf(stderr, PACKAGE": xserver end\n");
|
||||
PT("xserver end\n");
|
||||
unsetenv("ENTRANCE_XPID");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue