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)