File indexing completed on 2025-02-16 13:03:25
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, "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)