summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/opie-login/loginapplication.cpp5
-rw-r--r--core/opie-login/loginapplication.h5
-rw-r--r--core/opie-login/main.cpp11
3 files changed, 14 insertions, 7 deletions
diff --git a/core/opie-login/loginapplication.cpp b/core/opie-login/loginapplication.cpp
index 103d63b..8d86a71 100644
--- a/core/opie-login/loginapplication.cpp
+++ b/core/opie-login/loginapplication.cpp
@@ -41,16 +41,17 @@ extern "C" {
41#endif 41#endif
42 42
43#include "loginapplication.h" 43#include "loginapplication.h"
44 44
45LoginApplication *lApp; 45LoginApplication *lApp;
46 46
47LoginApplication::LoginApplication ( int &argc, char **argv ) 47LoginApplication::LoginApplication ( int &argc, char **argv, pid_t parentpid )
48 : QPEApplication ( argc, argv, GuiServer ) 48 : QPEApplication ( argc, argv, GuiServer )
49{ 49{
50 lApp = this; 50 lApp = this;
51 m_parentpid = parentpid;
51} 52}
52 53
53const char *LoginApplication::s_username = 0; 54const char *LoginApplication::s_username = 0;
54 55
55#ifdef USEPAM 56#ifdef USEPAM
56 57
@@ -213,8 +214,8 @@ QStringList LoginApplication::allUsers ( )
213 return sl; 214 return sl;
214} 215}
215 216
216void LoginApplication::quitToConsole ( ) 217void LoginApplication::quitToConsole ( )
217{ 218{
218 QPEApplication::quit ( ); 219 QPEApplication::quit ( );
219 ::kill ( ::getppid ( ), SIGTERM ); 220 ::kill ( m_parentpid, SIGTERM );
220} 221}
diff --git a/core/opie-login/loginapplication.h b/core/opie-login/loginapplication.h
index 062c088..4e7cf79 100644
--- a/core/opie-login/loginapplication.h
+++ b/core/opie-login/loginapplication.h
@@ -36,13 +36,13 @@
36struct pam_message; 36struct pam_message;
37struct pam_response; 37struct pam_response;
38#endif 38#endif
39 39
40class LoginApplication : public QPEApplication { 40class LoginApplication : public QPEApplication {
41public: 41public:
42 LoginApplication ( int &argc, char **argv ); 42 LoginApplication ( int &argc, char **argv, pid_t parentpid );
43 43
44 static bool checkPassword ( const char *user, const char *password ); 44 static bool checkPassword ( const char *user, const char *password );
45 45
46 static const char *loginAs ( ); 46 static const char *loginAs ( );
47 static void setLoginAs ( const char *user ); 47 static void setLoginAs ( const char *user );
48 48
@@ -57,11 +57,14 @@ private:
57 static const char *s_username; 57 static const char *s_username;
58 58
59#ifdef USEPAM 59#ifdef USEPAM
60 static int pam_helper ( int num_msg, const struct pam_message **msg, struct pam_response **resp, void * ); 60 static int pam_helper ( int num_msg, const struct pam_message **msg, struct pam_response **resp, void * );
61 static const char *s_pam_password; 61 static const char *s_pam_password;
62#endif 62#endif
63
64private:
65 pid_t m_parentpid;
63}; 66};
64 67
65extern LoginApplication *lApp; 68extern LoginApplication *lApp;
66 69
67#endif 70#endif
diff --git a/core/opie-login/main.cpp b/core/opie-login/main.cpp
index 579a93a..674829d 100644
--- a/core/opie-login/main.cpp
+++ b/core/opie-login/main.cpp
@@ -57,24 +57,27 @@
57#include "loginapplication.h" 57#include "loginapplication.h"
58#include "loginwindowimpl.h" 58#include "loginwindowimpl.h"
59#include "calibrate.h" 59#include "calibrate.h"
60 60
61using namespace Opie; 61using namespace Opie;
62 62
63int login_main ( int argc, char **argv ); 63int login_main ( int argc, char **argv, pid_t ppid );
64void sigterm ( int sig ); 64void sigterm ( int sig );
65void exit_closelog ( ); 65void exit_closelog ( );
66 66
67static struct option long_options [] = { 67static struct option long_options [] = {
68 { "autologin", 1, 0, 'a' }, 68 { "autologin", 1, 0, 'a' },
69 { 0, 0, 0, 0 } 69 { 0, 0, 0, 0 }
70}; 70};
71 71
72 72
73int main ( int argc, char **argv ) 73int main ( int argc, char **argv )
74{ 74{
75 pid_t ppid = ::getpid ( );
76
77
75 if ( ::geteuid ( ) != 0 ) { 78 if ( ::geteuid ( ) != 0 ) {
76 ::fprintf ( stderr, "%s can only be executed by root. (or chmod +s)", argv [0] ); 79 ::fprintf ( stderr, "%s can only be executed by root. (or chmod +s)", argv [0] );
77 return 1; 80 return 1;
78 } 81 }
79 if ( ::getuid ( ) != 0 ) // qt doesn't really like SUID and 82 if ( ::getuid ( ) != 0 ) // qt doesn't really like SUID and
80 ::setuid ( 0 ); // messes up things like config files 83 ::setuid ( 0 ); // messes up things like config files
@@ -180,13 +183,13 @@ int main ( int argc, char **argv )
180 if ( LoginApplication::changeIdentity ( )) 183 if ( LoginApplication::changeIdentity ( ))
181 ::exit ( LoginApplication::login ( )); 184 ::exit ( LoginApplication::login ( ));
182 else 185 else
183 ::exit ( 0 ); 186 ::exit ( 0 );
184 } 187 }
185 else 188 else
186 ::exit ( login_main ( argc, argv )); 189 ::exit ( login_main ( argc, argv, ppid ));
187 } 190 }
188 } 191 }
189 return 0; 192 return 0;
190} 193}
191 194
192void sigterm ( int /*sig*/ ) 195void sigterm ( int /*sig*/ )
@@ -299,16 +302,16 @@ private:
299 bool m_backlight_forcedoff; 302 bool m_backlight_forcedoff;
300}; 303};
301 304
302 305
303 306
304 307
305int login_main ( int argc, char **argv ) 308int login_main ( int argc, char **argv, pid_t ppid )
306{ 309{
307 QWSServer::setDesktopBackground( QImage() ); 310 QWSServer::setDesktopBackground( QImage() );
308 LoginApplication *app = new LoginApplication ( argc, argv ); 311 LoginApplication *app = new LoginApplication ( argc, argv, ppid );
309 312
310 app-> setFont ( QFont ( "Helvetica", 10 )); 313 app-> setFont ( QFont ( "Helvetica", 10 ));
311 app-> setStyle ( new QPEStyle ( )); 314 app-> setStyle ( new QPEStyle ( ));
312 315
313 ODevice::inst ( )-> setSoftSuspend ( true ); 316 ODevice::inst ( )-> setSoftSuspend ( true );
314 317