1 | // krazy:excludeall=license (it's a program, not a library) |
---|---|
2 | /* |
3 | SPDX-FileCopyrightText: 2001 Malte Starostik <malte@kde.org> |
4 | based on kmailservice.cpp, |
5 | SPDX-FileCopyrightText: 2000 Simon Hausmann <hausmann@kde.org> |
6 | |
7 | SPDX-License-Identifier: GPL-2.0-or-later |
8 | */ |
9 | |
10 | #include <KAuthorized> |
11 | #include <KConfig> |
12 | #include <KConfigGroup> |
13 | #include <KIO/CommandLauncherJob> |
14 | #include <KLocalizedString> |
15 | #include <QApplication> |
16 | #include <QDebug> |
17 | #include <QMessageBox> |
18 | #include <QUrl> |
19 | |
20 | int main(int argc, char **argv) |
21 | { |
22 | QApplication a(argc, argv); |
23 | |
24 | if (argc != 2) { |
25 | fprintf(stderr, format: "Usage: ktelnetservice6 <url>\n"); |
26 | return 1; |
27 | } |
28 | |
29 | KConfig config(QStringLiteral("kdeglobals")); |
30 | KConfigGroup cg(&config, QStringLiteral("General")); |
31 | QString terminal = cg.readPathEntry(key: "TerminalApplication", QStringLiteral( "konsole")); |
32 | |
33 | QUrl url(QString::fromLocal8Bit(ba: argv[1])); |
34 | QStringList cmd; |
35 | if (terminal == QLatin1String("konsole")) { |
36 | cmd << QStringLiteral("--noclose"); |
37 | } |
38 | |
39 | cmd << QStringLiteral("-e"); |
40 | if (url.scheme() == QLatin1String("telnet")) { |
41 | cmd << QStringLiteral("telnet"); |
42 | } else if (url.scheme() == QLatin1String("ssh")) { |
43 | cmd << QStringLiteral("ssh"); |
44 | } else if (url.scheme() == QLatin1String("rlogin")) { |
45 | cmd << QStringLiteral("rlogin"); |
46 | } else { |
47 | qCritical() << "Invalid protocol "<< url.scheme(); |
48 | return 2; |
49 | } |
50 | |
51 | if (!KAuthorized::authorize(action: KAuthorized::SHELL_ACCESS)) { |
52 | QMessageBox::critical(parent: nullptr, i18n("Access denied"), i18n( "You do not have permission to access the %1 protocol.", url.scheme())); |
53 | return 3; |
54 | } |
55 | |
56 | if (!url.userName().isEmpty()) { |
57 | cmd << QStringLiteral("-l"); |
58 | cmd << url.userName(); |
59 | } |
60 | |
61 | QString host; |
62 | if (!url.host().isEmpty()) { |
63 | host = url.host(); // telnet://host |
64 | } else if (!url.path().isEmpty()) { |
65 | host = url.path(); // telnet:host |
66 | } |
67 | |
68 | if (host.isEmpty() || host.startsWith(c: QLatin1Char('-'))) { |
69 | qCritical() << "Invalid hostname "<< host; |
70 | return 2; |
71 | } |
72 | |
73 | cmd << host; |
74 | |
75 | if (url.port() > 0) { |
76 | if (url.scheme() == QLatin1String("ssh")) { |
77 | cmd << QStringLiteral("-p") << QString::number(url.port()); |
78 | } else { |
79 | cmd << QString::number(url.port()); |
80 | } |
81 | } |
82 | |
83 | auto job = new KIO::CommandLauncherJob(terminal, cmd); |
84 | job->start(); |
85 | |
86 | return 0; |
87 | } |
88 |
Definitions
Learn Advanced QML with KDAB
Find out more