summaryrefslogtreecommitdiff
authorsandman <sandman>2002-10-29 19:33:49 (UTC)
committer sandman <sandman>2002-10-29 19:33:49 (UTC)
commit7c340d2a08601f4d27f6d2a407fc0de437b8efad (patch) (side-by-side diff)
treec6a01ef4e7623ea1da758030e691531f0476885e
parent2957aae1073f4c41dd6783c41d1199be71cd9f4a (diff)
downloadopie-7c340d2a08601f4d27f6d2a407fc0de437b8efad.zip
opie-7c340d2a08601f4d27f6d2a407fc0de437b8efad.tar.gz
opie-7c340d2a08601f4d27f6d2a407fc0de437b8efad.tar.bz2
when quitting opie-login, don't kill the process id returned by getppid(),
but use the previously saved "real" parent pid.
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
@@ -44,10 +44,11 @@ extern "C" {
LoginApplication *lApp;
-LoginApplication::LoginApplication ( int &argc, char **argv )
+LoginApplication::LoginApplication ( int &argc, char **argv, pid_t parentpid )
: QPEApplication ( argc, argv, GuiServer )
{
lApp = this;
+ m_parentpid = parentpid;
}
const char *LoginApplication::s_username = 0;
@@ -216,5 +217,5 @@ QStringList LoginApplication::allUsers ( )
void LoginApplication::quitToConsole ( )
{
QPEApplication::quit ( );
- ::kill ( ::getppid ( ), SIGTERM );
+ ::kill ( m_parentpid, SIGTERM );
}
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
@@ -39,7 +39,7 @@ struct pam_response;
class LoginApplication : public QPEApplication {
public:
- LoginApplication ( int &argc, char **argv );
+ LoginApplication ( int &argc, char **argv, pid_t parentpid );
static bool checkPassword ( const char *user, const char *password );
@@ -60,6 +60,9 @@ private:
static int pam_helper ( int num_msg, const struct pam_message **msg, struct pam_response **resp, void * );
static const char *s_pam_password;
#endif
+
+private:
+ pid_t m_parentpid;
};
extern LoginApplication *lApp;
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
@@ -60,7 +60,7 @@
using namespace Opie;
-int login_main ( int argc, char **argv );
+int login_main ( int argc, char **argv, pid_t ppid );
void sigterm ( int sig );
void exit_closelog ( );
@@ -72,6 +72,9 @@ static struct option long_options [] = {
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;
@@ -183,7 +186,7 @@ int main ( int argc, char **argv )
::exit ( 0 );
}
else
- ::exit ( login_main ( argc, argv ));
+ ::exit ( login_main ( argc, argv, ppid ));
}
}
return 0;
@@ -302,10 +305,10 @@ private:
-int login_main ( int argc, char **argv )
+int login_main ( int argc, char **argv, pid_t ppid )
{
QWSServer::setDesktopBackground( QImage() );
- LoginApplication *app = new LoginApplication ( argc, argv );
+ LoginApplication *app = new LoginApplication ( argc, argv, ppid );
app-> setFont ( QFont ( "Helvetica", 10 ));
app-> setStyle ( new QPEStyle ( ));