summaryrefslogtreecommitdiffstats
path: root/kdmlib/kgreeterplugin.h
diff options
context:
space:
mode:
Diffstat (limited to 'kdmlib/kgreeterplugin.h')
-rw-r--r--kdmlib/kgreeterplugin.h407
1 files changed, 0 insertions, 407 deletions
diff --git a/kdmlib/kgreeterplugin.h b/kdmlib/kgreeterplugin.h
deleted file mode 100644
index edf67f141..000000000
--- a/kdmlib/kgreeterplugin.h
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
-
- Authentication method specific conversation plugin for KDE's greeter widgets
-
- Copyright (C) 2003 Oswald Buddenhagen <[email protected]>
- Copyright (C) 2003 Fabian Kaiser <[email protected]>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- 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., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KGREETERPLUGIN_H
-#define KGREETERPLUGIN_H
-
-#include <tqvariant.h>
-#include <tqmessagebox.h>
-#include <kdemacros.h>
-
-class KdmThemer;
-
-class TQWidget;
-class TQLayoutItem;
-
-class KGreeterPluginHandler {
-public:
- /* keep in sync with V_IS_* */
- enum { IsSecret = 1, IsUser = 2, IsPassword = 4, IsOldPassword = 8,
- IsNewPassword = 16 };
- /**
- * Reply to textPrompt().
- * @param text text to return to core; null to abort auth cycle
- * @param tag zero or one of Is*
- */
- virtual void gplugReturnText( const char *text, int tag ) = 0;
- /**
- * Reply to binaryPrompt().
- * @param data data in pam_client format to return to the core;
- * null to abort auth cycle
- */
- virtual void gplugReturnBinary( const char *data ) = 0;
- /**
- * Tell the greeter who is logging in.
- * Call this preferably before gplugStart, as otherwise the .dmrc
- * load will be delayed. Don't call at all if your plugin doesn't
- * have the Local flag set. Call only for internally generated
- * user changes.
- * @param user the user logging in
- */
- virtual void gplugSetUser( const TQString &user ) = 0;
- /**
- * Start processing.
- */
- virtual void gplugStart() = 0;
- /**
- * Plugins that expect user input from a different device than the mouse or
- * keyboard must call this when user activity is detected to prevent the
- * greeter from resetting/going away. Events should be compressed to no
- * more than ten per second; one every five seconds is actually enough.
- * Events should be actual changes to the input fields, not random motion.
- */
- virtual void gplugActivity() = 0;
- /**
- * Show a message box on behalf of the talker.
- * @param type message severity
- * @param text message text
- */
- virtual void gplugMsgBox( TQMessageBox::Icon type, const TQString &text ) = 0;
-};
-
-/**
- * Abstract base class for conversation plugins ("talkers") to be used with
- * TDM, kdesktop_lock, etc.
- * The authentication method used by a particular instance of a plugin
- * may be configurable, but the instance must handle exactly one method,
- * i.e., info->method must be determined at the latest at init() time.
- */
-class KGreeterPlugin {
-public:
- KGreeterPlugin( KGreeterPluginHandler *h ) : handler( h ) {}
- virtual ~KGreeterPlugin() {}
-
- /**
- * Variations of the talker:
- * - Authenticate: authentication
- * - AuthChAuthTok: authentication and password change
- * - ChAuthTok: password change
- */
- enum Function { Authenticate, AuthChAuthTok, ChAuthTok };
-
- /**
- * Contexts the talker can be used in:
- * - Login: tdm login dialog
- * - Shutdown: tdm shutdown dialog
- * - Unlock: tdm unlock dialog (TODO)
- * - ChangeTok: tdm password change dialog (TODO)
- * - ExUnlock: kdesktop_lock unlock dialog
- * - ExChangeTok: kdepasswd password change dialog (TODO)
- *
- * The Ex* contexts exist within a running session; the talker must know
- * how to obtain the currently logged in user (+ domain/realm, etc.)
- * itself (i.e., fixedEntity will be null). The non-Ex variants will have
- * a fixedEntity passed in.
- */
- enum Context { Login, Shutdown, Unlock, ChangeTok,
- ExUnlock, ExChangeTok };
-
- /**
- * Provide the talker with a list of selectable users. This can be used
- * for autocompletion, etc.
- * Will be called only when not running.
- * @param users the users to load.
- */
- virtual void loadUsers( const TQStringList &users ) = 0;
-
- /**
- * Preload the talker with an (opaque to the greeter) entity.
- * Will be called only when not running.
- * @param entity the entity to preload the talker with. That
- * will usually be something like "user" or "user@domain".
- * @param field the sub-widget (probably line edit) to put the cursor into.
- * If -1, preselect the user for timed login. This means pre-filling
- * the password field with anything, disabling it, and placing the
- * cursor in the user name field.
- */
- virtual void presetEntity( const TQString &entity, int field ) = 0;
-
- /**
- * Obtain the actually logged in entity.
- * Will be called only after succeeded() was called.
- */
- virtual TQString getEntity() const = 0;
-
- /**
- * "Push" a user into the talker. That can be a click into the user list
- * or successful authentication without the talker calling gplugSetUser.
- * Will be called only when running.
- * @param user the user to set. Note that this is a UNIX login, not a
- * canonical entity
- */
- virtual void setUser( const TQString &user ) = 0;
-
- /**
- * "Push" a password into the talker.
- * @param pass the password to set.
- */
- virtual void setPassword( const TQString &pass ) = 0;
-
- /**
- * En-/disable any widgets contained in the talker.
- * Will be called only when not running.
- * @param on the state to set
- */
- virtual void setEnabled( bool on ) = 0;
-
- /**
- * Called when a message from the authentication backend arrives.
- * @param message the message received from the backend
- * @param error if true, @p message is an error message, otherwise it's
- * an informational message
- * @return true means that the talker already handled the message, false
- * that the greeter should display it in a message box
- *
- * FIXME: Filtering a message usually means that the backend issued a
- * prompt and obtains the authentication data itself. However, in that
- * state the backend is unresponsive, e.g., no shutdown is possible.
- * The frontend could send the backend a signal, but the "escape path"
- * within the backend is unclear (PAM won't like simply longjmp()ing
- * out of it).
- */
- virtual bool textMessage( const char *message, bool error ) = 0;
-
- /**
- * Prompt the user for data. Reply by calling handler->gplugReturnText().
- * @param propmt the prompt to display. It may be null, in which case
- * "Username"/"Password" should be shown and the replies should be tagged
- * with the respective Is* flag.
- * @param echo if true, a normal input widget can be used, otherwise one that
- * visually obscures the user's input.
- * @param nonBlocking if true, report whatever is already available,
- * otherwise wait for user input.
- */
- virtual void textPrompt( const char *prompt, bool echo, bool nonBlocking ) = 0;
-
- /**
- * Request binary authentication data from the talker. Reply by calling
- * handler->gplugReturnBinary().
- * @param prompt prompt in pam_client format
- * @param nonBlocking if true, report whatever is already available,
- * otherwise wait for user input.
- * @return always true for now
- *
- * TODO:
- * @return if true, the prompt was handled by the talker, otherwise the
- * handler has to use libpam_client to obtain the authentication data.
- * In that state the talker still can abort the data fetch by
- * gplugReturn()ing a null array. When the data was obtained, another
- * binaryPrompt with a null prompt will be issued.
- */
- virtual bool binaryPrompt( const char *prompt, bool nonBlocking ) = 0;
-
- /**
- * This can either
- * - Start a processing cycle. Will be called only when not running.
- * - Restart authTok cycle - will be called while running and implies
- * revive(). PAM is a bit too clever, so we need this.
- * In any case the talker is running afterwards.
- */
- virtual void start() = 0;
-
- /**
- * Request to suspend the auth. Make sure that a second talker of any
- * type will be able to operate while this one is suspended (no busy
- * device nodes, etc.).
- * Will be called only if running within Login context. (Actually it
- * won't be called at all, but be prepared.)
- */
- virtual void suspend() = 0;
-
- /**
- * Request to resume the auth from the point it was suspended at.
- * Will be called only when suspended.
- */
- virtual void resume() = 0;
-
- /**
- * The "login" button was pressed in the greeter.
- * This might call gplugReturn* or gplugStart.
- * Will be called only when running.
- */
- virtual void next() = 0;
-
- /**
- * Abort auth cycle. Note that this should _not_ clear out already
- * entered auth tokens if they are still on the screen.
- * Will be called only when running and stops it.
- */
- virtual void abort() = 0;
-
- /**
- * Indicate successful end of the current phase.
- * This is more or less a request to disable editable widgets
- * responsible for the that phase.
- * There will be no further attempt to enter that phase until the
- * widget is destroyed.
- * Will be called only when running and stops it.
- */
- virtual void succeeded() = 0;
-
- /**
- * Indicate unsuccessful end of the current phase.
- * This is mostly a request to disable all editable widgets.
- * The widget will be treated as dead until revive() is called.
- * Will be called only when running and stops it.
- */
- virtual void failed() = 0;
-
- /**
- * Prepare retrying the previously failed phase.
- * This is mostly a request to re-enable all editable widgets failed()
- * disabled previously, clear the probably incorrect authentication tokens
- * and to set the input focus appropriately.
- * Will be called only after failed() (possibly with clear() in between),
- * or after presetEntity() with field -1.
- */
- virtual void revive() = 0;
-
- /**
- * Clear any edit widgets, particularily anything set by setUser.
- * Will be called only when not running.
- */
- virtual void clear() = 0;
-
- /**
- * Obtain the TQLayoutItem containg the widget(s) to actually handle the
- * conversation. See TQLayout and TQWidgetItem for possible implementations.
- */
- TQLayoutItem *getLayoutItem() const { return layoutItem; }
-
-protected:
- KGreeterPluginHandler *handler;
- TQLayoutItem *layoutItem;
-};
-
-struct KDE_EXPORT kgreeterplugin_info {
- /**
- * Human readable name of this plugin (should be a little more
- * informative than just the libary name). Must be I18N_NOOP()ed.
- */
- const char *name;
-
- /**
- * The authentication method to use - the meaning is up to the backend,
- * but will usually be related to the PAM service.
- */
- const char *method;
-
- /**
- * Capabilities.
- */
- enum {
- /**
- * All users exist on the local system permanently (will be listed
- * by getpwent()); an entity corresponds to a UNIX user.
- */
- Local = 1,
- /**
- * The entities consist of multiple fields.
- * PluginOptions/<plugin>.FocusField is used instead of FocusPasswd.
- */
- Fielded = 2,
- /**
- * An entity can be preset, the talker has a widget where a user can
- * be selected explicitly. If the method is "classic", timed login
- * is possible, too.
- * This also means that setUser/gplugSetUser can be used and a
- * userlist can be shown at all - provided Local is set as well.
- */
- Presettable = 4
- };
-
- /*
- * Capability flags.
- */
- int flags;
-
- /**
- * Call after loading the plugin.
- *
- * @param method if non-empty and the plugin is unable to handle that
- * method, return false. If the plugin has a constant method defined
- * above, it can ignore this parameter.
- * @param getConf can be used to obtain configuration items from the
- * greeter; you have to pass it the @p ctx pointer.
- * The only predefined key (in TDM) is "EchoMode", which is an int
- * (in fact, KPasswordEdit::EchoModes).
- * Other keys are obtained from the PluginOptions option; see tdmrc
- * for details.
- * If the key is unknown, dflt is returned.
- * @param ctx context pointer for @p getConf
- * @return if false, unload the plugin again (don't call done() first)
- */
- bool (*init)( const TQString &method,
- TQVariant (*getConf)( void *ctx, const char *key,
- const TQVariant &dflt ),
- void *ctx );
-
- /**
- * Call before unloading the plugin.
- * This pointer can be null.
- */
- void (*done)( void );
-
- /**
- * Factory method to create an instance of the plugin.
- * Note that multiple instances can exist at one time, but only
- * one of them is active at any moment (the others would be suspended
- * or not running at all).
- * @param handler the object offering the necessary callbacks
- * @param parent parent widget
- * @param predecessor the focus widget before the conversation widget
- * @param fixedEntity see below
- * @param func see below
- * @param ctx see below
- * @return an instance of this conversation plugin
- *
- * Valid combinations of Function and Context:
- * - Authenticate:Login - init
- * - Authenticate:Shutdown - init, for now "root" is passed as fixedEntitiy
- * and it is not supposed to be displayed. Plugins with Local not set
- * might have to conjure something up to make getEntity() return a
- * canonical entitiy. FIXME: don't restrict shutdown to root.
- * - AuthChAuthTok:Login, AuthChAuthTok:Shutdown - cont/cont,
- * only relevant for classic method (as it is relevant only for password-
- * less logins, which always use classic). The login should not be shown -
- * it is known to the user already; the backend won't ask for it, either.
- * - ChAuthTok:Login & ChAuthTok:Shutdown - cont
- * - Authenticate:Unlock & Authenticate:ExUnlock - init,
- * AuthChAuthTok:ChangeTok & AuthChAuthTok:ExChangeTok - init/cont,
- * display fixedEntity as labels. The backend does not ask for the UNIX
- * login, as it already knows it - but it will ask for all components of
- * the entity if it is no UNIX login.
- *
- * "init" means that the plugin is supposed to call gplugStart, "cont"
- * that the backend is already in a cycle of the method the plugin was
- * initialized with.
- */
- KGreeterPlugin *(*create)( KGreeterPluginHandler *handler,
- KdmThemer *themer,
- TQWidget *parent, TQWidget *predecessor,
- const TQString &fixedEntity,
- KGreeterPlugin::Function func,
- KGreeterPlugin::Context ctx );
-};
-
-#endif