summaryrefslogtreecommitdiff
authorkergoth <kergoth>2003-03-14 19:22:43 (UTC)
committer kergoth <kergoth>2003-03-14 19:22:43 (UTC)
commit4f483f13e3c624a0ce6161e6ddd6923b4d101f0e (patch) (unidiff)
tree40598ac7ae56246fd2875967345f6eccb13339b7
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 (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
@@ -15,12 +15,14 @@
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include <syslog.h>
22
21#include "desktop.h" 23#include "desktop.h"
22#include "info.h" 24#include "info.h"
23#include "launcher.h" 25#include "launcher.h"
24#include "qcopbridge.h" 26#include "qcopbridge.h"
25#include "shutdownimpl.h" 27#include "shutdownimpl.h"
26#include "startmenu.h" 28#include "startmenu.h"
@@ -735,18 +737,26 @@ void DesktopApplication::shutdown()
735 this, SLOT( shutdown( ShutdownImpl::Type ) ) ); 737 this, SLOT( shutdown( ShutdownImpl::Type ) ) );
736 sd->showMaximized(); 738 sd->showMaximized();
737} 739}
738 740
739void DesktopApplication::shutdown( ShutdownImpl::Type t ) 741void DesktopApplication::shutdown( ShutdownImpl::Type t )
740{ 742{
743
744 char *opt = 0;
745
741 switch ( t ) { 746 switch ( t ) {
742 case ShutdownImpl::ShutdownSystem: 747 case ShutdownImpl::ShutdownSystem:
743 execlp( "shutdown", "shutdown", "-h", "now", ( void* ) 0 ); 748 opt = "-h";
744 break; 749 // fall through
745 case ShutdownImpl::RebootSystem: 750 case ShutdownImpl::RebootSystem:
746 execlp( "shutdown", "shutdown", "-r", "now", ( void* ) 0 ); 751 if ( opt == 0 )
752 opt = "-r";
753
754 if ( execle( "shutdown", "shutdown", opt, "now", ( void* ) 0, "/sbin", "/usr/sbin", ( void* ) 0 ) < 0 )
755 ::syslog ( LOG_ERR, "Erroring execing shutdown\n" );
756
747 break; 757 break;
748 case ShutdownImpl::RestartDesktop: 758 case ShutdownImpl::RestartDesktop:
749 restart(); 759 restart();
750 break; 760 break;
751 case ShutdownImpl::TerminateDesktop: 761 case ShutdownImpl::TerminateDesktop:
752 prepareForTermination( FALSE ); 762 prepareForTermination( FALSE );