diff options
Diffstat (limited to 'kdesu/kdesu/sudlg.cpp')
-rw-r--r-- | kdesu/kdesu/sudlg.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/kdesu/kdesu/sudlg.cpp b/kdesu/kdesu/sudlg.cpp new file mode 100644 index 000000000..d68937372 --- /dev/null +++ b/kdesu/kdesu/sudlg.cpp @@ -0,0 +1,103 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module kdesu. + * Copyright (C) 2000 Geert Jansen <jansen@kde.org> + */ + +#include <config.h> +#include <qstring.h> +#include <kconfig.h> +#include <kdebug.h> +#include <klocale.h> +#include <kmessagebox.h> + +#include <kdesu/su.h> +#include "sudlg.h" + +KDEsuDialog::KDEsuDialog(QCString user, QCString auth_user, bool enableKeep,const QString& icon, bool withIgnoreButton) + : KPasswordDialog(Password, enableKeep, (withIgnoreButton ? User1:NoDefault), icon) +{ + KConfig* config = KGlobal::config(); + config->setGroup("super-user-command"); + QString superUserCommand = config->readEntry("super-user-command", DEFAULT_SUPER_USER_COMMAND); + if ( superUserCommand != "sudo" && superUserCommand != "su" ) { + kdWarning() << "unknown super user command" << endl; + superUserCommand = "su"; + } + + m_User = auth_user; + setCaption(i18n("Run as %1").arg(user)); + + QString prompt; + if (superUserCommand == "sudo" && m_User == "root") { + prompt = i18n("Please enter your password." ); + } else { + if (m_User == "root") { + prompt = i18n("The action you requested needs root privileges. " + "Please enter root's password below or click " + "Ignore to continue with your current privileges."); + } else { + prompt = i18n("The action you requested needs additional privileges. " + "Please enter the password for \"%1\" below or click " + "Ignore to continue with your current privileges.").arg(m_User); + } + } + setPrompt(prompt); + + if( withIgnoreButton ) + setButtonText(User1, i18n("&Ignore")); +} + + +KDEsuDialog::~KDEsuDialog() +{ +} + +bool KDEsuDialog::checkPassword(const char *password) +{ + SuProcess proc; + proc.setUser(m_User); + int status = proc.checkInstall(password); + switch (status) + { + case -1: + KMessageBox::sorry(this, i18n("Conversation with su failed.")); + done(Rejected); + return false; + + case 0: + return true; + + case SuProcess::SuNotFound: + KMessageBox::sorry(this, + i18n("The program 'su' is not found;\n" + "make sure your PATH is set correctly.")); + done(Rejected); + return false; + + case SuProcess::SuNotAllowed: + KMessageBox::sorry(this, + i18n("You are not allowed to use 'su';\n" + "on some systems, you need to be in a special " + "group (often: wheel) to use this program.")); + done(Rejected); + return false; + + case SuProcess::SuIncorrectPassword: + KMessageBox::sorry(this, i18n("Incorrect password; please try again.")); + return false; + + default: + KMessageBox::error(this, i18n("Internal error: illegal return from " + "SuProcess::checkInstall()")); + done(Rejected); + return false; + } +} + +void KDEsuDialog::slotUser1() +{ + done(AsUser); +} + +#include "sudlg.moc" |