summaryrefslogtreecommitdiff
path: root/noncore/securityplugins/pin
authorclem <clem>2004-06-15 13:49:36 (UTC)
committer clem <clem>2004-06-15 13:49:36 (UTC)
commit5431072f0ea1cbc8ca37914b6349e66079f1acff (patch) (side-by-side diff)
treeda335f89e506cde6ffe59a252b4ccab4e177809b /noncore/securityplugins/pin
parentba4722d0fed5527a5b799281caf6324f2e7ad5d8 (diff)
downloadopie-5431072f0ea1cbc8ca37914b6349e66079f1acff.zip
opie-5431072f0ea1cbc8ca37914b6349e66079f1acff.tar.gz
opie-5431072f0ea1cbc8ca37914b6349e66079f1acff.tar.bz2
First revision of securityplugins, called by libopiesecurity2 authentication framework (see http://dudu.dyn.2-h.org/nist/OMAF.php).
Diffstat (limited to 'noncore/securityplugins/pin') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/securityplugins/pin/.cvsignore4
-rw-r--r--noncore/securityplugins/pin/Makefile237
-rw-r--r--noncore/securityplugins/pin/config.in4
-rw-r--r--noncore/securityplugins/pin/pin.control12
-rw-r--r--noncore/securityplugins/pin/pin.cpp342
-rw-r--r--noncore/securityplugins/pin/pin.h68
-rw-r--r--noncore/securityplugins/pin/pinConfigWidget.cpp39
-rw-r--r--noncore/securityplugins/pin/pinConfigWidget.h51
-rw-r--r--noncore/securityplugins/pin/pinDialogBase.cpp304
-rw-r--r--noncore/securityplugins/pin/pinDialogBase.h47
-rw-r--r--noncore/securityplugins/pin/pinDialogBase.ui1258
-rw-r--r--noncore/securityplugins/pin/pinplugin.pro21
-rw-r--r--noncore/securityplugins/pin/pinpluginimpl.cpp28
-rw-r--r--noncore/securityplugins/pin/pinpluginimpl.h58
14 files changed, 2473 insertions, 0 deletions
diff --git a/noncore/securityplugins/pin/.cvsignore b/noncore/securityplugins/pin/.cvsignore
new file mode 100644
index 0000000..2fc28bd
--- a/dev/null
+++ b/noncore/securityplugins/pin/.cvsignore
@@ -0,0 +1,4 @@
+*.moc
+Makefile
+pinDialogBase.cpp
+pinDialogBase.h
diff --git a/noncore/securityplugins/pin/Makefile b/noncore/securityplugins/pin/Makefile
new file mode 100644
index 0000000..8c6a231
--- a/dev/null
+++ b/noncore/securityplugins/pin/Makefile
@@ -0,0 +1,237 @@
+#############################################################################
+# Makefile for building: libmultiauthpinplugin.so.0.0.2
+# Generated by qmake (1.05a) (Qt 3.1.2) on: Mon Jun 14 11:00:20 2004
+# Project: pinplugin.pro
+# Template: lib
+# Command: $(QMAKE) -o Makefile pinplugin.pro
+#############################################################################
+
+####### Compiler, tools and options
+
+CC = $(CCACHE) $(DISTCC) gcc
+CXX = $(CCACHE) $(DISTCC) g++
+LEX = flex
+YACC = yacc
+CFLAGS = -pipe $(CFLAGS_EXTRA) -Wall -W -g -fPIC -DQT_COMPONENT_DEBUG=2 -DQT_DEBUG -DOPIE_NO_BUILTIN_SHUTDOWN -DUSE_FILE_NOTIFICATION -DOPIE_SOUND_FRAGMENT_SHIFT=16
+CXXFLAGS = -pipe $(CFLAGS_EXTRA) -DQWS -fno-exceptions -fno-rtti $(CXXFLAGS_EXTRA) -Wall -W -g -fPIC -DQT_COMPONENT_DEBUG=2 -DQT_DEBUG -DOPIE_NO_BUILTIN_SHUTDOWN -DUSE_FILE_NOTIFICATION -DOPIE_SOUND_FRAGMENT_SHIFT=16
+LEXFLAGS =
+YACCFLAGS= -d
+INCPATH = -I/opt/opie/mkspecs/qws/linux-generic-g++ -I. -I$(OPIEDIR)/include -I$(QTDIR)/include -I.moc/$(PLATFORM)/
+LINK = g++
+LFLAGS = $(LFLAGS_EXTRA) -Wl,-rpath-link,$(OPIEDIR)/lib -shared -Wl,-soname,libmultiauthpinplugin.so.0 -Wl,-rpath,/opt/opie/plugins/security
+LIBS = $(SUBLIBS) -Wl,-rpath,$(QTDIR)/lib -L$(QTDIR)/lib $(LIBS_EXTRA) -lqpe -lopieui2 -L$(OPIEDIR)/lib -lqte
+AR = ar cqs
+RANLIB =
+MOC = $(QTDIR)/bin/moc
+UIC = $(QTDIR)/bin/uic
+QMAKE = qmake
+TAR = tar -cf
+GZIP = gzip -9f
+COPY = cp -f
+COPY_FILE= $(COPY) -p
+COPY_DIR = $(COPY) -pR
+DEL_FILE = rm -f
+SYMLINK = ln -sf
+DEL_DIR = rmdir
+MOVE = mv -f
+PRO = pinplugin.pro
+CHK_DIR_EXISTS=
+MKDIR =
+
+####### Output directory
+
+OBJECTS_DIR = .obj/$(PLATFORM)/
+
+####### Files
+
+HEADERS = pin.h \
+ pinpluginimpl.h \
+ pinConfigWidget.h
+SOURCES = pin.cpp \
+ pinpluginimpl.cpp \
+ pinConfigWidget.cpp
+OBJECTS = .obj/$(PLATFORM)/pin.o \
+ .obj/$(PLATFORM)/pinpluginimpl.o \
+ .obj/$(PLATFORM)/pinConfigWidget.o \
+ .obj/$(PLATFORM)/pinDialogBase.o
+FORMS = pinDialogBase.ui
+UICDECLS = pinDialogBase.h
+UICIMPLS = pinDialogBase.cpp
+SRCMOC = .moc/$(PLATFORM)/moc_pin.cpp \
+ .moc/$(PLATFORM)/moc_pinDialogBase.cpp \
+ .moc/$(PLATFORM)/pin.moc
+OBJMOC = .obj/$(PLATFORM)/moc_pin.o \
+ .obj/$(PLATFORM)/moc_pinDialogBase.o
+DIST = ../../../gen.pro \
+ ../../../include.pro \
+ pinplugin.pro
+QMAKE_TARGET = multiauthpinplugin
+DESTDIR = $(OPIEDIR)/plugins/security/
+TARGET = libmultiauthpinplugin.so.0.0.2
+TARGETA = $(OPIEDIR)/plugins/security/libmultiauthpinplugin.a
+TARGETD = libmultiauthpinplugin.so.0.0.2
+TARGET0 = libmultiauthpinplugin.so
+TARGET1 = libmultiauthpinplugin.so.0
+TARGET2 = libmultiauthpinplugin.so.0.0
+
+first: all
+####### Implicit rules
+
+.SUFFIXES: .c .cpp .cc .cxx .C
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+all: Makefile $(OPIEDIR)/plugins/security/$(TARGET)
+
+$(OPIEDIR)/plugins/security/$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ test -d $(OPIEDIR)/plugins/security/ || mkdir -p $(OPIEDIR)/plugins/security/
+ -$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2)
+ $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+ -ln -s $(TARGET) $(TARGET0)
+ -ln -s $(TARGET) $(TARGET1)
+ -ln -s $(TARGET) $(TARGET2)
+ -$(DEL_FILE) $(OPIEDIR)/plugins/security/$(TARGET)
+ -$(DEL_FILE) $(OPIEDIR)/plugins/security/$(TARGET0)
+ -$(DEL_FILE) $(OPIEDIR)/plugins/security/$(TARGET1)
+ -$(DEL_FILE) $(OPIEDIR)/plugins/security/$(TARGET2)
+ -$(MOVE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) $(OPIEDIR)/plugins/security/
+
+
+
+staticlib: $(TARGETA)
+
+$(TARGETA): $(UICDECLS) $(OBJECTS) $(OBJMOC)
+ -$(DEL_FILE) $(TARGETA)
+ $(AR) $(TARGETA) $(OBJECTS) $(OBJMOC)
+
+mocables: $(SRCMOC)
+
+$(MOC):
+ ( cd $(QTDIR)/src/moc ; $(MAKE) )
+
+Makefile: pinplugin.pro /opt/opie/mkspecs/qws/linux-generic-g++/qmake.conf ../../../gen.pro \
+ ../../../include.pro
+ $(QMAKE) -o Makefile pinplugin.pro
+qmake:
+ @$(QMAKE) -o Makefile pinplugin.pro
+
+dist:
+ @mkdir -p .obj/$(PLATFORM)/multiauthpinplugin && $(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) .obj/$(PLATFORM)/multiauthpinplugin/ && ( cd `dirname .obj/$(PLATFORM)/multiauthpinplugin` && $(TAR) multiauthpinplugin.tar multiauthpinplugin && $(GZIP) multiauthpinplugin.tar ) && $(MOVE) `dirname .obj/$(PLATFORM)/multiauthpinplugin`/multiauthpinplugin.tar.gz . && $(DEL_FILE) -r .obj/$(PLATFORM)/multiauthpinplugin
+
+mocclean:
+ -$(DEL_FILE) $(OBJMOC)
+ -$(DEL_FILE) $(SRCMOC)
+
+uiclean:
+ -$(DEL_FILE) $(UICIMPLS) $(UICDECLS)
+
+yaccclean:
+lexclean:
+clean: mocclean uiclean
+ -$(DEL_FILE) $(OBJECTS)
+ -$(DEL_FILE) *~ core *.core
+
+
+####### Sub-libraries
+
+distclean: clean
+ -$(DEL_FILE) $(OPIEDIR)/plugins/security/$(TARGET) $(TARGET)
+ -$(DEL_FILE) $(OPIEDIR)/plugins/security/$(TARGET0) $(OPIEDIR)/plugins/security/$(TARGET1) $(OPIEDIR)/plugins/security/$(TARGET2) $(TARGETA)
+
+
+lupdate:
+ lupdate -noobsolete $(PRO)
+
+lrelease:
+ lrelease $(PRO)
+
+ipk:
+ tmp=`mktemp -d /tmp/ipkg-opie.XXXXXXXXXX` && ( $(MAKE) INSTALL_ROOT="" install && ipkg-build ; rm -rf ; )
+
+opie-lupdate:
+ opie-lupdate $(PRO)
+
+opie-lrelease:
+ opie-lrelease $(PRO)
+
+messages:
+ xgettext -C -n -ktr -kQT_TRANSLATE_NOOP pin.h pinpluginimpl.h pinConfigWidget.h pin.cpp pinpluginimpl.cpp pinConfigWidget.cpp -o '$(OPIEDIR)/messages-$(QMAKE_TARGET)-tr.po' && xgettext -C -n -a pin.h pinpluginimpl.h pinConfigWidget.h pin.cpp pinpluginimpl.cpp pinConfigWidget.cpp -o '$(OPIEDIR)/messages-$(QMAKE_TARGET)-allstrings.po'
+
+FORCE:
+
+####### Compile
+
+.obj/$(PLATFORM)/pin.o: pin.cpp pin.h \
+ pinDialogBase.h \
+ pinConfigWidget.h \
+ .moc/$(PLATFORM)/pin.moc
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/$(PLATFORM)/pin.o pin.cpp
+
+.obj/$(PLATFORM)/pinpluginimpl.o: pinpluginimpl.cpp pinpluginimpl.h \
+ pin.h \
+ pinConfigWidget.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/$(PLATFORM)/pinpluginimpl.o pinpluginimpl.cpp
+
+.obj/$(PLATFORM)/pinConfigWidget.o: pinConfigWidget.cpp pinConfigWidget.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/$(PLATFORM)/pinConfigWidget.o pinConfigWidget.cpp
+
+pinDialogBase.h: pinDialogBase.ui
+ $(UIC) pinDialogBase.ui -o pinDialogBase.h
+
+pinDialogBase.cpp: pinDialogBase.h pinDialogBase.ui
+ $(UIC) pinDialogBase.ui -i pinDialogBase.h -o pinDialogBase.cpp
+
+.obj/$(PLATFORM)/pinDialogBase.o: pinDialogBase.cpp pinDialogBase.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/$(PLATFORM)/pinDialogBase.o pinDialogBase.cpp
+
+.obj/$(PLATFORM)/moc_pin.o: .moc/$(PLATFORM)/moc_pin.cpp pin.h pinConfigWidget.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/$(PLATFORM)/moc_pin.o .moc/$(PLATFORM)/moc_pin.cpp
+
+.obj/$(PLATFORM)/moc_pinDialogBase.o: .moc/$(PLATFORM)/moc_pinDialogBase.cpp pinDialogBase.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o .obj/$(PLATFORM)/moc_pinDialogBase.o .moc/$(PLATFORM)/moc_pinDialogBase.cpp
+
+.moc/x86-linux/moc_pin.cpp: $(MOC) pin.h
+ $(MOC) pin.h -o .moc/x86-linux/moc_pin.cpp
+
+.moc/x86-linux/pin.moc: $(MOC) pin.cpp
+ $(MOC) pin.cpp -o .moc/x86-linux/pin.moc
+
+.moc/x86-linux/moc_pinDialogBase.cpp: $(MOC) pinDialogBase.h
+ $(MOC) pinDialogBase.h -o .moc/x86-linux/moc_pinDialogBase.cpp
+
+####### Install
+
+install_target:
+ @$(CHK_DIR_EXISTS) "$(INSTALL_ROOT)$(OPIEDIR)/lib/" || $(MKDIR) "$(INSTALL_ROOT)$(OPIEDIR)/lib/"
+ -$(COPY) "$(OPIEDIR)/plugins/security/$(TARGET)" "$(INSTALL_ROOT)$(OPIEDIR)/lib/$(TARGET)"
+ -$(SYMLINK) "$(TARGET)" "$(INSTALL_ROOT)$(OPIEDIR)/lib/$(TARGET0)"
+ -$(SYMLINK) "$(TARGET)" "$(INSTALL_ROOT)$(OPIEDIR)/lib/$(TARGET1)"
+ -$(SYMLINK) "$(TARGET)" "$(INSTALL_ROOT)$(OPIEDIR)/lib/$(TARGET2)"
+
+uninstall_target:
+ -$(DEL_FILE) "$(INSTALL_ROOT)$(OPIEDIR)/lib/$(TARGET)"
+ -$(DEL_FILE) "$(INSTALL_ROOT)$(OPIEDIR)/lib/$(TARGET0)"
+ -$(DEL_FILE) "$(INSTALL_ROOT)$(OPIEDIR)/lib/$(TARGET1)"
+ -$(DEL_FILE) "$(INSTALL_ROOT)$(OPIEDIR)/lib/$(TARGET2)"
+ -$(DEL_DIR) "$(INSTALL_ROOT)$(OPIEDIR)/lib/"
+
+
+install: all install_target
+
+uninstall: uninstall_target
+
diff --git a/noncore/securityplugins/pin/config.in b/noncore/securityplugins/pin/config.in
new file mode 100644
index 0000000..d255038
--- a/dev/null
+++ b/noncore/securityplugins/pin/config.in
@@ -0,0 +1,4 @@
+ config MULTIAUTH_PIN
+ boolean "opie-multiauth-pin (PIN authentication plugin for opie-multiauth)"
+ default "y"
+ depends SECURITY
diff --git a/noncore/securityplugins/pin/pin.control b/noncore/securityplugins/pin/pin.control
new file mode 100644
index 0000000..158e20d
--- a/dev/null
+++ b/noncore/securityplugins/pin/pin.control
@@ -0,0 +1,12 @@
+Package: opie-multiauth-pinplugin
+Files: plugins/security/libmultiauthpinplugin.so* pics/security/pinplugin.png
+Priority: optional
+Section: opie/settings
+Maintainer: Clement Seveillac <clement@nist.gov>
+Architecture: arm
+Version: 0.0.2.6
+Depends: opie-security
+Description: PIN plugin for opie-security authentication.
+ It implements the same kind of widgets as opie-security package,
+ but this implementation can be used along with other authentication
+ methods in the Opie Multi-Authentication Framework.
diff --git a/noncore/securityplugins/pin/pin.cpp b/noncore/securityplugins/pin/pin.cpp
new file mode 100644
index 0000000..37dc5be
--- a/dev/null
+++ b/noncore/securityplugins/pin/pin.cpp
@@ -0,0 +1,342 @@
+/**
+ * \note Taken from opie-security and libqpe password.cpp, and modified for Opie multiauth by Clement Seveillac
+ */
+/**********************************************************************
+ ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
+ **
+ ** This file is part of the Qtopia Environment.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.trolltech.com/gpl/ for GPL licensing information.
+ **
+ ** Contact info@trolltech.com if any conditions of this licensing are
+ ** not clear to you.
+ **
+ **********************************************************************/
+
+#include "pin.h"
+#include "pinDialogBase.h"
+#include "pinConfigWidget.h"
+/* OPIE */
+#include <opie2/odebug.h>
+#include <opie2/oapplication.h>
+/* QT */
+#include <qpe/config.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qtextview.h>
+#include <qstring.h>
+#include <qdialog.h>
+/* UNIX */
+#include <unistd.h>
+#include <stdlib.h>
+#include <time.h>
+
+extern "C" char *crypt(const char *key, const char *salt);
+
+/// set to TRUE when we press the 'Skip' button
+bool isSkip = FALSE;
+
+/// PIN input graphical widget.
+/**
+ * Inherits the PinDialogBase class defined originally in pinDialogBase.ui interface file.
+ * \sa PinDlg and PinDialog (the class generated from the .ui file)
+ * It comes from the original PIN locking code in Opie :
+ * \sa http://dudu.dyn.2-h.org/opiedoxydoc/library_2password_8cpp-source.html
+ */
+class PinDialog : public PinDialogBase
+{
+ Q_OBJECT
+
+ public:
+ PinDialog( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~PinDialog();
+
+ void clear();
+ void setPrompt( const QString& );
+
+signals:
+ /// emitted when we press the Enter button
+ void passwordEntered( const QString& );
+ /// emitted when we press the Skip button
+ void skip();
+
+ protected:
+ bool eventFilter( QObject*, QEvent* );
+
+ private:
+ void input( QString );
+ friend class PinPlugin;
+ QString text;
+};
+
+
+/// Constructs a PinDialog widget, and initializes things
+PinDialog::PinDialog( QWidget* parent, const char* name, WFlags fl )
+ : PinDialogBase( parent, name, fl )
+{
+ QRect desk = oApp->desktop()->geometry();
+
+ if ( desk.width() < 220 ) {
+ QFont f( font() );
+ f.setPointSize( 18 );
+ setFont( f );
+ f.setPointSize( 12 );
+ prompt->setFont( f );
+ }
+
+ button_0->installEventFilter( this );
+ button_1->installEventFilter( this );
+ button_2->installEventFilter( this );
+ button_3->installEventFilter( this );
+ button_4->installEventFilter( this );
+ button_5->installEventFilter( this );
+ button_6->installEventFilter( this );
+ button_7->installEventFilter( this );
+ button_8->installEventFilter( this );
+ button_9->installEventFilter( this );
+ button_Skip->installEventFilter( this );
+ button_OK->installEventFilter( this );
+ setFocus();
+}
+
+/// nothing to do
+PinDialog::~PinDialog()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/// Record the pressed numbers, and the Skip and Enter commands
+bool PinDialog::eventFilter( QObject*o, QEvent*e )
+{
+ if ( e->type() == QEvent::MouseButtonRelease ) {
+ if ( o == button_OK ) {
+ emit passwordEntered( text );
+ }
+ else if ( o == button_Skip ) {
+ isSkip = TRUE;
+ emit skip();
+ }
+ else {
+ QLabel *l = (QLabel*)o;
+ input(l->text());
+ }
+ }
+ return FALSE;
+}
+
+void PinDialog::input( QString c )
+{
+ text += c;
+ display->setText( text );
+}
+
+void PinDialog::setPrompt( const QString& s )
+{
+ prompt->setText( s );
+}
+
+void PinDialog::clear()
+{
+ text = "";
+ input("");
+}
+
+/// PIN dialog
+/**
+ * Dialog containing the PinDialog widget (which asks for a PIN) and interfacing with its I/O.
+ * \sa PinDialog
+ */
+class PinDlg : public QDialog
+{
+ public:
+ PinDlg( QWidget *parent, const char * name, bool modal, bool fullscreen = FALSE )
+ : QDialog( parent, name, modal, fullscreen ? WStyle_NoBorder | WStyle_Customize | WStyle_StaysOnTop : 0 ),
+ modl(modal)
+ {
+ pinD = new PinDialog( this );
+
+ if ( fullscreen ) {
+ QRect desk = oApp->desktop()->geometry();
+ setGeometry( 0, 0, desk.width(), desk.height() );
+ }
+
+ connect( pinD, SIGNAL(passwordEntered(const QString&)),
+ this, SLOT(accept()) );
+ connect( pinD, SIGNAL(skip()), this, SLOT(accept()) );
+ }
+
+ void resizeEvent( QResizeEvent * )
+ {
+ pinD->resize( size() );
+ }
+
+ void reset()
+ {
+ pinD->clear();
+ }
+
+ /// Slot receiving the Skip or Enter commands, and closing the QDialog
+ void accept()
+ {
+ if ( !modl )
+ oApp->exit_loop();
+ QDialog::accept();
+ }
+
+ PinDialog *pinD;
+ bool modl;
+};
+
+/// generate a fairly random salt and return the PIN hashed by crypt()
+QString PinPlugin::encrypt(const QString& pin)
+{
+ // the salt must begin by "$1$" if we want crypt() to use MD5
+ char salt[] = "$1$........";
+ const char *const seedchars = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+ // initialize the random generator
+ srandom(time(0));
+ int i;
+ for(i = 0; i < 8; i++)
+ {
+ // initialize the salt with random()
+ salt[i+3] = seedchars[random() % 64];
+ }
+ return QString::fromLatin1(crypt(pin.latin1(),salt));
+}
+
+/// verify a PIN against its crypt() hash
+/**
+ * \return true if the \a pin matches its \a hash
+ */
+bool PinPlugin::verify(const QString& pin, const QString& hash)
+{
+ // the hash, which contains the salt (8 chars after "$1$"), can be given as the salt
+ return hash.compare( QString::fromLatin1(crypt( pin.latin1(), hash.latin1() )) ) == 0 ? true : false;
+}
+
+/// Displays a PinDialog and returns the typed in PIN
+/**
+ * The returned value is QString::null if the user cancels the operation,
+ * or the empty string if the user enters no password (but confirms the
+ * dialog).
+ */
+QString PinPlugin::getPIN( const QString& prompt )
+{
+ PinDlg pd(0,0,TRUE);
+ pd.pinD->setPrompt( prompt );
+
+ pd.showMaximized();
+ int r = pd.exec();
+
+ if ( r == QDialog::Accepted ) {
+ if (pd.pinD->text.isEmpty())
+ return "";
+ else
+ return pd.pinD->text;
+ }
+ else
+ return QString::null;
+}
+
+/// Displays the PIN dialog and returns a hash of the typed in PIN
+/**
+ * \return the hashed ( =one-way encrypted) PIN typed in by the user
+ * \param prompt the prompt to display in the PinDialog
+ */
+QString PinPlugin::getCryptedPIN( const QString& prompt )
+{
+ return encrypt(getPIN(prompt));
+}
+
+/// Displays the PIN dialog, asks 2 times for a new PIN, saves it if entered two times
+/**
+ * writes nothing if we enter nothing the first time
+ */
+void PinPlugin::changePIN()
+{
+ QString new1, new2;
+ do {
+ new1 = getPIN(QObject::tr("Enter new PIN"));
+ if ( new1.isNull() )
+ return;
+ new2 = getPIN(QObject::tr("Re-enter new PIN"));
+ } while (new1 != new2);
+
+ odebug << "writing new PIN hash in Security.conf" << oendl;
+ Config cfg("Security");
+ cfg.setGroup("PinPlugin");
+ cfg.writeEntry("hashedPIN", encrypt(new1));
+}
+
+/// Removes the PIN hashed value in the config file
+void PinPlugin::clearPIN()
+{
+ Config cfg("Security");
+ cfg.setGroup("PinPlugin");
+ cfg.removeEntry("hashedPIN");
+}
+
+/// Prompt, fullscreen, for the user's PIN and compare it to the stored one.
+/**
+ * \return the result code, as a MultiauthPluginObject::authResult object
+ */
+int PinPlugin::authenticate()
+{
+ // reset skip (if we ran Pin two times in a row, skipping the first time, it must be put to 0 again)
+ isSkip = FALSE;
+ // fetch value in config
+ Config cfg("Security");
+ cfg.setGroup("PinPlugin");
+ QString hashedPin = cfg.readEntry("hashedPIN");
+ if (!hashedPin.isEmpty())
+ {
+ // prompt for the PIN in a fullscreen modal dialog
+ PinDlg pd(0,0,TRUE,TRUE);
+ pd.reset();
+ pd.exec();
+
+ // analyse the result
+ if (isSkip == TRUE)
+ return MultiauthPluginObject::Skip;
+ else if (verify(pd.pinD->text, hashedPin))
+ return MultiauthPluginObject::Success;
+ else
+ return MultiauthPluginObject::Failure;
+ }
+ owarn << "No PIN has been defined! We consider it as a successful authentication though." << oendl;
+ return MultiauthPluginObject::Success;
+}
+
+/// Simply returns the plugin name (PIN plugin)
+QString PinPlugin::pluginName() const {
+ return "PIN Plugin";
+}
+
+QString PinPlugin::pixmapNameWidget() const {
+ return "security/pinplugin";
+}
+
+QString PinPlugin::pixmapNameConfig() const {
+ return "security/pinplugin";
+}
+
+/// returns a PinConfigWidget
+MultiauthConfigWidget * PinPlugin::configWidget(QWidget * parent) {
+ PinConfigWidget * pinw = new PinConfigWidget(parent, "PIN configuration widget");
+
+ connect(pinw->changePIN, SIGNAL( clicked() ), this, SLOT( changePIN() ));
+ connect(pinw->clearPIN, SIGNAL( clicked() ), this, SLOT( clearPIN() ));
+
+ return pinw;
+}
+
+#include "pin.moc"
+
diff --git a/noncore/securityplugins/pin/pin.h b/noncore/securityplugins/pin/pin.h
new file mode 100644
index 0000000..6cd328a
--- a/dev/null
+++ b/noncore/securityplugins/pin/pin.h
@@ -0,0 +1,68 @@
+/**
+ * \file pin.h
+ * \brief Standard Opie multiauth plugin definition
+ * \author Clément Séveillac (clement . seveillac (at) via . ecp . fr)
+ */
+/*
+ =. This file is part of the Opie Project
+ .=l. Copyright (C) 2004 Opie Developer Team <opie-devel@handhelds.org>
+ .>+-=
+ _;:, .> :=|. This library is free software; you can
+.> <`_, > . <= redistribute it and/or modify it under
+:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
+.="- .-=="i, .._ License as published by the Free Software
+ - . .-<_> .<> Foundation; either version 2 of the License,
+ ._= =} : or (at your option) any later version.
+ .%`+i> _;_.
+ .i_,=:_. -<s. This library is distributed in the hope that
+ + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
+ : .. .:, . . . without even the implied warranty of
+ =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
+ _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.= = ; Library General Public License for more
+++= -. .` .: details.
+ : = ...= . :.=-
+ -. .:....=;==+<; You should have received a copy of the GNU
+ -_. . . )=. = Library General Public License along with
+ -- :-=` this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef PIN_H
+#define PIN_H
+
+#include <qobject.h>
+#include <qstring.h>
+#include <opie2/multiauthplugininterface.h>
+#include "pinConfigWidget.h"
+
+/// Multi-authentication plugin, implementing a PIN verification.
+/**
+ * The plugin itself, implementing the main authenticate() function.
+ */
+class PinPlugin : public QObject, public MultiauthPluginObject {
+
+ Q_OBJECT
+
+public:
+ int authenticate();
+ MultiauthConfigWidget * configWidget(QWidget * parent);
+ QString pixmapNameConfig() const;
+ QString pixmapNameWidget() const;
+ QString pluginName() const;
+
+private slots:
+ QString getPIN( const QString& prompt );
+ QString getCryptedPIN( const QString& prompt );
+ void changePIN();
+ void clearPIN();
+
+private:
+ QString encrypt(const QString& pin);
+ bool verify(const QString& pin, const QString& hash);
+};
+
+#endif // PIN_H
diff --git a/noncore/securityplugins/pin/pinConfigWidget.cpp b/noncore/securityplugins/pin/pinConfigWidget.cpp
new file mode 100644
index 0000000..53e1a20
--- a/dev/null
+++ b/noncore/securityplugins/pin/pinConfigWidget.cpp
@@ -0,0 +1,39 @@
+#include <qwidget.h>
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qgroupbox.h>
+
+#include "pinConfigWidget.h"
+
+PinConfigWidget::PinConfigWidget(QWidget* parent = 0, const char* name = "PIN configuration widget")
+ : MultiauthConfigWidget(parent, name)
+{
+ QVBoxLayout * baseLayout = new QVBoxLayout( this);
+ baseLayout->setSpacing(11);
+ baseLayout->setMargin(11);
+ baseLayout->setAlignment( Qt::AlignTop );
+
+ QGroupBox * configBox = new QGroupBox(0, Qt::Vertical, tr("Configure your PIN here"), this);
+ baseLayout->addWidget(configBox);
+ QVBoxLayout *boxLayout = new QVBoxLayout( configBox->layout() );
+
+ QLabel * description = new QLabel("<p>" + tr("PIN protection provides a minimal level of protection from casual access to this device.") + "</p>", configBox);
+ boxLayout->addWidget(description);
+
+ QHBoxLayout * buttonLayout = new QHBoxLayout();
+ buttonLayout->setSpacing(6);
+ changePIN = new QPushButton( tr("Change PIN"), configBox, "changePIN" );
+ clearPIN = new QPushButton( tr("Clear PIN"), configBox, "clearPIN" );
+ buttonLayout->addWidget(changePIN);
+ buttonLayout->addWidget(clearPIN);
+ boxLayout->addLayout(buttonLayout);
+
+}
+
+/// nothing to do
+PinConfigWidget::~PinConfigWidget()
+{}
+
+/// does nothing since the config file update is already done in changePIN or clearPIN
+void PinConfigWidget::writeConfig()
+{}
diff --git a/noncore/securityplugins/pin/pinConfigWidget.h b/noncore/securityplugins/pin/pinConfigWidget.h
new file mode 100644
index 0000000..3242ad0
--- a/dev/null
+++ b/noncore/securityplugins/pin/pinConfigWidget.h
@@ -0,0 +1,51 @@
+/**
+ * \file pinConfigWidget.h
+ * \brief PIN plugin configuration widget
+ * \author Clément Séveillac (clement . seveillac (at) via . ecp . fr)
+ */
+/*
+ =. This file is part of the Opie Project
+ .=l. Copyright (C) 2004 Opie Developer Team <opie-devel@handhelds.org>
+ .>+-=
+ _;:, .> :=|. This library is free software; you can
+.> <`_, > . <= redistribute it and/or modify it under
+:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
+.="- .-=="i, .._ License as published by the Free Software
+ - . .-<_> .<> Foundation; either version 2 of the License,
+ ._= =} : or (at your option) any later version.
+ .%`+i> _;_.
+ .i_,=:_. -<s. This library is distributed in the hope that
+ + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
+ : .. .:, . . . without even the implied warranty of
+ =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
+ _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.= = ; Library General Public License for more
+++= -. .` .: details.
+ : = ...= . :.=-
+ -. .:....=;==+<; You should have received a copy of the GNU
+ -_. . . )=. = Library General Public License along with
+ -- :-=` this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef PINCONFIGWIDGET_H
+#define PINCONFIGWIDGET_H
+#include <qpushbutton.h>
+
+#include <opie2/multiauthconfigwidget.h>
+
+class PinConfigWidget : public MultiauthConfigWidget {
+public:
+ PinConfigWidget(QWidget* parent, const char* name);
+ virtual ~PinConfigWidget();
+ virtual void writeConfig();
+///\todo to protect?
+ QPushButton *changePIN;
+ QPushButton *clearPIN;
+
+};
+
+#endif // PINCONFIGWIDGET_H
diff --git a/noncore/securityplugins/pin/pinDialogBase.cpp b/noncore/securityplugins/pin/pinDialogBase.cpp
new file mode 100644
index 0000000..244a75e
--- a/dev/null
+++ b/noncore/securityplugins/pin/pinDialogBase.cpp
@@ -0,0 +1,304 @@
+/****************************************************************************
+** Form implementation generated from reading ui file 'pinDialogBase.ui'
+**
+** Created: Mon Jun 14 11:01:08 2004
+** by: The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#include "pinDialogBase.h"
+
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qlayout.h>
+#include <qvariant.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+/*
+ * Constructs a PinDialogBase which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'
+ */
+PinDialogBase::PinDialogBase( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ if ( !name )
+ setName( "PinDialogBase" );
+ resize( 231, 293 );
+ QFont f( font() );
+ f.setPointSize( 24 );
+ setFont( f );
+ setCaption( tr( "PinDialogBase" ) );
+
+ button_4 = new QLabel( this, "button_4" );
+ button_4->setGeometry( QRect( 11, 138, 68, 44 ) );
+ button_4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, button_4->sizePolicy().hasHeightForWidth() ) );
+ button_4->setFrameShape( QLabel::Box );
+ button_4->setFrameShadow( QLabel::Raised );
+ button_4->setText( tr( "4" ) );
+ button_4->setAlignment( int( QLabel::AlignCenter ) );
+
+ button_7 = new QLabel( this, "button_7" );
+ button_7->setGeometry( QRect( 11, 188, 68, 44 ) );
+ button_7->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, button_7->sizePolicy().hasHeightForWidth() ) );
+ button_7->setFrameShape( QLabel::Box );
+ button_7->setFrameShadow( QLabel::Raised );
+ button_7->setText( tr( "7" ) );
+ button_7->setAlignment( int( QLabel::AlignCenter ) );
+
+ prompt = new QLabel( this, "prompt" );
+ prompt->setGeometry( QRect( 11, 11, 217, 25 ) );
+ QFont prompt_font( prompt->font() );
+ prompt_font.setPointSize( 18 );
+ prompt->setFont( prompt_font );
+ prompt->setText( tr( "Enter your PIN" ) );
+
+ display = new QLineEdit( this, "display" );
+ display->setEnabled( FALSE );
+ display->setGeometry( QRect( 11, 42, 217, 40 ) );
+ QPalette pal;
+ QColorGroup cg;
+ cg.setColor( QColorGroup::Foreground, black );
+ cg.setColor( QColorGroup::Button, QColor( 228, 228, 228) );
+ cg.setColor( QColorGroup::Light, white );
+ cg.setColor( QColorGroup::Midlight, QColor( 242, 242, 242) );
+ cg.setColor( QColorGroup::Dark, QColor( 78, 78, 78) );
+ cg.setColor( QColorGroup::Mid, QColor( 183, 183, 183) );
+ cg.setColor( QColorGroup::Text, black );
+ cg.setColor( QColorGroup::BrightText, white );
+ cg.setColor( QColorGroup::ButtonText, black );
+ cg.setColor( QColorGroup::Base, white );
+ cg.setColor( QColorGroup::Background, QColor( 220, 220, 220) );
+ cg.setColor( QColorGroup::Shadow, black );
+ cg.setColor( QColorGroup::Highlight, QColor( 10, 95, 137) );
+ cg.setColor( QColorGroup::HighlightedText, white );
+ pal.setActive( cg );
+ cg.setColor( QColorGroup::Foreground, black );
+ cg.setColor( QColorGroup::Button, QColor( 228, 228, 228) );
+ cg.setColor( QColorGroup::Light, white );
+ cg.setColor( QColorGroup::Midlight, QColor( 242, 242, 242) );
+ cg.setColor( QColorGroup::Dark, QColor( 78, 78, 78) );
+ cg.setColor( QColorGroup::Mid, QColor( 183, 183, 183) );
+ cg.setColor( QColorGroup::Text, black );
+ cg.setColor( QColorGroup::BrightText, white );
+ cg.setColor( QColorGroup::ButtonText, black );
+ cg.setColor( QColorGroup::Base, white );
+ cg.setColor( QColorGroup::Background, QColor( 220, 220, 220) );
+ cg.setColor( QColorGroup::Shadow, black );
+ cg.setColor( QColorGroup::Highlight, QColor( 10, 95, 137) );
+ cg.setColor( QColorGroup::HighlightedText, white );
+ pal.setInactive( cg );
+ cg.setColor( QColorGroup::Foreground, QColor( 128, 128, 128) );
+ cg.setColor( QColorGroup::Button, QColor( 228, 228, 228) );
+ cg.setColor( QColorGroup::Light, white );
+ cg.setColor( QColorGroup::Midlight, white );
+ cg.setColor( QColorGroup::Dark, QColor( 114, 114, 114) );
+ cg.setColor( QColorGroup::Mid, QColor( 152, 152, 152) );
+ cg.setColor( QColorGroup::Text, black );
+ cg.setColor( QColorGroup::BrightText, white );
+ cg.setColor( QColorGroup::ButtonText, black );
+ cg.setColor( QColorGroup::Base, white );
+ cg.setColor( QColorGroup::Background, QColor( 220, 220, 220) );
+ cg.setColor( QColorGroup::Shadow, black );
+ cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) );
+ cg.setColor( QColorGroup::HighlightedText, white );
+ pal.setDisabled( cg );
+ display->setPalette( pal );
+ display->setEchoMode( QLineEdit::Password );
+
+ button_1 = new QLabel( this, "button_1" );
+ button_1->setGeometry( QRect( 11, 88, 68, 44 ) );
+ button_1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, button_1->sizePolicy().hasHeightForWidth() ) );
+ button_1->setFrameShape( QLabel::Box );
+ button_1->setFrameShadow( QLabel::Raised );
+ button_1->setText( tr( "1" ) );
+ button_1->setAlignment( int( QLabel::AlignCenter ) );
+
+ button_2 = new QLabel( this, "button_2" );
+ button_2->setGeometry( QRect( 85, 88, 69, 44 ) );
+ button_2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, button_2->sizePolicy().hasHeightForWidth() ) );
+ button_2->setFrameShape( QLabel::Box );
+ button_2->setFrameShadow( QLabel::Raised );
+ button_2->setText( tr( "2" ) );
+ button_2->setAlignment( int( QLabel::AlignCenter ) );
+
+ button_5 = new QLabel( this, "button_5" );
+ button_5->setGeometry( QRect( 85, 138, 69, 44 ) );
+ button_5->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, button_5->sizePolicy().hasHeightForWidth() ) );
+ button_5->setFrameShape( QLabel::Box );
+ button_5->setFrameShadow( QLabel::Raised );
+ button_5->setText( tr( "5" ) );
+ button_5->setAlignment( int( QLabel::AlignCenter ) );
+
+ button_6 = new QLabel( this, "button_6" );
+ button_6->setGeometry( QRect( 160, 138, 68, 44 ) );
+ button_6->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, button_6->sizePolicy().hasHeightForWidth() ) );
+ button_6->setFrameShape( QLabel::Box );
+ button_6->setFrameShadow( QLabel::Raised );
+ button_6->setText( tr( "6" ) );
+ button_6->setAlignment( int( QLabel::AlignCenter ) );
+
+ button_3 = new QLabel( this, "button_3" );
+ button_3->setGeometry( QRect( 160, 88, 68, 44 ) );
+ button_3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, button_3->sizePolicy().hasHeightForWidth() ) );
+ button_3->setFrameShape( QLabel::Box );
+ button_3->setFrameShadow( QLabel::Raised );
+ button_3->setText( tr( "3" ) );
+ button_3->setAlignment( int( QLabel::AlignCenter ) );
+
+ button_0 = new QLabel( this, "button_0" );
+ button_0->setGeometry( QRect( 11, 238, 68, 44 ) );
+ button_0->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, button_0->sizePolicy().hasHeightForWidth() ) );
+ button_0->setFrameShape( QLabel::Box );
+ button_0->setFrameShadow( QLabel::Raised );
+ button_0->setText( tr( "0" ) );
+ button_0->setAlignment( int( QLabel::AlignCenter ) );
+
+ button_8 = new QLabel( this, "button_8" );
+ button_8->setGeometry( QRect( 85, 188, 69, 44 ) );
+ button_8->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, button_8->sizePolicy().hasHeightForWidth() ) );
+ button_8->setFrameShape( QLabel::Box );
+ button_8->setFrameShadow( QLabel::Raised );
+ button_8->setText( tr( "8" ) );
+ button_8->setAlignment( int( QLabel::AlignCenter ) );
+
+ button_9 = new QLabel( this, "button_9" );
+ button_9->setGeometry( QRect( 160, 188, 68, 44 ) );
+ button_9->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, button_9->sizePolicy().hasHeightForWidth() ) );
+ button_9->setFrameShape( QLabel::Box );
+ button_9->setFrameShadow( QLabel::Raised );
+ button_9->setText( tr( "9" ) );
+ button_9->setAlignment( int( QLabel::AlignCenter ) );
+
+ button_OK = new QLabel( this, "button_OK" );
+ button_OK->setGeometry( QRect( 160, 238, 68, 44 ) );
+ button_OK->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, button_OK->sizePolicy().hasHeightForWidth() ) );
+ cg.setColor( QColorGroup::Foreground, black );
+ cg.setColor( QColorGroup::Button, QColor( 192, 192, 192) );
+ cg.setColor( QColorGroup::Light, white );
+ cg.setColor( QColorGroup::Midlight, QColor( 223, 223, 223) );
+ cg.setColor( QColorGroup::Dark, QColor( 96, 96, 96) );
+ cg.setColor( QColorGroup::Mid, QColor( 128, 128, 128) );
+ cg.setColor( QColorGroup::Text, black );
+ cg.setColor( QColorGroup::BrightText, white );
+ cg.setColor( QColorGroup::ButtonText, black );
+ cg.setColor( QColorGroup::Base, white );
+ cg.setColor( QColorGroup::Background, QColor( 0, 170, 0) );
+ cg.setColor( QColorGroup::Shadow, black );
+ cg.setColor( QColorGroup::Highlight, black );
+ cg.setColor( QColorGroup::HighlightedText, white );
+ pal.setActive( cg );
+ cg.setColor( QColorGroup::Foreground, black );
+ cg.setColor( QColorGroup::Button, QColor( 192, 192, 192) );
+ cg.setColor( QColorGroup::Light, white );
+ cg.setColor( QColorGroup::Midlight, QColor( 220, 220, 220) );
+ cg.setColor( QColorGroup::Dark, QColor( 96, 96, 96) );
+ cg.setColor( QColorGroup::Mid, QColor( 128, 128, 128) );
+ cg.setColor( QColorGroup::Text, black );
+ cg.setColor( QColorGroup::BrightText, white );
+ cg.setColor( QColorGroup::ButtonText, black );
+ cg.setColor( QColorGroup::Base, white );
+ cg.setColor( QColorGroup::Background, QColor( 0, 170, 0) );
+ cg.setColor( QColorGroup::Shadow, black );
+ cg.setColor( QColorGroup::Highlight, black );
+ cg.setColor( QColorGroup::HighlightedText, white );
+ pal.setInactive( cg );
+ cg.setColor( QColorGroup::Foreground, QColor( 128, 128, 128) );
+ cg.setColor( QColorGroup::Button, QColor( 192, 192, 192) );
+ cg.setColor( QColorGroup::Light, white );
+ cg.setColor( QColorGroup::Midlight, QColor( 220, 220, 220) );
+ cg.setColor( QColorGroup::Dark, QColor( 96, 96, 96) );
+ cg.setColor( QColorGroup::Mid, QColor( 128, 128, 128) );
+ cg.setColor( QColorGroup::Text, black );
+ cg.setColor( QColorGroup::BrightText, white );
+ cg.setColor( QColorGroup::ButtonText, QColor( 128, 128, 128) );
+ cg.setColor( QColorGroup::Base, white );
+ cg.setColor( QColorGroup::Background, QColor( 0, 170, 0) );
+ cg.setColor( QColorGroup::Shadow, black );
+ cg.setColor( QColorGroup::Highlight, black );
+ cg.setColor( QColorGroup::HighlightedText, white );
+ pal.setDisabled( cg );
+ button_OK->setPalette( pal );
+ button_OK->setFrameShape( QLabel::Box );
+ button_OK->setFrameShadow( QLabel::Raised );
+ button_OK->setText( tr( "Enter" ) );
+ button_OK->setAlignment( int( QLabel::AlignCenter ) );
+
+ button_Skip = new QLabel( this, "button_Skip" );
+ button_Skip->setGeometry( QRect( 85, 238, 69, 44 ) );
+ button_Skip->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, button_Skip->sizePolicy().hasHeightForWidth() ) );
+ cg.setColor( QColorGroup::Foreground, black );
+ cg.setColor( QColorGroup::Button, QColor( 192, 192, 192) );
+ cg.setColor( QColorGroup::Light, white );
+ cg.setColor( QColorGroup::Midlight, QColor( 223, 223, 223) );
+ cg.setColor( QColorGroup::Dark, QColor( 96, 96, 96) );
+ cg.setColor( QColorGroup::Mid, QColor( 128, 128, 128) );
+ cg.setColor( QColorGroup::Text, black );
+ cg.setColor( QColorGroup::BrightText, white );
+ cg.setColor( QColorGroup::ButtonText, black );
+ cg.setColor( QColorGroup::Base, white );
+ cg.setColor( QColorGroup::Background, QColor( 255, 255, 127) );
+ cg.setColor( QColorGroup::Shadow, black );
+ cg.setColor( QColorGroup::Highlight, black );
+ cg.setColor( QColorGroup::HighlightedText, white );
+ pal.setActive( cg );
+ cg.setColor( QColorGroup::Foreground, black );
+ cg.setColor( QColorGroup::Button, QColor( 192, 192, 192) );
+ cg.setColor( QColorGroup::Light, white );
+ cg.setColor( QColorGroup::Midlight, QColor( 220, 220, 220) );
+ cg.setColor( QColorGroup::Dark, QColor( 96, 96, 96) );
+ cg.setColor( QColorGroup::Mid, QColor( 128, 128, 128) );
+ cg.setColor( QColorGroup::Text, black );
+ cg.setColor( QColorGroup::BrightText, white );
+ cg.setColor( QColorGroup::ButtonText, black );
+ cg.setColor( QColorGroup::Base, white );
+ cg.setColor( QColorGroup::Background, QColor( 255, 255, 127) );
+ cg.setColor( QColorGroup::Shadow, black );
+ cg.setColor( QColorGroup::Highlight, black );
+ cg.setColor( QColorGroup::HighlightedText, white );
+ pal.setInactive( cg );
+ cg.setColor( QColorGroup::Foreground, QColor( 128, 128, 128) );
+ cg.setColor( QColorGroup::Button, QColor( 192, 192, 192) );
+ cg.setColor( QColorGroup::Light, white );
+ cg.setColor( QColorGroup::Midlight, QColor( 220, 220, 220) );
+ cg.setColor( QColorGroup::Dark, QColor( 96, 96, 96) );
+ cg.setColor( QColorGroup::Mid, QColor( 128, 128, 128) );
+ cg.setColor( QColorGroup::Text, black );
+ cg.setColor( QColorGroup::BrightText, white );
+ cg.setColor( QColorGroup::ButtonText, QColor( 128, 128, 128) );
+ cg.setColor( QColorGroup::Base, white );
+ cg.setColor( QColorGroup::Background, QColor( 255, 255, 127) );
+ cg.setColor( QColorGroup::Shadow, black );
+ cg.setColor( QColorGroup::Highlight, black );
+ cg.setColor( QColorGroup::HighlightedText, white );
+ pal.setDisabled( cg );
+ button_Skip->setPalette( pal );
+ button_Skip->setFrameShape( QLabel::Box );
+ button_Skip->setFrameShadow( QLabel::Raised );
+ button_Skip->setText( tr( "Skip" ) );
+ button_Skip->setAlignment( int( QLabel::AlignCenter ) );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+PinDialogBase::~PinDialogBase()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Main event handler. Reimplemented to handle application
+ * font changes
+ */
+bool PinDialogBase::event( QEvent* ev )
+{
+ bool ret = QWidget::event( ev );
+ if ( ev->type() == QEvent::ApplicationFontChange ) {
+ QFont prompt_font( prompt->font() );
+ prompt_font.setPointSize( 18 );
+ prompt->setFont( prompt_font );
+ }
+ return ret;
+}
+
diff --git a/noncore/securityplugins/pin/pinDialogBase.h b/noncore/securityplugins/pin/pinDialogBase.h
new file mode 100644
index 0000000..3ed2b63
--- a/dev/null
+++ b/noncore/securityplugins/pin/pinDialogBase.h
@@ -0,0 +1,47 @@
+/****************************************************************************
+** Form interface generated from reading ui file 'pinDialogBase.ui'
+**
+** Created: Mon Jun 14 11:00:59 2004
+** by: The User Interface Compiler (uic)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+#ifndef PINDIALOGBASE_H
+#define PINDIALOGBASE_H
+
+#include <qvariant.h>
+#include <qwidget.h>
+class QVBoxLayout;
+class QHBoxLayout;
+class QGridLayout;
+class QLabel;
+class QLineEdit;
+
+class PinDialogBase : public QWidget
+{
+ Q_OBJECT
+
+public:
+ PinDialogBase( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~PinDialogBase();
+
+ QLabel* button_4;
+ QLabel* button_7;
+ QLabel* prompt;
+ QLineEdit* display;
+ QLabel* button_1;
+ QLabel* button_2;
+ QLabel* button_5;
+ QLabel* button_6;
+ QLabel* button_3;
+ QLabel* button_0;
+ QLabel* button_8;
+ QLabel* button_9;
+ QLabel* button_OK;
+ QLabel* button_Skip;
+
+protected:
+ bool event( QEvent* );
+};
+
+#endif // PINDIALOGBASE_H
diff --git a/noncore/securityplugins/pin/pinDialogBase.ui b/noncore/securityplugins/pin/pinDialogBase.ui
new file mode 100644
index 0000000..79e7a55
--- a/dev/null
+++ b/noncore/securityplugins/pin/pinDialogBase.ui
@@ -0,0 +1,1258 @@
+<!DOCTYPE UI><UI>
+<class>PinDialogBase</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PinDialogBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>231</width>
+ <height>293</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>PinDialogBase</string>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_4</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>11</x>
+ <y>138</y>
+ <width>68</width>
+ <height>44</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>4</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_7</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>11</x>
+ <y>188</y>
+ <width>68</width>
+ <height>44</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>7</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>prompt</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>11</x>
+ <y>11</y>
+ <width>217</width>
+ <height>25</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>18</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Enter your PIN</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>display</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>11</x>
+ <y>42</y>
+ <width>217</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>228</red>
+ <green>228</green>
+ <blue>228</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>78</red>
+ <green>78</green>
+ <blue>78</blue>
+ </color>
+ <color>
+ <red>183</red>
+ <green>183</green>
+ <blue>183</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>10</red>
+ <green>95</green>
+ <blue>137</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>228</red>
+ <green>228</green>
+ <blue>228</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>114</red>
+ <green>114</green>
+ <blue>114</blue>
+ </color>
+ <color>
+ <red>152</red>
+ <green>152</green>
+ <blue>152</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>228</red>
+ <green>228</green>
+ <blue>228</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>78</red>
+ <green>78</green>
+ <blue>78</blue>
+ </color>
+ <color>
+ <red>183</red>
+ <green>183</green>
+ <blue>183</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>10</red>
+ <green>95</green>
+ <blue>137</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ <property stdset="1">
+ <name>echoMode</name>
+ <enum>Password</enum>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_1</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>11</x>
+ <y>88</y>
+ <width>68</width>
+ <height>44</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>1</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>85</x>
+ <y>88</y>
+ <width>69</width>
+ <height>44</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>2</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_5</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>85</x>
+ <y>138</y>
+ <width>69</width>
+ <height>44</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>5</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_6</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>160</x>
+ <y>138</y>
+ <width>68</width>
+ <height>44</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>6</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_3</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>160</x>
+ <y>88</y>
+ <width>68</width>
+ <height>44</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>3</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_0</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>11</x>
+ <y>238</y>
+ <width>68</width>
+ <height>44</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>0</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_8</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>85</x>
+ <y>188</y>
+ <width>69</width>
+ <height>44</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>8</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_9</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>160</x>
+ <y>188</y>
+ <width>68</width>
+ <height>44</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>9</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_OK</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>160</x>
+ <y>238</y>
+ <width>68</width>
+ <height>44</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>192</red>
+ <green>192</green>
+ <blue>192</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>223</red>
+ <green>223</green>
+ <blue>223</blue>
+ </color>
+ <color>
+ <red>96</red>
+ <green>96</green>
+ <blue>96</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>170</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>192</red>
+ <green>192</green>
+ <blue>192</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>96</red>
+ <green>96</green>
+ <blue>96</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>170</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>192</red>
+ <green>192</green>
+ <blue>192</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>96</red>
+ <green>96</green>
+ <blue>96</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>170</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Enter</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_Skip</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>85</x>
+ <y>238</y>
+ <width>69</width>
+ <height>44</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>192</red>
+ <green>192</green>
+ <blue>192</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>223</red>
+ <green>223</green>
+ <blue>223</blue>
+ </color>
+ <color>
+ <red>96</red>
+ <green>96</green>
+ <blue>96</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>127</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>192</red>
+ <green>192</green>
+ <blue>192</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>96</red>
+ <green>96</green>
+ <blue>96</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>127</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>192</red>
+ <green>192</green>
+ <blue>192</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>96</red>
+ <green>96</green>
+ <blue>96</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>127</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Skip</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+</widget>
+</UI>
diff --git a/noncore/securityplugins/pin/pinplugin.pro b/noncore/securityplugins/pin/pinplugin.pro
new file mode 100644
index 0000000..d066805
--- a/dev/null
+++ b/noncore/securityplugins/pin/pinplugin.pro
@@ -0,0 +1,21 @@
+VERSION = 0.0.2
+TEMPLATE = lib
+CONFIG += qt warn_on
+
+HEADERS = pin.h pinpluginimpl.h pinConfigWidget.h
+
+INTERFACES = pinDialogBase.ui
+
+SOURCES = pin.cpp pinpluginimpl.cpp pinConfigWidget.cpp
+
+
+INCLUDEPATH += $(OPIEDIR)/include
+DEPENDPATH +=
+
+LIBS += -lqpe -lopieui2
+
+DESTDIR = $(OPIEDIR)/plugins/security
+TARGET = multiauthpinplugin
+
+include ( $(OPIEDIR)/include.pro )
+
diff --git a/noncore/securityplugins/pin/pinpluginimpl.cpp b/noncore/securityplugins/pin/pinpluginimpl.cpp
new file mode 100644
index 0000000..1c32f81
--- a/dev/null
+++ b/noncore/securityplugins/pin/pinpluginimpl.cpp
@@ -0,0 +1,28 @@
+#include "pinpluginimpl.h"
+
+PinPluginImpl::PinPluginImpl() {
+ pinPlugin = new PinPlugin();
+}
+
+PinPluginImpl::~PinPluginImpl() {
+ delete pinPlugin;
+}
+
+MultiauthPluginObject* PinPluginImpl::plugin() {
+ return pinPlugin;
+}
+
+Q_EXPORT_INTERFACE() {
+ Q_CREATE_INSTANCE( PinPluginImpl )
+}
+
+QRESULT PinPluginImpl::queryInterface( const QUuid & uuid, QUnknownInterface **iface ) {
+ *iface = 0;
+ if ( ( uuid == IID_QUnknown ) || ( uuid == IID_MultiauthPluginInterface ) ) {
+ *iface = this, (*iface)->addRef();
+ } else {
+ return QE_NOINTERFACE;
+ }
+ return QS_OK;
+
+}
diff --git a/noncore/securityplugins/pin/pinpluginimpl.h b/noncore/securityplugins/pin/pinpluginimpl.h
new file mode 100644
index 0000000..e604b64
--- a/dev/null
+++ b/noncore/securityplugins/pin/pinpluginimpl.h
@@ -0,0 +1,58 @@
+/**
+ * \file pinpluginimpl.h
+ * \brief Standard Opie multiauth plugin definition
+ * \author Clément Séveillac (clement . seveillac (at) via . ecp . fr)
+ */
+/*
+ =. This file is part of the Opie Project
+ .=l. Copyright (C) 2004 Opie Developer Team <opie-devel@handhelds.org>
+ .>+-=
+ _;:, .> :=|. This library is free software; you can
+.> <`_, > . <= redistribute it and/or modify it under
+:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
+.="- .-=="i, .._ License as published by the Free Software
+ - . .-<_> .<> Foundation; either version 2 of the License,
+ ._= =} : or (at your option) any later version.
+ .%`+i> _;_.
+ .i_,=:_. -<s. This library is distributed in the hope that
+ + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
+ : .. .:, . . . without even the implied warranty of
+ =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
+ _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.= = ; Library General Public License for more
+++= -. .` .: details.
+ : = ...= . :.=-
+ -. .:....=;==+<; You should have received a copy of the GNU
+ -_. . . )=. = Library General Public License along with
+ -- :-=` this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef PIN_PLUGIN_IMPL_H
+#define PIN_PLUGIN_IMPL_H
+
+#include "pin.h"
+
+/// Standard multiauth plugin class
+class PinPluginImpl : public MultiauthPluginInterface{
+
+ public:
+ PinPluginImpl();
+ virtual ~PinPluginImpl();
+
+ QRESULT queryInterface( const QUuid &, QUnknownInterface** );
+ // defines standard addRef() and release() functions
+ Q_REFCOUNT;
+
+ virtual MultiauthPluginObject *plugin();
+
+ private:
+ /// the plugin itself
+ PinPlugin *pinPlugin;
+ ulong ref;
+};
+
+#endif