File indexing completed on 2024-04-14 03:51:49

0001 /*
0002     SPDX-FileCopyrightText: 2019 Jonathan Riddell <jr@jriddell.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #define MYPASSWORD "ilovekde"
0008 #define ROOTPASSWORD "ilovekde"
0009 #include "config-kdesutest.h"
0010 
0011 #include <QObject>
0012 #include <QString>
0013 #include <QTest>
0014 
0015 #include <KConfig>
0016 #include <KConfigGroup>
0017 #include <KSharedConfig>
0018 
0019 #include "suprocess.h"
0020 
0021 namespace KDESu
0022 {
0023 class KdeSuTest : public QObject
0024 {
0025     Q_OBJECT
0026 private Q_SLOTS:
0027     void initTestCase()
0028     {
0029         QStandardPaths::setTestModeEnabled(true);
0030     }
0031 
0032     void editConfig(QString command, QString commandPath)
0033     {
0034         KSharedConfig::Ptr config = KSharedConfig::openConfig();
0035         KConfigGroup group(config, QStringLiteral("super-user-command"));
0036         group.writeEntry("super-user-command", command);
0037         QString kdesuStubPath = QString::fromLocal8Bit(CMAKE_RUNTIME_OUTPUT_DIRECTORY) + QString::fromLocal8Bit("/kdesu_stub");
0038         group.writeEntry("kdesu_stub_path", kdesuStubPath);
0039         group.writeEntry("command", commandPath);
0040     }
0041 
0042     void sudoGoodPassword()
0043     {
0044         editConfig(QString::fromLocal8Bit("sudo"), QString::fromLocal8Bit(CMAKE_HOME_DIRECTORY) + QString::fromLocal8Bit("/autotests/sudo"));
0045 
0046         KDESu::SuProcess suProcess("root", "ls");
0047         QString suapp = suProcess.superUserCommand();
0048         QVERIFY(suapp == QLatin1String("sudo"));
0049         int result = suProcess.exec(MYPASSWORD, 0);
0050         QVERIFY(result == 0);
0051     }
0052 
0053     void sudoBadPassword()
0054     {
0055         editConfig(QString::fromLocal8Bit("sudo"), QString::fromLocal8Bit(CMAKE_HOME_DIRECTORY) + QString::fromLocal8Bit("/autotests/sudo"));
0056 
0057         KDESu::SuProcess suProcess("root", "ls");
0058         QString suapp = suProcess.superUserCommand();
0059         QVERIFY(suapp == QLatin1String("sudo"));
0060         int result2 = suProcess.exec("broken", 0);
0061         QVERIFY(result2 == KDESu::SuProcess::SuIncorrectPassword);
0062     }
0063 
0064     void doasBadPassword()
0065     {
0066         editConfig(QString::fromLocal8Bit("doas"), QString::fromLocal8Bit(CMAKE_HOME_DIRECTORY) + QString::fromLocal8Bit("/autotests/sudo"));
0067 
0068         KDESu::SuProcess suProcess("root", "ls");
0069         QString suapp = suProcess.superUserCommand();
0070         QVERIFY(suapp == QLatin1String("doas"));
0071         int result2 = suProcess.exec("broken", 0);
0072         QVERIFY(result2 == KDESu::SuProcess::SuIncorrectPassword);
0073     }
0074 
0075     void doasGoodPassword()
0076     {
0077         editConfig(QString::fromLocal8Bit("doas"), QString::fromLocal8Bit(CMAKE_HOME_DIRECTORY) + QString::fromLocal8Bit("/autotests/sudo"));
0078 
0079         KDESu::SuProcess suProcess("root", "ls");
0080         QString suapp = suProcess.superUserCommand();
0081         QVERIFY(suapp == QLatin1String("doas"));
0082         int result = suProcess.exec(MYPASSWORD, 0);
0083         QVERIFY(result == 0);
0084     }
0085 
0086     void suGoodPassword()
0087     {
0088         editConfig(QString::fromLocal8Bit("su"), QString::fromLocal8Bit(CMAKE_HOME_DIRECTORY) + QString::fromLocal8Bit("/autotests/su"));
0089 
0090         KDESu::SuProcess suProcess("root", "ls");
0091         QString suapp = suProcess.superUserCommand();
0092         QVERIFY(suapp == QLatin1String("su"));
0093         int result2 = suProcess.exec(ROOTPASSWORD, 0);
0094         QVERIFY(result2 == 0);
0095     }
0096 
0097     void suBadPassword()
0098     {
0099         editConfig(QString::fromLocal8Bit("su"), QString::fromLocal8Bit(CMAKE_HOME_DIRECTORY) + QString::fromLocal8Bit("/autotests/su"));
0100 
0101         KDESu::SuProcess suProcess("root", "ls");
0102         QString suapp = suProcess.superUserCommand();
0103         QVERIFY(suapp == QLatin1String("su"));
0104         int result2 = suProcess.exec("broken", 0);
0105         QVERIFY(result2 == KDESu::SuProcess::SuIncorrectPassword);
0106     }
0107 };
0108 }
0109 
0110 #include <kdesutest.moc>
0111 QTEST_MAIN(KDESu::KdeSuTest)