summaryrefslogtreecommitdiff
path: root/core/launcher/desktop.cpp
authorkergoth <kergoth>2003-03-14 19:22:43 (UTC)
committer kergoth <kergoth>2003-03-14 19:22:43 (UTC)
commit4f483f13e3c624a0ce6161e6ddd6923b4d101f0e (patch) (side-by-side diff)
tree40598ac7ae56246fd2875967345f6eccb13339b7 /core/launcher/desktop.cpp
parent52c72efc3bcc6b57c6960b5da3393b57182b5ee6 (diff)
downloadopie-4f483f13e3c624a0ce6161e6ddd6923b4d101f0e.zip
opie-4f483f13e3c624a0ce6161e6ddd6923b4d101f0e.tar.gz
opie-4f483f13e3c624a0ce6161e6ddd6923b4d101f0e.tar.bz2
Two bugs fixed:
1) We werent checking for failure on execlp() of shutdown 2) We assumed that /sbin was in the PATH, as otherwise one cannot execute shutdown. This is a flawed assumption, particularly in the case of running Opie as a nonroot user. In the case of OZ 3.1rc3.1, /etc/profile no longer puts the sbin dirs in the PATH (it never should have in the first place), and opie doesnt source $HOME/.profile in its startup script, which resulted in the shutdown app failing to reboot or shutdown. Fixed by using execle rather than execlp, and specifying /sbin and /usr/sbin as the executed path for shutdown.
Diffstat (limited to 'core/launcher/desktop.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/desktop.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp
index 03a23dc..4c239a6 100644
--- a/core/launcher/desktop.cpp
+++ b/core/launcher/desktop.cpp
@@ -18,6 +18,8 @@
**
**********************************************************************/
+#include <syslog.h>
+
#include "desktop.h"
#include "info.h"
#include "launcher.h"
@@ -738,12 +740,20 @@ void DesktopApplication::shutdown()
void DesktopApplication::shutdown( ShutdownImpl::Type t )
{
+
+ char *opt = 0;
+
switch ( t ) {
case ShutdownImpl::ShutdownSystem:
- execlp( "shutdown", "shutdown", "-h", "now", ( void* ) 0 );
- break;
+ opt = "-h";
+ // fall through
case ShutdownImpl::RebootSystem:
- execlp( "shutdown", "shutdown", "-r", "now", ( void* ) 0 );
+ if ( opt == 0 )
+ opt = "-r";
+
+ if ( execle( "shutdown", "shutdown", opt, "now", ( void* ) 0, "/sbin", "/usr/sbin", ( void* ) 0 ) < 0 )
+ ::syslog ( LOG_ERR, "Erroring execing shutdown\n" );
+
break;
case ShutdownImpl::RestartDesktop:
restart();