summaryrefslogtreecommitdiff
authorclem <clem>2004-10-08 22:50:28 (UTC)
committer clem <clem>2004-10-08 22:50:28 (UTC)
commit2f29d0ec4bb2355f193d744c890add203bd6f2b2 (patch) (unidiff)
treea703b00b673b9be036415393b53d9c95a5bb87cd
parentdec031cc21181d70e0c806bcf6c228044f7df90b (diff)
downloadopie-2f29d0ec4bb2355f193d744c890add203bd6f2b2.zip
opie-2f29d0ec4bb2355f193d744c890add203bd6f2b2.tar.gz
opie-2f29d0ec4bb2355f193d744c890add203bd6f2b2.tar.bz2
Big commit thanks to a little feature request :-) We now have an O-menu applet
to lock the PDA immediately, and the internal way to ask for an authentication (on resume, on start up, on demand or for a simple test) is much cleaner: it's through MultiauthPassword(int lockMode) (instead of the old bool at_poweron)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/lockapplet/.cvsignore4
-rw-r--r--core/applets/lockapplet/config.in4
-rw-r--r--core/applets/lockapplet/lock.cpp84
-rw-r--r--core/applets/lockapplet/lock.h36
-rw-r--r--core/applets/lockapplet/lockapplet.pro12
-rw-r--r--core/applets/lockapplet/opie-lockapplet.control11
-rw-r--r--core/launcher/serverapp.cpp3
-rw-r--r--core/settings/security/demo/main.cpp2
-rw-r--r--core/settings/security/multiauthconfig.cpp20
-rw-r--r--libopie2/opiesecurity/multiauthpassword.cpp47
-rw-r--r--libopie2/opiesecurity/multiauthpassword.h10
-rw-r--r--packages1
-rw-r--r--pics/security/lock.pngbin0 -> 419 bytes
13 files changed, 206 insertions, 28 deletions
diff --git a/core/applets/lockapplet/.cvsignore b/core/applets/lockapplet/.cvsignore
new file mode 100644
index 0000000..5e2908c
--- a/dev/null
+++ b/core/applets/lockapplet/.cvsignore
@@ -0,0 +1,4 @@
1Makefile*
2.moc
3.obj
4
diff --git a/core/applets/lockapplet/config.in b/core/applets/lockapplet/config.in
new file mode 100644
index 0000000..ddc3522
--- a/dev/null
+++ b/core/applets/lockapplet/config.in
@@ -0,0 +1,4 @@
1 config LOCKAPPLET
2 boolean "opie-lockapplet (button in the Opie menu to lock the PDA)"
3 default "y"
4 depends ( LIBQPE || LIBQPE-X11 ) && SECURITY
diff --git a/core/applets/lockapplet/lock.cpp b/core/applets/lockapplet/lock.cpp
new file mode 100644
index 0000000..89f27bb
--- a/dev/null
+++ b/core/applets/lockapplet/lock.cpp
@@ -0,0 +1,84 @@
1#include "lock.h"
2
3/* OPIE */
4#include <opie2/multiauthpassword.h>
5
6#include <qpe/applnk.h>
7#include <qpe/resource.h>
8
9/* QT */
10#include <qiconset.h>
11#include <qpopupmenu.h>
12#include <qmessagebox.h>
13
14
15LockMenuApplet::LockMenuApplet()
16 :QObject( 0, "LockMenuApplet" )
17{
18}
19
20LockMenuApplet::~LockMenuApplet ( )
21{}
22
23int LockMenuApplet::position() const
24{
25 return 3;
26}
27
28QString LockMenuApplet::name() const
29{
30 return tr( "Lock shortcut" );
31}
32
33QString LockMenuApplet::text() const
34{
35 return tr( "Lock" );
36}
37
38
39QIconSet LockMenuApplet::icon() const
40{
41 QPixmap pix;
42 QImage img = Resource::loadImage( "security/lock" );
43 if ( !img.isNull() )
44 pix.convertFromImage( img.smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize() ) );
45 return pix;
46}
47
48QPopupMenu* LockMenuApplet::popup(QWidget*) const
49{
50 /* no subdir */
51 return 0;
52}
53
54void LockMenuApplet::activated()
55{
56 /*
57 QMessageBox::information(0,tr("No white rabbit found"),
58 tr("<qt>No white rabbit was seen near Opie."
59 "Only the beautiful OpieZilla is available"
60 "for your pleassure</qt>"));
61 */
62 Opie::Security::MultiauthPassword::authenticate(Opie::Security::LockNow);
63}
64
65
66QRESULT LockMenuApplet::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
67{
68 *iface = 0;
69 if ( uuid == IID_QUnknown )
70 *iface = this;
71 else if ( uuid == IID_MenuApplet )
72 *iface = this;
73 else
74 return QS_FALSE;
75
76 if ( *iface )
77 (*iface)->addRef();
78 return QS_OK;
79}
80
81Q_EXPORT_INTERFACE()
82{
83 Q_CREATE_INSTANCE( LockMenuApplet )
84}
diff --git a/core/applets/lockapplet/lock.h b/core/applets/lockapplet/lock.h
new file mode 100644
index 0000000..ff94bce
--- a/dev/null
+++ b/core/applets/lockapplet/lock.h
@@ -0,0 +1,36 @@
1/**
2 * \file lock.h
3 * \brief defines a lock button that goes in the 'O' Opie menu
4 * It's based on the examples/menuapplet code of 2004/10/06.
5 */
6#ifndef CORE_SETTINGS_SECURITY_LOCKAPPLET_LOCK_H
7#define CORE_SETTINGS_SECURITY_LOCKAPPLET_LOCK_H
8
9#include <qpe/menuappletinterface.h>
10#include <qobject.h>
11
12class LockMenuApplet: public QObject, public MenuAppletInterface
13{
14
15 Q_OBJECT
16
17public:
18 LockMenuApplet ( );
19 virtual ~LockMenuApplet ( );
20
21 QRESULT queryInterface( const QUuid&, QUnknownInterface** );
22 Q_REFCOUNT
23
24 virtual int position() const;
25
26 virtual QString name ( ) const;
27 virtual QIconSet icon ( ) const;
28 virtual QString text ( ) const;
29 /* virtual QString tr( const char* ) const;
30 virtual QString tr( const char*, const char* ) const;
31 */
32 virtual QPopupMenu *popup ( QWidget *parent ) const;
33 virtual void activated ( );
34};
35
36#endif
diff --git a/core/applets/lockapplet/lockapplet.pro b/core/applets/lockapplet/lockapplet.pro
new file mode 100644
index 0000000..e0ee780
--- a/dev/null
+++ b/core/applets/lockapplet/lockapplet.pro
@@ -0,0 +1,12 @@
1TEMPLATE = lib
2CONFIG += qt plugn warn_on
3HEADERS = lock.h
4SOURCES = lock.cpp
5TARGET = lockapplet
6DESTDIR = $(OPIEDIR)/plugins/applets
7INCLUDEPATH += $(OPIEDIR)/include
8DEPENDPATH += $(OPIEDIR)/include
9LIBS += -lqpe
10VERSION = 1.0.0
11
12include ( $(OPIEDIR)/include.pro )
diff --git a/core/applets/lockapplet/opie-lockapplet.control b/core/applets/lockapplet/opie-lockapplet.control
new file mode 100644
index 0000000..e175a3e
--- a/dev/null
+++ b/core/applets/lockapplet/opie-lockapplet.control
@@ -0,0 +1,11 @@
1Package: opie-lockapplet
2Files: plugins/applets/liblockapplet.so*
3Priority: optional
4Section: opie/applets
5Maintainer: Opie Team <opie@handhelds.org>
6Architecture: arm
7Depends: task-opie-minimal, opie-security
8Description: Lock Opie now
9 Button to lock Opie (as configured in the Security
10 settings) on demand.
11Version: $QPE_VERSION$EXTRAVERSION
diff --git a/core/launcher/serverapp.cpp b/core/launcher/serverapp.cpp
index dc1f2c7..e541d10 100644
--- a/core/launcher/serverapp.cpp
+++ b/core/launcher/serverapp.cpp
@@ -481,65 +481,66 @@ void ServerApplication::reloadPowerWarnSettings ( )
481 m_powerCritical = cfg. readNumEntry ( "powervcritical", 5 ); 481 m_powerCritical = cfg. readNumEntry ( "powervcritical", 5 );
482} 482}
483 483
484void ServerApplication::launcherMessage( const QCString & msg, const QByteArray & data ) 484void ServerApplication::launcherMessage( const QCString & msg, const QByteArray & data )
485{ 485{
486 QDataStream stream ( data, IO_ReadOnly ); 486 QDataStream stream ( data, IO_ReadOnly );
487 487
488 if ( msg == "deviceButton(int,int,int)" ) { 488 if ( msg == "deviceButton(int,int,int)" ) {
489 int keycode, press, autoRepeat; 489 int keycode, press, autoRepeat;
490 stream >> keycode >> press >> autoRepeat; 490 stream >> keycode >> press >> autoRepeat;
491 491
492 kf->checkButtonAction ( true, keycode, press, autoRepeat ); 492 kf->checkButtonAction ( true, keycode, press, autoRepeat );
493 } 493 }
494 else if ( msg == "keyRegister(int,QCString,QCString)" ) { 494 else if ( msg == "keyRegister(int,QCString,QCString)" ) {
495 int k; 495 int k;
496 QCString c, m; 496 QCString c, m;
497 stream >> k >> c >> m; 497 stream >> k >> c >> m;
498 498
499 kf -> registerKey( QCopKeyRegister(k, c, m) ); 499 kf -> registerKey( QCopKeyRegister(k, c, m) );
500 } 500 }
501} 501}
502 502
503 503
504bool ServerApplication::screenLocked() 504bool ServerApplication::screenLocked()
505{ 505{
506 return loggedin == 0; 506 return loggedin == 0;
507} 507}
508 508
509void ServerApplication::login(bool at_poweron) 509void ServerApplication::login(bool at_poweron)
510{ 510{
511 if ( !loggedin ) { 511 if ( !loggedin ) {
512 Global::terminateBuiltin("calibrate"); // No tr 512 Global::terminateBuiltin("calibrate"); // No tr
513 Opie::Security::MultiauthPassword::authenticate(at_poweron); 513 int lockMode = at_poweron ? Opie::Security::IfPowerOn : Opie::Security::IfResume;
514 Opie::Security::MultiauthPassword::authenticate(lockMode);
514 loggedin=1; 515 loggedin=1;
515#ifndef QT_NO_COP 516#ifndef QT_NO_COP
516 QCopEnvelope e( "QPE/Desktop", "unlocked()" ); 517 QCopEnvelope e( "QPE/Desktop", "unlocked()" );
517#endif 518#endif
518 } 519 }
519} 520}
520 521
521#if defined(QPE_HAVE_TOGGLELIGHT) 522#if defined(QPE_HAVE_TOGGLELIGHT)
522#include <qtopia/config.h> 523#include <qtopia/config.h>
523 524
524#include <sys/ioctl.h> 525#include <sys/ioctl.h>
525#include <sys/types.h> 526#include <sys/types.h>
526#include <fcntl.h> 527#include <fcntl.h>
527#include <unistd.h> 528#include <unistd.h>
528#include <errno.h> 529#include <errno.h>
529#include <linux/ioctl.h> 530#include <linux/ioctl.h>
530#include <time.h> 531#include <time.h>
531#endif 532#endif
532 533
533namespace { 534namespace {
534 void execAutoStart(const QDateTime& suspendTime ) { 535 void execAutoStart(const QDateTime& suspendTime ) {
535 QString appName; 536 QString appName;
536 int delay; 537 int delay;
537 QDateTime now = QDateTime::currentDateTime(); 538 QDateTime now = QDateTime::currentDateTime();
538 539
539 Config cfg( "autostart" ); 540 Config cfg( "autostart" );
540 cfg.setGroup( "AutoStart" ); 541 cfg.setGroup( "AutoStart" );
541 appName = cfg.readEntry( "Apps", "" ); 542 appName = cfg.readEntry( "Apps", "" );
542 delay = cfg.readNumEntry( "Delay", 0 ); 543 delay = cfg.readNumEntry( "Delay", 0 );
543 544
544 // If the time between suspend and resume was longer then the 545 // If the time between suspend and resume was longer then the
545 // value saved as delay, start the app 546 // value saved as delay, start the app
diff --git a/core/settings/security/demo/main.cpp b/core/settings/security/demo/main.cpp
index 1c49f57..82f940d 100644
--- a/core/settings/security/demo/main.cpp
+++ b/core/settings/security/demo/main.cpp
@@ -1,12 +1,12 @@
1#include <opie2/multiauthpassword.h> 1#include <opie2/multiauthpassword.h>
2 2
3#include <opie2/oapplication.h> 3#include <opie2/oapplication.h>
4 4
5/// Run an authentication sequence using the global opie-security settings 5/// Run an authentication sequence using the global opie-security settings
6int main( int argc, char ** argv ) 6int main( int argc, char ** argv )
7{ 7{
8 Opie::Core::OApplication app(argc, argv, "Multi-authentication demo"); 8 Opie::Core::OApplication app(argc, argv, "Multi-authentication demo");
9 9
10 // Run the authentication process until it succeeds 10 // Run the authentication process until it succeeds
11 Opie::Security::MultiauthPassword::authenticate(); 11 Opie::Security::MultiauthPassword::authenticate(Opie::Security::LockNow);
12} 12}
diff --git a/core/settings/security/multiauthconfig.cpp b/core/settings/security/multiauthconfig.cpp
index 192b8ca..9d5c032 100644
--- a/core/settings/security/multiauthconfig.cpp
+++ b/core/settings/security/multiauthconfig.cpp
@@ -1,34 +1,34 @@
1#include <opie2/odebug.h> 1#include <opie2/odebug.h>
2#include <opie2/multiauthmainwindow.h> 2#include <opie2/multiauthpassword.h>
3 3
4#include <qgroupbox.h> 4#include <qgroupbox.h>
5#include <qvgroupbox.h> 5#include <qvgroupbox.h>
6#include <qpe/resource.h> 6#include <qpe/resource.h>
7#include <qlayout.h> 7#include <qlayout.h>
8#include <qlabel.h> 8#include <qlabel.h>
9#include <qhbox.h> 9#include <qhbox.h>
10#include <qheader.h> 10#include <qheader.h>
11#include <qvbox.h> 11#include <qvbox.h>
12#include <qwhatsthis.h> 12#include <qwhatsthis.h>
13#include <qtoolbutton.h> 13#include <qtoolbutton.h>
14#include <qstringlist.h> 14#include <qstringlist.h>
15#include <qdir.h> 15#include <qdir.h>
16#include <qpe/qlibrary.h> 16#include <qpe/qlibrary.h>
17#include <qpe/qpeapplication.h> 17#include <qpe/qpeapplication.h>
18 18
19#include "multiauthconfig.h" 19#include "multiauthconfig.h"
20 20
21 21
22using Opie::Security::MultiauthPluginInterface; 22using Opie::Security::MultiauthPluginInterface;
23using Opie::Security::MultiauthPluginObject; 23using Opie::Security::MultiauthPluginObject;
24using Opie::Security::MultiauthConfigWidget; 24using Opie::Security::MultiauthConfigWidget;
25/// keeps information about MultiauthPluginObject plugins 25/// keeps information about MultiauthPluginObject plugins
26struct MultiauthPlugin { 26struct MultiauthPlugin {
27 MultiauthPlugin() : library( 0 ), iface( 0 ), pluginObject( 0 ) {} 27 MultiauthPlugin() : library( 0 ), iface( 0 ), pluginObject( 0 ) {}
28 /// plugin file 28 /// plugin file
29 QLibrary *library; 29 QLibrary *library;
30 /// the plugin object interface 30 /// the plugin object interface
31 QInterfacePtr<MultiauthPluginInterface> iface; 31 QInterfacePtr<MultiauthPluginInterface> iface;
32 /// the plugin object itself 32 /// the plugin object itself
33 MultiauthPluginObject *pluginObject; 33 MultiauthPluginObject *pluginObject;
34 /// name of the plugin file 34 /// name of the plugin file
@@ -92,80 +92,66 @@ class ToolButton : public QToolButton {
92 devBoxLayout->addWidget(m_noProtectConfig, 0, 0); 92 devBoxLayout->addWidget(m_noProtectConfig, 0, 0);
93 devBoxLayout->addWidget(m_explanScreens, 1, 0); 93 devBoxLayout->addWidget(m_explanScreens, 1, 0);
94 94
95 QVGroupBox *tryBox = new QVGroupBox(tr("Testing"), this, "try box"); 95 QVGroupBox *tryBox = new QVGroupBox(tr("Testing"), this, "try box");
96 vb->addWidget(tryBox); 96 vb->addWidget(tryBox);
97 m_tryButton = new QPushButton( tr("Test the authentication now"), tryBox, "try button"); 97 m_tryButton = new QPushButton( tr("Test the authentication now"), tryBox, "try button");
98 connect( m_tryButton, SIGNAL(clicked()), this, SLOT(tryAuth()) ); 98 connect( m_tryButton, SIGNAL(clicked()), this, SLOT(tryAuth()) );
99 99
100} 100}
101 101
102/// nothing to do 102/// nothing to do
103MultiauthGeneralConfig::~MultiauthGeneralConfig() 103MultiauthGeneralConfig::~MultiauthGeneralConfig()
104{} 104{}
105 105
106/// launches the authentication process, as configured, with the option to bypass it 106/// launches the authentication process, as configured, with the option to bypass it
107void MultiauthGeneralConfig::tryAuth() 107void MultiauthGeneralConfig::tryAuth()
108{ 108{
109 QMessageBox confirmSave( 109 QMessageBox confirmSave(
110 tr("Attention"), 110 tr("Attention"),
111 "<p>" + tr("You must save your current settings before trying to authenticate. Press OK to accept and launch a simulated authentication process.") + "</p><p><em>" + 111 "<p>" + tr("You must save your current settings before trying to authenticate. Press OK to accept and launch a simulated authentication process.") + "</p><p><em>" +
112 tr("If you don't like the result of this test, don't forget to change your settings before you exit the configuration application!") + "</em></p>", 112 tr("If you don't like the result of this test, don't forget to change your settings before you exit the configuration application!") + "</em></p>",
113 QMessageBox::Warning, 113 QMessageBox::Warning,
114 QMessageBox::Cancel, QMessageBox::Yes, QMessageBox::NoButton, 114 QMessageBox::Cancel, QMessageBox::Yes, QMessageBox::NoButton,
115 0, QString::null, TRUE, WStyle_StaysOnTop); 115 0, QString::null, TRUE, WStyle_StaysOnTop);
116 confirmSave.setButtonText(QMessageBox::Cancel, tr("Cancel")); 116 confirmSave.setButtonText(QMessageBox::Cancel, tr("Cancel"));
117 confirmSave.setButtonText(QMessageBox::Yes, tr("OK")); 117 confirmSave.setButtonText(QMessageBox::Yes, tr("OK"));
118 118
119 if ( confirmSave.exec() == QMessageBox::Yes) 119 if ( confirmSave.exec() == QMessageBox::Yes)
120 { 120 {
121 owarn << "writing config as user accepted" << oendl; 121 owarn << "writing config as user accepted" << oendl;
122 m_parentConfig->writeConfigs(); 122 m_parentConfig->writeConfigs();
123 owarn << "testing authentication" << oendl; 123 owarn << "testing authentication" << oendl;
124 124 // launch the authentication in testing mode
125 /* launch the authentication in debug, aka "allowBypass == true", mode 125 Opie::Security::MultiauthPassword::authenticate(Opie::Security::TestNow);
126 */
127
128 Opie::Security::MultiauthMainWindow win(true);
129 // resize the QDialog object so it fills all the screen
130 QRect desk = qApp->desktop()->geometry();
131 win.setGeometry( 0, 0, desk.width(), desk.height() );
132
133 // the authentication has already succeeded (without win interactions)
134 if ( win.isAlreadyDone() )
135 return;
136
137 win.exec();
138
139 }
140 126
141} 127}
142 128
143 129
144/// Builds and displays the Opie multi-authentication configuration dialog 130/// Builds and displays the Opie multi-authentication configuration dialog
145static void test_and_start() { 131static void test_and_start() {
146 Config pcfg("Security"); 132 Config pcfg("Security");
147 pcfg.setGroup( "Misc" ); 133 pcfg.setGroup( "Misc" );
148 bool protectConfigDialog = ! pcfg.readBoolEntry("noProtectConfig", true); 134 bool protectConfigDialog = ! pcfg.readBoolEntry("noProtectConfig", true);
149 135
150 if (protectConfigDialog && Opie::Security::Internal::runPlugins() != 0) { 136 if (protectConfigDialog && Opie::Security::Internal::runPlugins() != 0) {
151 owarn << "authentication failed, not showing opie-security" << oendl; 137 owarn << "authentication failed, not showing opie-security" << oendl;
152 exit( -1 ); 138 exit( -1 );
153 } 139 }
154} 140}
155 141
156 142
157 143
158 MultiauthConfig::MultiauthConfig(QWidget* par, const char* w = "MultiauthConfig dialog", WFlags f = 0) 144 MultiauthConfig::MultiauthConfig(QWidget* par, const char* w = "MultiauthConfig dialog", WFlags f = 0)
159: QDialog(par, w, TRUE, f), 145: QDialog(par, w, TRUE, f),
160 m_mainTW(0), m_pluginListView(0), m_pluginListWidget(0), 146 m_mainTW(0), m_pluginListView(0), m_pluginListWidget(0),
161 m_generalConfig(0), m_loginWidget(0), m_syncWidget(0), 147 m_generalConfig(0), m_loginWidget(0), m_syncWidget(0),
162 m_nbSuccessReq(0), m_plugins_changed(false) 148 m_nbSuccessReq(0), m_plugins_changed(false)
163{ 149{
164 /* Initializes the global configuration window 150 /* Initializes the global configuration window
165 */ 151 */
166 test_and_start(); 152 test_and_start();
167 153
168 /* Checks (and memorizes) if any authentication plugins are 154 /* Checks (and memorizes) if any authentication plugins are
169 * installed on the system 155 * installed on the system
170 */ 156 */
171 QString path = QPEApplication::qpeDir() + "/plugins/security"; 157 QString path = QPEApplication::qpeDir() + "/plugins/security";
diff --git a/libopie2/opiesecurity/multiauthpassword.cpp b/libopie2/opiesecurity/multiauthpassword.cpp
index 42341f7..8eda554 100644
--- a/libopie2/opiesecurity/multiauthpassword.cpp
+++ b/libopie2/opiesecurity/multiauthpassword.cpp
@@ -24,82 +24,115 @@
24 : = ...= . :.=- 24 : = ...= . :.=-
25 -. .:....=;==+<; You should have received a copy of the GNU 25 -. .:....=;==+<; You should have received a copy of the GNU
26 -_. . . )=. = Library General Public License along with 26 -_. . . )=. = Library General Public License along with
27 -- :-=` this library; see the file COPYING.LIB. 27 -- :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34 34
35/* OPIE */ 35/* OPIE */
36#include <opie2/multiauthcommon.h> 36#include <opie2/multiauthcommon.h>
37#include <opie2/multiauthmainwindow.h> 37#include <opie2/multiauthmainwindow.h>
38#include <qpe/config.h> 38#include <qpe/config.h>
39#include <qpe/qlibrary.h> 39#include <qpe/qlibrary.h>
40#include <qpe/qcom.h> 40#include <qpe/qcom.h>
41 41
42/* QT */ 42/* QT */
43#include <qapplication.h> 43#include <qapplication.h>
44#include <qvbox.h> 44#include <qvbox.h>
45#include <qpushbutton.h> 45#include <qpushbutton.h>
46#include <qlabel.h> 46#include <qlabel.h>
47#include <qdir.h> 47#include <qdir.h>
48 48
49#include "multiauthpassword.h" 49#include "multiauthpassword.h"
50 50
51namespace Opie { 51namespace Opie {
52namespace Security { 52namespace Security {
53 53
54 54
55/** 55/**
56 * If the users requires authentication... #fixme 56 * Tells if the users requires authentication (used internally to
57 * know whether to repaint the screen on resume)
57 * 58 *
58 * @todo fix up at_poweron attribute 59 * \param at_poweron true if we are booting Opie, false if we are resuming it
60 * \return true if authenticate() launched right now would trigger an authentication
59 */ 61 */
60bool MultiauthPassword::needToAuthenticate(bool at_poweron) 62bool MultiauthPassword::needToAuthenticate(bool at_poweron)
61{ 63{
62 Config cfg("Security"); 64 Config cfg("Security");
63 cfg.setGroup("Misc"); 65 cfg.setGroup("Misc");
64 if ( !at_poweron && cfg.readBoolEntry("onStart", false) ) 66 if ( !at_poweron && cfg.readBoolEntry("onStart", false) )
65 return true; 67 return true;
66 else if ( at_poweron && cfg.readBoolEntry("onResume", false) ) 68 else if ( at_poweron && cfg.readBoolEntry("onResume", false) )
67 return true; 69 return true;
68 else 70 else
69 return false; 71 return false;
70} 72}
71 73
72 74
75
73/** 76/**
74 * \brief Require user authentication to unlock and continue 77 * \brief Require (if configured so) user authentication to unlock and continue
75 * 78 *
76 * This method will check if you require authentication 79 * This method will check if you require authentication
77 * and then will lock the screen and ask for a successful 80 * and then will lock the screen and ask for a successful
78 * authentication (explaining what it does or not, depending 81 * authentication (explaining what it does or not, depending
79 * on your local configuration). 82 * on your local configuration).
80 * It may go into an event loop, but anyhow it will only end 83 * It may go into an event loop, but anyhow it will only end
81 * when the user has successfully authenticated to the system. 84 * when the user has successfully authenticated to the system.
82 */ 85 */
83void MultiauthPassword::authenticate(bool at_poweron) 86void MultiauthPassword::authenticate(int lockMode)
84{ 87{
85 if ( ! needToAuthenticate(at_poweron) ) 88 /**
86 return; 89 * \par Conditions
90 *
91 * If lockMode is an If, it's conditional:
92 * \li IfPowerOn will not trigger an authentication if
93 * onStart is set to false in Security.conf,
94 * \li IfResume will not trigger an authentication if
95 * onResume is set to false in Security.conf.
96 */
97 if ( (lockMode == IfPowerOn) || (lockMode == IfResume) )
98 {
99 Config cfg("Security");
100 cfg.setGroup("Misc");
101 if ( (
102 (lockMode == IfPowerOn) && cfg.readBoolEntry("onStart", false)
103 ) || (
104 (lockMode == IfResume) && cfg.readBoolEntry("onResume", false)
105 ) )
106 return;
107 }
108
109 /**
110 * \li TestNow will ensure that the authentication window will let
111 * people escape through the last screen (which they can reach skipping
112 * all the authentication steps)
113 * \li LockNow will always go on with the authentication, and won't let
114 * people escape.
115 */
116 bool allowByPass = false;
117
118 if (lockMode == TestNow)
119 allowByPass = true;
87 120
88 /* Constructs the main window, which displays messages and blocks 121 /* Constructs the main window, which displays messages and blocks
89 * access to the desktop 122 * access to the desktop
90 */ 123 */
91 MultiauthMainWindow win; 124 MultiauthMainWindow win(allowByPass);
92 125
93 // resize the QDialog object so it fills all the screen 126 // resize the QDialog object so it fills all the screen
94 QRect desk = qApp->desktop()->geometry(); 127 QRect desk = qApp->desktop()->geometry();
95 win.setGeometry( 0, 0, desk.width(), desk.height() ); 128 win.setGeometry( 0, 0, desk.width(), desk.height() );
96 129
97 // the authentication has already succeeded (without win interactions) 130 // the authentication has already succeeded (without win interactions)
98 if ( win.isAlreadyDone() ) 131 if ( win.isAlreadyDone() )
99 return; 132 return;
100 133
101 win.exec(); 134 win.exec();
102} 135}
103 136
104} 137}
105} 138}
diff --git a/libopie2/opiesecurity/multiauthpassword.h b/libopie2/opiesecurity/multiauthpassword.h
index fe276da..effdaa1 100644
--- a/libopie2/opiesecurity/multiauthpassword.h
+++ b/libopie2/opiesecurity/multiauthpassword.h
@@ -9,51 +9,57 @@
9 .>+-= 9 .>+-=
10 _;:, .> :=|. This library is free software; you can 10 _;:, .> :=|. This library is free software; you can
11.> <`_, > . <= redistribute it and/or modify it under 11.> <`_, > . <= redistribute it and/or modify it under
12:`=1 )Y*s>-.-- : the terms of the GNU Library General Public 12:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
13.="- .-=="i, .._ License as published by the Free Software 13.="- .-=="i, .._ License as published by the Free Software
14 - . .-<_> .<> Foundation; either version 2 of the License, 14 - . .-<_> .<> Foundation; either version 2 of the License,
15 ._= =} : or (at your option) any later version. 15 ._= =} : or (at your option) any later version.
16 .%`+i> _;_. 16 .%`+i> _;_.
17 .i_,=:_. -<s. This library is distributed in the hope that 17 .i_,=:_. -<s. This library is distributed in the hope that
18 + . -:. = it will be useful, but WITHOUT ANY WARRANTY; 18 + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
19 : .. .:, . . . without even the implied warranty of 19 : .. .:, . . . without even the implied warranty of
20 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A 20 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
21 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU 21 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
22..}^=.= = ; Library General Public License for more 22..}^=.= = ; Library General Public License for more
23++= -. .` .: details. 23++= -. .` .: details.
24 : = ...= . :.=- 24 : = ...= . :.=-
25 -. .:....=;==+<; You should have received a copy of the GNU 25 -. .:....=;==+<; You should have received a copy of the GNU
26 -_. . . )=. = Library General Public License along with 26 -_. . . )=. = Library General Public License along with
27 -- :-=` this library; see the file COPYING.LIB. 27 -- :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34 34
35#ifndef OPIE_SEC_MULTIAUTHPASSWORD_H 35#ifndef OPIE_SEC_MULTIAUTHPASSWORD_H
36#define OPIE_SEC_MULTIAUTHPASSWORD_H 36#define OPIE_SEC_MULTIAUTHPASSWORD_H
37 37
38namespace Opie { 38namespace Opie {
39namespace Security { 39namespace Security {
40 40
41enum lockMode {
42 IfPowerOn,
43 IfResume,
44 TestNow,
45 LockNow };
41/** 46/**
42 * This is the dropin replacement for the libqpe Password class. 47 * This is the dropin replacement for the libqpe Password class.
43 * If you call authenticate() a widget will cover the whole screen 48 * If you call authenticate() a widget will cover the whole screen
44 * and only return if the user is able to authenticate with any of the 49 * and only return if the user is able to authenticate with any of the
45 * configured Authentication Plugins. 50 * configured Authentication Plugins.
46 * It uses the Opie::Security::MultiauthMainWindow QDialog internally. 51 * It uses the Opie::Security::MultiauthMainWindow QDialog internally.
47 * 52 *
48 * @author Clement Séveillac, Holger Freyther 53 * @author Clement Séveillac, Holger Freyther
49 */ 54 */
50class MultiauthPassword { 55class MultiauthPassword {
56
51public: 57public:
52 static bool needToAuthenticate( bool atpoweron = false ); 58 static void authenticate(int authMode = LockNow);
53 static void authenticate(bool atpoweron = false); 59 static bool needToAuthenticate( bool atpoweron = false );
54}; 60};
55 61
56 62
57} 63}
58} 64}
59#endif 65#endif
diff --git a/packages b/packages
index 275d2f9..dcbbe78 100644
--- a/packages
+++ b/packages
@@ -69,64 +69,65 @@ CONFIG_KEYVIEW development/keyview keyview.pro
69 CONFIG_KJUMPX inputmethods/kjumpxkjumpx.pro 69 CONFIG_KJUMPX inputmethods/kjumpxkjumpx.pro
70 CONFIG_KPACMAN noncore/games/kpacmankpacman.pro 70 CONFIG_KPACMAN noncore/games/kpacmankpacman.pro
71 CONFIG_LANGUAGE noncore/settings/languagelanguage.pro 71 CONFIG_LANGUAGE noncore/settings/languagelanguage.pro
72 CONFIG_LAUNCHER core/launcherserver.pro 72 CONFIG_LAUNCHER core/launcherserver.pro
73 CONFIG_LAUNCHER-SETTINGS core/settings/launcherlauncher.pro 73 CONFIG_LAUNCHER-SETTINGS core/settings/launcherlauncher.pro
74 CONFIG_LIBFFMPEG core/multimedia/opieplayer/libffmpeglibffmpeg.pro 74 CONFIG_LIBFFMPEG core/multimedia/opieplayer/libffmpeglibffmpeg.pro
75 CONFIG_LIBFLASH core/multimedia/opieplayer/libflashlibflash.pro 75 CONFIG_LIBFLASH core/multimedia/opieplayer/libflashlibflash.pro
76 CONFIG_LIBMAD core/multimedia/opieplayer/libmadlibmad.pro 76 CONFIG_LIBMAD core/multimedia/opieplayer/libmadlibmad.pro
77 CONFIG_LIBMAIL noncore/unsupported/mail2/libmaillibmail.pro 77 CONFIG_LIBMAIL noncore/unsupported/mail2/libmaillibmail.pro
78CONFIG_LIBMAILWRAPPER noncore/net/mail/libmailwrapper libmailwrapper.pro 78CONFIG_LIBMAILWRAPPER noncore/net/mail/libmailwrapper libmailwrapper.pro
79 CONFIG_LIBMPEG3 core/multimedia/opieplayer/libmpeg3libmpeg3.pro 79 CONFIG_LIBMPEG3 core/multimedia/opieplayer/libmpeg3libmpeg3.pro
80 CONFIG_LIBOPIE2CORE libopie2/opiecoreopiecore.pro 80 CONFIG_LIBOPIE2CORE libopie2/opiecoreopiecore.pro
81 CONFIG_LIBOPIE2DB libopie2/opiedbopiedb.pro 81 CONFIG_LIBOPIE2DB libopie2/opiedbopiedb.pro
82 CONFIG_LIBOPIE2EXAMPLES libopie2/examplesexamples.pro 82 CONFIG_LIBOPIE2EXAMPLES libopie2/examplesexamples.pro
83 CONFIG_LIBOPIE2MM libopie2/opiemmopiemm.pro 83 CONFIG_LIBOPIE2MM libopie2/opiemmopiemm.pro
84 CONFIG_LIBOPIE2NET libopie2/opienetopienet.pro 84 CONFIG_LIBOPIE2NET libopie2/opienetopienet.pro
85 CONFIG_LIBOPIE2PIM libopie2/opiepimopiepim.pro 85 CONFIG_LIBOPIE2PIM libopie2/opiepimopiepim.pro
86 CONFIG_LIBOPIE2SECURITYlibopie2/opiesecurity opiesecurity.pro 86 CONFIG_LIBOPIE2SECURITYlibopie2/opiesecurity opiesecurity.pro
87 CONFIG_LIBOPIE2UI libopie2/opieuiopieui.pro 87 CONFIG_LIBOPIE2UI libopie2/opieuiopieui.pro
88 CONFIG_LIBOPIE libopielibopie.pro 88 CONFIG_LIBOPIE libopielibopie.pro
89 CONFIG_LIBOPIE_PIM libopie/pimpim.pro 89 CONFIG_LIBOPIE_PIM libopie/pimpim.pro
90 CONFIG_LIBOPIETOOTH noncore/net/opietooth/liblib.pro 90 CONFIG_LIBOPIETOOTH noncore/net/opietooth/liblib.pro
91 CONFIG_LIBQPE librarylibrary.pro 91 CONFIG_LIBQPE librarylibrary.pro
92 CONFIG_LIBQPE-X11 x11/libqpe-x11libqpe-x11.pro 92 CONFIG_LIBQPE-X11 x11/libqpe-x11libqpe-x11.pro
93CONFIG_LIBQRSYNC rsync rsync.pro 93CONFIG_LIBQRSYNC rsync rsync.pro
94 CONFIG_LIBQTAUX libqtauxlibqtaux.pro 94 CONFIG_LIBQTAUX libqtauxlibqtaux.pro
95 CONFIG_LIBSLCOMPAT libslcompatlibslcompat.pro 95 CONFIG_LIBSLCOMPAT libslcompatlibslcompat.pro
96 CONFIG_LIBSQL libsqllibsql.pro 96 CONFIG_LIBSQL libsqllibsql.pro
97CONFIG_LIBTREMOR core/multimedia/opieplayer/vorbis/tremor tremor.pro 97CONFIG_LIBTREMOR core/multimedia/opieplayer/vorbis/tremor tremor.pro
98CONFIG_LIBTREMORPLUGIN core/multimedia/opieplayer/vorbis libtremor.pro 98CONFIG_LIBTREMORPLUGIN core/multimedia/opieplayer/vorbis libtremor.pro
99 CONFIG_LIGHT-AND-POWER core/settings/light-and-powerlight-and-power.pro 99 CONFIG_LIGHT-AND-POWER core/settings/light-and-powerlight-and-power.pro
100 CONFIG_LIQUID noncore/styles/liquidliquid.pro 100 CONFIG_LIQUID noncore/styles/liquidliquid.pro
101 CONFIG_LOCKAPPLET core/applets/lockappletlockapplet.pro
101 CONFIG_LOGOUTAPPLET core/applets/logoutappletlogoutapplet.pro 102 CONFIG_LOGOUTAPPLET core/applets/logoutappletlogoutapplet.pro
102 CONFIG_MAIL3 noncore/net/mail mail.pro 103 CONFIG_MAIL3 noncore/net/mail mail.pro
103CONFIG_MAILAPPLET noncore/net/mail/taskbarapplet taskbarapplet.pro 104CONFIG_MAILAPPLET noncore/net/mail/taskbarapplet taskbarapplet.pro
104 CONFIG_MAILIT noncore/unsupported/mailit mailit.pro 105 CONFIG_MAILIT noncore/unsupported/mailit mailit.pro
105CONFIG_MAIN_TAB_EXAMPLE examples/main-tab example.pro 106CONFIG_MAIN_TAB_EXAMPLE examples/main-tab example.pro
106 CONFIG_MEDIUMMOUNT noncore/settings/mediummountmediummount.pro 107 CONFIG_MEDIUMMOUNT noncore/settings/mediummountmediummount.pro
107 CONFIG_MEMORYAPPLET noncore/applets/memoryappletmemoryapplet.pro 108 CONFIG_MEMORYAPPLET noncore/applets/memoryappletmemoryapplet.pro
108 CONFIG_METAL noncore/styles/metalmetal.pro 109 CONFIG_METAL noncore/styles/metalmetal.pro
109 CONFIG_MINDBREAKER noncore/games/mindbreakermindbreaker.pro 110 CONFIG_MINDBREAKER noncore/games/mindbreakermindbreaker.pro
110 CONFIG_MINESWEEP noncore/games/minesweepminesweep.pro 111 CONFIG_MINESWEEP noncore/games/minesweepminesweep.pro
111 CONFIG_MOBILEMSG noncore/comm/mobilemsgmobilemsg.pro 112 CONFIG_MOBILEMSG noncore/comm/mobilemsgmobilemsg.pro
112 CONFIG_MODPLUG core/multimedia/opieplayer/modplugmodplug.pro 113 CONFIG_MODPLUG core/multimedia/opieplayer/modplugmodplug.pro
113CONFIG_MULTIAUTH_BLUEPING noncore/securityplugins/blueping bluepingplugin.pro 114CONFIG_MULTIAUTH_BLUEPING noncore/securityplugins/blueping bluepingplugin.pro
114CONFIG_MULTIAUTH_DUMMY noncore/securityplugins/dummy dummyplugin.pro 115CONFIG_MULTIAUTH_DUMMY noncore/securityplugins/dummy dummyplugin.pro
115CONFIG_MULTIAUTH_NOTICE noncore/securityplugins/notice noticeplugin.pro 116CONFIG_MULTIAUTH_NOTICE noncore/securityplugins/notice noticeplugin.pro
116CONFIG_MULTIAUTH_PIN noncore/securityplugins/pin pinplugin.pro 117CONFIG_MULTIAUTH_PIN noncore/securityplugins/pin pinplugin.pro
117 CONFIG_MULTIKEYAPPLET core/applets/multikeyappletmultikeyapplet.pro 118 CONFIG_MULTIKEYAPPLET core/applets/multikeyappletmultikeyapplet.pro
118 CONFIG_MULTIKEY inputmethods/multikeymultikey.pro 119 CONFIG_MULTIKEY inputmethods/multikeymultikey.pro
119 CONFIG_NETSYSTEMTIME noncore/settings/netsystemtimenetsystemtime.pro 120 CONFIG_NETSYSTEMTIME noncore/settings/netsystemtimenetsystemtime.pro
120 CONFIG_NETWORKAPPLET noncore/applets/networkappletnetworkapplet.pro 121 CONFIG_NETWORKAPPLET noncore/applets/networkappletnetworkapplet.pro
121 CONFIG_NETWORKSETUP noncore/settings/networksettingsnetworksettings.pro 122 CONFIG_NETWORKSETUP noncore/settings/networksettingsnetworksettings.pro
122 CONFIG_NOTESAPPLET noncore/applets/notesappletnotesapplet.pro 123 CONFIG_NOTESAPPLET noncore/applets/notesappletnotesapplet.pro
123 CONFIG_NS2BT noncore/settings/networksettings2/bluetoothbluetooth.pro 124 CONFIG_NS2BT noncore/settings/networksettings2/bluetoothbluetooth.pro
124 CONFIG_NS2CABLE noncore/settings/networksettings2/cablecable.pro 125 CONFIG_NS2CABLE noncore/settings/networksettings2/cablecable.pro
125 CONFIG_NS2CORE noncore/settings/networksettings2/networksettings2networksettings2.pro 126 CONFIG_NS2CORE noncore/settings/networksettings2/networksettings2networksettings2.pro
126 CONFIG_NS2IRDA noncore/settings/networksettings2/irdairda.pro 127 CONFIG_NS2IRDA noncore/settings/networksettings2/irdairda.pro
127 CONFIG_NS2LANCARD noncore/settings/networksettings2/lancardlancard.pro 128 CONFIG_NS2LANCARD noncore/settings/networksettings2/lancardlancard.pro
128 CONFIG_NS2MODEM noncore/settings/networksettings2/modemmodem.pro 129 CONFIG_NS2MODEM noncore/settings/networksettings2/modemmodem.pro
129 CONFIG_NS2NETWORK noncore/settings/networksettings2/networknetwork.pro 130 CONFIG_NS2NETWORK noncore/settings/networksettings2/networknetwork.pro
130 CONFIG_NS2 noncore/settings/networksettings2networksettings.pro 131 CONFIG_NS2 noncore/settings/networksettings2networksettings.pro
131 CONFIG_NS2PPP noncore/settings/networksettings2/pppppp.pro 132 CONFIG_NS2PPP noncore/settings/networksettings2/pppppp.pro
132 CONFIG_NS2PROFILE noncore/settings/networksettings2/profileprofile.pro 133 CONFIG_NS2PROFILE noncore/settings/networksettings2/profileprofile.pro
diff --git a/pics/security/lock.png b/pics/security/lock.png
new file mode 100644
index 0000000..94d1dbc
--- a/dev/null
+++ b/pics/security/lock.png
Binary files differ