author | sandman <sandman> | 2002-12-17 19:41:05 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-12-17 19:41:05 (UTC) |
commit | 0e05c298cc4e5a5d509286e31a3a863e78c76456 (patch) (side-by-side diff) | |
tree | 2a86553b593ff9690c14e1796c54c707f189fdf3 /core/opie-login/main.cpp | |
parent | 98f90f6ed89986485a1413c4325411e30f4c0693 (diff) | |
download | opie-0e05c298cc4e5a5d509286e31a3a863e78c76456.zip opie-0e05c298cc4e5a5d509286e31a3a863e78c76456.tar.gz opie-0e05c298cc4e5a5d509286e31a3a863e78c76456.tar.bz2 |
Opie login becomes useable now:
- pre- and post-session scripts (in $OPIEDIR/share/opie-login) to fix
things like device ownership to user/root
- logging in now doesn't simply mean: execute bin/qpe. instead opie-login
* first tries to execute ~/.opie-session
* if that doesn't exist $OPIEDIR/share/opie-login/opie-session
* if that fails too, execute $OPIEDIR/bin/qpe
you can now handle things like ssh-agent on a per-user basis.
(I'll commit the scripts later - for now it simply works like before)
-rw-r--r-- | core/opie-login/main.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/core/opie-login/main.cpp b/core/opie-login/main.cpp index 674829d..81f4d1e 100644 --- a/core/opie-login/main.cpp +++ b/core/opie-login/main.cpp @@ -59,25 +59,25 @@ #include "calibrate.h" using namespace Opie; int login_main ( int argc, char **argv, pid_t ppid ); void sigterm ( int sig ); +void sigint ( int sig ); void exit_closelog ( ); static struct option long_options [] = { { "autologin", 1, 0, 'a' }, { 0, 0, 0, 0 } }; int main ( int argc, char **argv ) { pid_t ppid = ::getpid ( ); - if ( ::geteuid ( ) != 0 ) { ::fprintf ( stderr, "%s can only be executed by root. (or chmod +s)", argv [0] ); return 1; } if ( ::getuid ( ) != 0 ) // qt doesn't really like SUID and ::setuid ( 0 ); // messes up things like config files @@ -101,13 +101,14 @@ int main ( int argc, char **argv ) // for ( unsigned int i = 0; i < rl. rlim_cur; i++ ) // ::close ( i ); ::setpgid ( 0, 0 ); ::setsid ( ); - ::signal ( SIGTERM, sigterm ); + ::signal ( SIGTERM, sigterm ); + ::signal ( SIGINT, sigterm ); ::openlog ( "opie-login", LOG_CONS, LOG_AUTHPRIV ); ::atexit ( exit_closelog ); while ( true ) { pid_t child = ::fork ( ); @@ -119,12 +120,14 @@ int main ( int argc, char **argv ) else if ( child > 0 ) { int status = 0; time_t started = ::time ( 0 ); while ( ::waitpid ( child, &status, 0 ) < 0 ) { } + LoginApplication::logout ( ); + if (( ::time ( 0 ) - started ) < 3 ) { if ( autolog ) { ::syslog ( LOG_ERR, "Respawning too fast -- disabling auto-login\n" ); autolog = 0; } else { @@ -145,12 +148,14 @@ int main ( int argc, char **argv ) killedbysig = WTERMSIG( status ); break; } } if ( killedbysig ) { // qpe was killed by an uncaught signal qApp = 0; + + ::syslog ( LOG_ERR, "Opie was killed by a signal #%d", killedbysig ); QWSServer::setDesktopBackground ( QImage ( )); QApplication *app = new QApplication ( argc, argv, QApplication::GuiServer ); app-> setFont ( QFont ( "Helvetica", 10 )); app-> setStyle ( new QPEStyle ( )); @@ -300,19 +305,22 @@ private: int m_backlight_bright; bool m_backlight_forcedoff; }; +namespace Opie { extern int force_appearance; } // HACK to get around the force-style setting int login_main ( int argc, char **argv, pid_t ppid ) { QWSServer::setDesktopBackground( QImage() ); LoginApplication *app = new LoginApplication ( argc, argv, ppid ); + Opie::force_appearance = 0; + app-> setFont ( QFont ( "Helvetica", 10 )); app-> setStyle ( new QPEStyle ( )); ODevice::inst ( )-> setSoftSuspend ( true ); #if defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) |