diff options
Diffstat (limited to 'opensuse/tdebase/kdm-admin-mode.diff')
-rw-r--r-- | opensuse/tdebase/kdm-admin-mode.diff | 424 |
1 files changed, 424 insertions, 0 deletions
diff --git a/opensuse/tdebase/kdm-admin-mode.diff b/opensuse/tdebase/kdm-admin-mode.diff new file mode 100644 index 000000000..6028d7698 --- /dev/null +++ b/opensuse/tdebase/kdm-admin-mode.diff @@ -0,0 +1,424 @@ +Index: kdm/config.def +=================================================================== +--- kdm/config.def.orig ++++ kdm/config.def +@@ -2002,6 +2002,17 @@ Description: + Specify the widget style for the greeter. Empty means to use the + built-in default which currently is <literal>Plastik</literal>. + ++Key: UseAdminSession ++Type: bool ++Default: false ++User: greeter ++Instance: #*/! ++Comment: ++ Admin session ++Description: ++ If given there will be a special button that requires root password ++ and starts the given session ++ + Key: ColorScheme + Type: string + Default: "" +Index: kdm/kfrontend/Makefile.am +=================================================================== +--- kdm/kfrontend/Makefile.am.orig ++++ kdm/kfrontend/Makefile.am +@@ -21,6 +21,7 @@ kdm_greet_SOURCES = \ + kchooser.cpp \ + kgverify.cpp \ + kdmshutdown.cpp \ ++ kdmadmindialog.cpp \ + kgreeter.cpp \ + kgapp.cpp + kdm_greet_LDFLAGS = $(all_libraries) $(KDE_RPATH) +Index: kdm/kfrontend/kdmadmindialog.cpp +=================================================================== +--- /dev/null ++++ kdm/kfrontend/kdmadmindialog.cpp +@@ -0,0 +1,176 @@ ++ /* ++ ++ Admin dialog ++ ++ Copyright (C) 1997, 1998, 2000 Steffen Hansen <hansen@kde.org> ++ Copyright (C) 2000-2003 Oswald Buddenhagen <ossi@kde.org> ++ ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program 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 General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++ */ ++ ++#include "kdmadmindialog.h" ++#include "kdmconfig.h" ++#include "kgdialog.h" ++#include "kdm_greet.h" ++#include <stdlib.h> ++ ++#include <kapplication.h> ++#include <kseparator.h> ++#include <klocale.h> ++#include <kpushbutton.h> ++#include <kstdguiitem.h> ++ ++#include <qcombobox.h> ++#include <qvbuttongroup.h> ++#include <qstyle.h> ++#include <qlayout.h> ++#include <qaccel.h> ++#include <qpopupmenu.h> ++ ++int KDMAdmin::curPlugin = -1; ++PluginList KDMAdmin::pluginList; ++ ++KDMAdmin::KDMAdmin( const QString &user, QWidget *_parent ) ++ : inherited( _parent ) ++ , verify( 0 ), curUser(user) ++{ ++ QSizePolicy fp( QSizePolicy::Fixed, QSizePolicy::Fixed ); ++ ++ QVBoxLayout *box = new QVBoxLayout( this, 10 ); ++ ++ QHBoxLayout *hlay = new QHBoxLayout( box ); ++ ++ GSendInt( G_ReadDmrc ); ++ GSendStr( "root" ); ++ GRecvInt(); // ignore status code ... ++ ++ if (curPlugin < 0) { ++ curPlugin = 0; ++ pluginList = KGVerify::init( "classic" ); ++ } ++ verify = new KGStdVerify( this, this, ++ this, "root", ++ pluginList, KGreeterPlugin::Authenticate, ++ KGreeterPlugin::Shutdown ); ++ verify->selectPlugin( curPlugin ); ++ box->addLayout( verify->getLayout() ); ++ QAccel *accel = new QAccel( this ); ++ accel->insertItem( ALT+Key_A, 0 ); ++ connect( accel, SIGNAL(activated(int)), SLOT(slotActivatePlugMenu()) ); ++ ++ box->addWidget( new KSeparator( KSeparator::HLine, this ) ); ++ ++ okButton = new KPushButton( KStdGuiItem::ok(), this ); ++ okButton->setSizePolicy( fp ); ++ okButton->setDefault( true ); ++ cancelButton = new KPushButton( KStdGuiItem::cancel(), this ); ++ cancelButton->setSizePolicy( fp ); ++ ++ hlay = new QHBoxLayout( box ); ++ hlay->addStretch( 1 ); ++ hlay->addWidget( okButton ); ++ hlay->addStretch( 1 ); ++ hlay->addWidget( cancelButton ); ++ hlay->addStretch( 1 ); ++ ++ connect( okButton, SIGNAL(clicked()), SLOT(accept()) ); ++ connect( cancelButton, SIGNAL(clicked()), SLOT(reject()) ); ++ ++ slotWhenChanged(); ++} ++ ++KDMAdmin::~KDMAdmin() ++{ ++ hide(); ++ delete verify; ++} ++ ++void ++KDMAdmin::slotActivatePlugMenu() ++{ ++ QPopupMenu *cmnu = verify->getPlugMenu(); ++ QSize sh( cmnu->sizeHint() / 2 ); ++ cmnu->exec( geometry().center() - QPoint( sh.width(), sh.height() ) ); ++} ++ ++void ++KDMAdmin::accept() ++{ ++ verify->accept(); ++} ++ ++void ++KDMAdmin::slotWhenChanged() ++{ ++ verify->abort(); ++ verify->setEnabled( 1 ); ++ verify->start(); ++} ++ ++void ++KDMAdmin::bye_bye() ++{ ++ GSendInt( G_GetDmrc ); ++ GSendStr( "Session" ); ++ char *sess = GRecvStr(); ++ if (sess && strcmp(sess, "admin")) { ++ GSendInt( G_PutDmrc ); ++ GSendStr( "OrigSession"); ++ GSendStr( sess); ++ free(sess); ++ } ++ ++ GSendInt( G_PutDmrc ); ++ GSendStr( "Session" ); ++ GSendStr( "admin" ); ++ inherited::accept(); ++} ++ ++void ++KDMAdmin::verifyPluginChanged( int id ) ++{ ++ curPlugin = id; ++ adjustSize(); ++} ++ ++void ++KDMAdmin::verifyOk() ++{ ++ bye_bye(); ++} ++ ++void ++KDMAdmin::verifyFailed() ++{ ++ okButton->setEnabled( false ); ++ cancelButton->setEnabled( false ); ++} ++ ++void ++KDMAdmin::verifyRetry() ++{ ++ okButton->setEnabled( true ); ++ cancelButton->setEnabled( true ); ++} ++ ++void ++KDMAdmin::verifySetUser( const QString & ) ++{ ++} ++ ++ ++#include "kdmadmindialog.moc" +Index: kdm/kfrontend/kdmadmindialog.h +=================================================================== +--- /dev/null ++++ kdm/kfrontend/kdmadmindialog.h +@@ -0,0 +1,70 @@ ++ /* ++ ++ Shutdown dialog ++ ++ Copyright (C) 1997, 1998 Steffen Hansen <hansen@kde.org> ++ Copyright (C) 2000-2003 Oswald Buddenhagen <ossi@kde.org> ++ ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program 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 General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++ */ ++ ++ ++#ifndef KDMADMIN_H ++#define KDMADMIN_H ++ ++#include "kgverify.h" ++ ++#include <qradiobutton.h> ++ ++class LiloInfo; ++class QLabel; ++class KPushButton; ++class QButtonGroup; ++class QComboBox; ++ ++class KDMAdmin : public FDialog, public KGVerifyHandler { ++ Q_OBJECT ++ typedef FDialog inherited; ++ ++public: ++ KDMAdmin( const QString &user, QWidget *_parent = 0 ); ++ ~KDMAdmin(); ++ ++public slots: ++ void accept(); ++ void slotWhenChanged(); ++ void slotActivatePlugMenu(); ++ ++private: ++ void bye_bye(); ++ ++ KPushButton *okButton, *cancelButton; ++ KGStdVerify *verify; ++ QString curUser; ++ ++ static int curPlugin; ++ static PluginList pluginList; ++ ++public: // from KGVerifyHandler ++ virtual void verifyPluginChanged( int id ); ++ virtual void verifyOk(); ++ virtual void verifyFailed(); ++ virtual void verifyRetry(); ++ virtual void verifySetUser( const QString &user ); ++}; ++ ++#endif +Index: kdm/kfrontend/kgreeter.cpp +=================================================================== +--- kdm/kfrontend/kgreeter.cpp.orig ++++ kdm/kfrontend/kgreeter.cpp +@@ -27,6 +27,7 @@ Foundation, Inc., 51 Franklin Street, Fi + #include "kdmconfig.h" + #include "kdmclock.h" + #include "kdm_greet.h" ++#include "kdmadmindialog.h" + #include "themer/kdmthemer.h" + #include "themer/kdmitem.h" + #include "themer/kdmlabel.h" +@@ -509,7 +510,7 @@ KGreeter::insertSessions() + for (char **dit = _sessionsDirs; *dit; ++dit) { + QStringList ents = QDir( *dit ).entryList(); + for (QStringList::ConstIterator it = ents.begin(); it != ents.end(); ++it) +- if ((*it).endsWith( ".desktop" )) { ++ if ((*it).endsWith( ".desktop" ) && !(*it).endsWith("admin.desktop")) { + KSimpleConfig dsk( QString( *dit ).append( '/' ).append( *it ) ); + dsk.setGroup( "Desktop Entry" ); + putSession( (*it).left( (*it).length() - 8 ), +@@ -648,6 +649,17 @@ KGreeter::slotLoadPrevWM() + return; + } + } else { ++ if (!strcmp(sess, "admin")) { ++ // need to get the original ++ GSendInt( G_GetDmrc); ++ GSendStr( "OrigSession"); ++ sess = GRecvStr(); ++ if (!sess) { ++ free(sess); ++ sess = strdup("default"); ++ } ++ } ++ + for (uint i = 0; i < sessionTypes.count() && !sessionTypes[i].hid; i++) + if (sessionTypes[i].type == sess) { + free( sess ); +@@ -998,6 +1010,12 @@ KThemedGreeter::KThemedGreeter() + } + } + ++ admin_button = themer->findNode( "admin_button"); ++ if ( admin_button ) { ++ if ( !_useAdminSession ) ++ admin_button->hide( true ); ++ } ++ + if (plugMenu) { + inserten( i18n("&Authentication Method"), 0, plugMenu ); + needSep = true; +@@ -1103,6 +1121,8 @@ KThemedGreeter::slotThemeActivated( cons + slotSessMenu(); + else if (id == "system_button") + slotActionMenu(); ++ else if (id == "admin_button") ++ slotAskAdminPassword(); + } + + void +@@ -1129,4 +1149,15 @@ KThemedGreeter::keyPressEvent( QKeyEvent + accept(); + } + ++void ++KThemedGreeter::slotAskAdminPassword() ++{ ++ KDMAdmin k(curUser, this); ++ if (k.exec()) { ++ GSendInt(G_Ready); ++ hide(); ++ done(ex_exit); ++ } ++} ++ + #include "kgreeter.moc" +Index: kdm/kfrontend/kgreeter.h +=================================================================== +--- kdm/kfrontend/kgreeter.h.orig ++++ kdm/kfrontend/kgreeter.h +@@ -146,6 +146,7 @@ class KThemedGreeter : public KGreeter { + void slotThemeActivated( const QString &id ); + void slotSessMenu(); + void slotActionMenu(); ++ void slotAskAdminPassword(); + + protected: + virtual void updateStatus( bool fail, bool caps, int timedleft ); +@@ -158,7 +159,7 @@ class KThemedGreeter : public KGreeter { + KdmThemer *themer; + KdmItem *caps_warning, *xauth_warning, *pam_error, *timed_label, + *console_rect, *userlist_rect, +- *session_button, *system_button; ++ *session_button, *system_button, *admin_button; + + public: // from KGVerifyHandler + virtual void verifyFailed(); +Index: kdm/kfrontend/sessions/Makefile.am +=================================================================== +--- kdm/kfrontend/sessions/Makefile.am.orig ++++ kdm/kfrontend/sessions/Makefile.am +@@ -1,6 +1,6 @@ + sessionsdir = $(kde_datadir)/kdm/sessions + sessions_DATA = \ +- kde.desktop gnome.desktop \ ++ admin.desktop kde.desktop gnome.desktop \ + 9wm.desktop \ + aewm++.desktop \ + aewm.desktop \ +Index: kdm/kfrontend/sessions/admin.desktop +=================================================================== +--- /dev/null ++++ kdm/kfrontend/sessions/admin.desktop +@@ -0,0 +1,7 @@ ++[Desktop Entry] ++Encoding=UTF-8 ++Type=XSession ++Exec=YaSTadminSession ++TryExec=YaSTadminSession ++Name=admin ++Comment=Yast Admin Session +Index: kdm/kfrontend/themer/kdmlabel.cpp +=================================================================== +--- kdm/kfrontend/themer/kdmlabel.cpp.orig ++++ kdm/kfrontend/themer/kdmlabel.cpp +@@ -214,6 +214,7 @@ static const struct { + { "language", I18N_NOOP("&Language") }, + { "session", I18N_NOOP("Session &Type") }, + { "system", I18N_NOOP("&System") }, // i18n("Actions"); ++ { "admin", I18N_NOOP("&Administration") }, + { "disconnect", I18N_NOOP("&Disconnect") }, + { "quit", I18N_NOOP("&Quit") }, + { "halt", I18N_NOOP("Power O&ff") }, |