summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/opie-login/main.cpp48
1 files changed, 25 insertions, 23 deletions
diff --git a/core/opie-login/main.cpp b/core/opie-login/main.cpp
index 3f1077c..b76d2c7 100644
--- a/core/opie-login/main.cpp
+++ b/core/opie-login/main.cpp
@@ -69,20 +69,23 @@ 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)\n", argv [0] );
return 1;
}
- if ( ::getuid ( ) != 0 ) // qt doesn't really like SUID and
- ::setuid ( 0 ); // messes up things like config files
-
-// struct rlimit rl;
-// ::getrlimit ( RLIMIT_NOFILE, &rl );
-
-// for ( unsigned int i = 0; i < rl. rlim_cur; i++ )
-// ::close ( i );
+ /*!
+ * @bug
+ * Qte does not really like being set UID root. This is
+ * largely because we do almost everything on config files
+ * in root context. So if you even want to use opie-login
+ * you are in for a world of hurt unless someone at least
+ * scrubs the settings area and the PIM apps to make sure that
+ * they are covered regarding perms and users.
+ */
+ if ( ::getuid ( ) != 0 )
+ ::setuid ( 0 );
::setpgid ( 0, 0 );
::setsid ( );
::signal ( SIGTERM, sigterm );
::signal ( SIGINT, sigterm );
@@ -91,26 +94,28 @@ int main ( int argc, char **argv )
::atexit ( exit_closelog );
const char* autolog = 0;
Config c( "opie-login" );
c.setGroup( "autologin" );
QString entry = c.readEntry( "user", "" );
- if ( !entry.isEmpty() ) autolog = ::strdup( (const char*) entry );
+ if ( !entry.isEmpty() )
+ autolog = ::strdup( (const char*) entry );
while ( true ) {
pid_t child = ::fork ( );
if ( child < 0 ) {
::syslog ( LOG_ERR, "Could not fork GUI process\n" );
break;
}
else if ( child > 0 ) {
int status = 0;
time_t started = ::time ( 0 );
- while ( ::waitpid ( child, &status, 0 ) < 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" );
@@ -177,19 +182,17 @@ int main ( int argc, char **argv )
if ( !user. isEmpty ( ))
autolog = ::strdup ( user. latin1 ( ));
}
if ( autolog && !userExited ) {
-
QWSServer::setDesktopBackground( QImage() );
ODevice::inst()->setDisplayStatus( true );
LoginApplication *app = new LoginApplication ( argc, argv, ppid );
LoginApplication::setLoginAs( autolog );
-
if ( LoginApplication::changeIdentity ( ))
::exit ( LoginApplication::login ( ));
else
::exit ( 0 );
}
else {
@@ -242,24 +245,23 @@ public:
break;
case 1:
setBacklight( 0 ); // off
return true;
break;
case 2:
+ default:
// We're going to suspend the whole machine
if ( PowerStatusManager::readStatus().acStatus() != PowerStatus::Online ) {
QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE );
return true;
}
break;
}
return false;
}
-private:
-public:
void setIntervals( int i1 = 30, int i2 = 20, int i3 = 60 )
{
int v [4];
v [ 0 ] = QMAX( 1000 * i1, 100 );
v [ 1 ] = QMAX( 1000 * i2, 100 );
@@ -286,12 +288,13 @@ public:
// Forced on
m_backlight_forcedoff = false;
bright = -1;
}
if ( m_backlight_forcedoff && bright != -2 )
return ;
+
if ( bright == -2 ) {
// Toggle between off and on
bright = m_backlight_bright ? 0 : -1;
m_backlight_forcedoff = !bright;
}
@@ -302,13 +305,12 @@ public:
m_backlight_bright = bright;
}
private:
bool m_lcd_status;
-
int m_backlight_bright;
bool m_backlight_forcedoff;
};
int login_main ( int argc, char **argv, pid_t ppid )
@@ -317,13 +319,14 @@ int login_main ( int argc, char **argv, pid_t ppid )
LoginApplication *app = new LoginApplication ( argc, argv, ppid );
app-> setFont ( QFont ( "Helvetica", 10 ));
app-> setStyle ( new QPEStyle ( ));
if ( QWSServer::mouseHandler() &&
- QWSServer::mouseHandler() ->inherits("QCalibratedMouseHandler") ) {
+ QWSServer::mouseHandler()-> inherits("QCalibratedMouseHandler") )
+ {
if ( !QFile::exists ( "/etc/pointercal" )) {
// Make sure calibration widget starts on top.
Calibrate *cal = new Calibrate;
cal-> exec ( );
delete cal;
}
@@ -332,32 +335,31 @@ int login_main ( int argc, char **argv, pid_t ppid )
LoginScreenSaver *saver = new LoginScreenSaver;
saver-> setIntervals ( );
QWSServer::setScreenSaver ( saver );
saver-> restore ( );
-
LoginWindowImpl *lw = new LoginWindowImpl ( );
app-> setMainWidget ( lw );
- lw-> setGeometry ( 0, 0, app-> desktop ( )-> width ( ), app-> desktop ( )-> height ( ));
+ lw-> setGeometry ( 0, 0, app-> desktop ( )-> width ( ),
+ app-> desktop ( )-> height ( ));
lw-> show ( );
int rc = app-> exec ( );
if ( app-> loginAs ( )) {
if ( app-> changeIdentity ( )) {
app-> login ( );
-
// if login succeeds, it never comes back
-
- QMessageBox::critical ( 0, LoginWindowImpl::tr( "Failure" ), LoginWindowImpl::tr( "Could not start Opie." ));
+ QMessageBox::critical ( 0, LoginWindowImpl::tr( "Failure" ),
+ LoginWindowImpl::tr( "Could not start Opie." ));
rc = 1;
}
else {
- QMessageBox::critical ( 0, LoginWindowImpl::tr( "Failure" ), LoginWindowImpl::tr( "Could not switch to new user identity" ));
+ QMessageBox::critical ( 0, LoginWindowImpl::tr( "Failure" ),
+ LoginWindowImpl::tr( "Could not switch to new user identity" ));
rc = 2;
}
-
}
return rc;
}