File indexing completed on 2024-05-19 03:56:34
0001 /* 0002 SPDX-FileCopyrightText: 2020 Aleksei Nikiforov <darktemplar@basealt.ru> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "config-kdesudtest.h" 0008 0009 #include <QObject> 0010 #include <QTest> 0011 0012 #include "../lexer.h" 0013 0014 namespace KDESu 0015 { 0016 class KdeSudTest : public QObject 0017 { 0018 Q_OBJECT 0019 private Q_SLOTS: 0020 void initTestCase() 0021 { 0022 } 0023 0024 // copy of KDESu::Client::escape 0025 QByteArray escape(const QByteArray &str) 0026 { 0027 QByteArray copy; 0028 copy.reserve(str.size() + 4); 0029 copy.append('"'); 0030 for (const uchar c : str) { 0031 if (c < 32) { 0032 copy.append('\\'); 0033 copy.append('^'); 0034 copy.append(c + '@'); 0035 } else { 0036 if (c == '\\' || c == '"') { 0037 copy.append('\\'); 0038 } 0039 copy.append(c); 0040 } 0041 } 0042 copy.append('"'); 0043 return copy; 0044 } 0045 0046 void commandWithDoubleQuotes() 0047 { 0048 // Process command like in KDESu::Client::exec 0049 QByteArray cmd; 0050 cmd = "EXEC "; 0051 cmd += escape("bash -c \"ls -la\""); 0052 cmd += ' '; 0053 cmd += escape("testuser"); 0054 cmd += '\n'; 0055 0056 // Now handle command like in ConnectionHandler::doCommand 0057 Lexer l(cmd); 0058 QVERIFY(l.lex() == Lexer::Tok_exec); 0059 0060 QVERIFY(l.lex() == Lexer::Tok_str); 0061 QVERIFY(l.lval() == "bash -c \"ls -la\""); 0062 0063 QVERIFY(l.lex() == Lexer::Tok_str); 0064 QVERIFY(l.lval() == "testuser"); 0065 0066 QVERIFY(l.lex() == '\n'); 0067 } 0068 }; 0069 } 0070 0071 #include <kdesudtest.moc> 0072 QTEST_MAIN(KDESu::KdeSudTest)