diff --git a/sources/3rdparty/task/taskadds.cpp b/sources/3rdparty/task/taskadds.cpp index b8a8165..dc6ef97 100644 --- a/sources/3rdparty/task/taskadds.cpp +++ b/sources/3rdparty/task/taskadds.cpp @@ -22,7 +22,7 @@ TaskResult runTask(const QString cmd) { return Task::await( [ & ]() { - QProcess command; + SandboxProcess command; command.start(cmd); command.waitForFinished(-1); TaskResult r; diff --git a/sources/3rdparty/task/taskadds.h b/sources/3rdparty/task/taskadds.h index 6de905b..617d47c 100644 --- a/sources/3rdparty/task/taskadds.h +++ b/sources/3rdparty/task/taskadds.h @@ -20,10 +20,21 @@ #define TASKADDS_H #include +#include #include "task.h" +class SandboxProcess : public QProcess +{ + protected: + void setupChildProcess() + { + ::setuid(0); + }; +}; + + struct TaskResult { int exitCode; diff --git a/sources/gui/bash-completions b/sources/gui/bash-completions index 01589fa..9213366 100644 --- a/sources/gui/bash-completions +++ b/sources/gui/bash-completions @@ -18,7 +18,7 @@ # variables _netctl_gui_arglist=( - '--daemonized' + '--daemon' '--maximized' '--minimized' '--about' diff --git a/sources/gui/src/CMakeLists.txt b/sources/gui/src/CMakeLists.txt index 27d1e48..cfc89cf 100644 --- a/sources/gui/src/CMakeLists.txt +++ b/sources/gui/src/CMakeLists.txt @@ -60,4 +60,5 @@ endif() add_executable (${SUBPROJECT} ${UI_HEADERS} ${HEADERS} ${SOURCES} ${MOC_SOURCES} ${QRC_SOURCES} ${TRANSLATIONS}) target_link_libraries (${SUBPROJECT} ${PROJECT_LIBRARY} ${QT_NEEDED_LIBS}) # install properties -install (TARGETS ${SUBPROJECT} DESTINATION bin) +install (TARGETS ${SUBPROJECT} DESTINATION bin + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE SETUID) diff --git a/sources/gui/src/main.cpp b/sources/gui/src/main.cpp index 8daabe3..4e50494 100644 --- a/sources/gui/src/main.cpp +++ b/sources/gui/src/main.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -54,6 +55,10 @@ int main(int argc, char *argv[]) daemon(0, 0); break; } +#if QT_VERSION >= 0x050000 + QApplication::setSetuidAllowed(true); + qDebug() << QApplication::isSetuidAllowed(); +#endif QApplication a(argc, argv); QApplication::setQuitOnLastWindowClosed(false); // check if exists diff --git a/sources/gui/src/mainwindow.cpp b/sources/gui/src/mainwindow.cpp index 6c338ce..cb7d40a 100644 --- a/sources/gui/src/mainwindow.cpp +++ b/sources/gui/src/mainwindow.cpp @@ -52,6 +52,9 @@ #include "vlanwidget.h" #include "wirelesswidget.h" +#include +#include + MainWindow::MainWindow(QWidget *parent, const QMap args, @@ -78,7 +81,6 @@ MainWindow::MainWindow(QWidget *parent, isDaemon = true; else isDaemon = false; - createDBusSession(); updateConfiguration(args); // main actions @@ -117,7 +119,6 @@ MainWindow::~MainWindow() { if (debug) qDebug() << "[MainWindow]" << "[~MainWindow]"; - QDBusConnection::sessionBus().unregisterService(QString(DBUS_SERVICE)); deleteObjects(); } @@ -294,6 +295,7 @@ void MainWindow::createObjects() if (debug) qDebug() << "[MainWindow]" << "[createObjects]"; // backend + createDBusSession(); netctlCommand = new Netctl(debug, configuration); netctlProfile = new NetctlProfile(debug, configuration); wpaCommand = new WpaSup(debug, configuration); @@ -340,6 +342,7 @@ void MainWindow::deleteObjects() { if (debug) qDebug() << "[MainWindow]" << "[deleteObjects]"; + QDBusConnection::sessionBus().unregisterService(QString(DBUS_SERVICE)); if (netctlCommand != nullptr) delete netctlCommand; if (netctlProfile != nullptr) delete netctlProfile; if (wpaCommand != nullptr) delete wpaCommand; diff --git a/sources/gui/src/messages.h b/sources/gui/src/messages.h index fe8b1f3..6535478 100644 --- a/sources/gui/src/messages.h +++ b/sources/gui/src/messages.h @@ -19,7 +19,9 @@ #define MESSAGES_H #include +#include #include +#include QString errorMessage(); diff --git a/sources/gui/zsh-completions b/sources/gui/zsh-completions index 7499a95..4fa2be5 100644 --- a/sources/gui/zsh-completions +++ b/sources/gui/zsh-completions @@ -19,7 +19,7 @@ # variables _netctl_gui_arglist=( - {'--daemonized','--daemonized'}'[start daemonized]' + {'--daemon','--daemon'}'[start as daemon]' {'--maximized','--maximized'}'[start maximized]' {'--minimized','--minimized'}'[start minimized to tray]' {'--about','--about'}'[show about window]' diff --git a/sources/netctlgui/src/netctlinteract.cpp b/sources/netctlgui/src/netctlinteract.cpp index fb309ae..fb74475 100644 --- a/sources/netctlgui/src/netctlinteract.cpp +++ b/sources/netctlgui/src/netctlinteract.cpp @@ -97,10 +97,6 @@ bool Netctl::cmdCall(const bool sudo, const QString command, const QString comma if (debug) qDebug() << "[Netctl]" << "[cmdCall]" << ":" << "Could not find command"; return false; } - if ((sudo) && (sudoCommand == 0)) { - if (debug) qDebug() << "[Netctl]" << "[cmdCall]" << ":" << "Could not find sudo"; - return false; - } QString cmd = QString(""); if (sudo) cmd = sudoCommand + QString(" "); @@ -130,10 +126,6 @@ QString Netctl::getCmdOutput(const bool sudo, const QString command, const QStri if (debug) qDebug() << "[Netctl]" << "[getCmdOutput]" << ":" << "Could not find command"; return QString(); } - if ((sudo) && (sudoCommand == 0)) { - if (debug) qDebug() << "[Netctl]" << "[getCmdOutput]" << ":" << "Could not find sudo"; - return QString(); - } QString cmd = QString(""); if (sudo) cmd = sudoCommand + QString(" "); diff --git a/sources/netctlgui/src/netctlprofile.cpp b/sources/netctlgui/src/netctlprofile.cpp index d2b2346..92019a3 100644 --- a/sources/netctlgui/src/netctlprofile.cpp +++ b/sources/netctlgui/src/netctlprofile.cpp @@ -74,10 +74,6 @@ bool NetctlProfile::copyProfile(const QString oldPath) if (debug) qDebug() << "[NetctlProfile]" << "[copyProfile]" << ":" << "Could not find directory"; return false; } - if (sudoCommand == 0) { - if (debug) qDebug() << "[NetctlProfile]" << "[copyProfile]" << ":" << "Could not find sudo"; - return false; - } QString newPath = profileDirectory->absolutePath() + QDir::separator() + QFileInfo(oldPath).fileName(); QString cmd = sudoCommand + QString(" /usr/bin/mv ") + oldPath + QString(" ") + newPath; @@ -213,10 +209,6 @@ bool NetctlProfile::removeProfile(const QString profile) if (debug) qDebug() << "[NetctlProfile]" << "[removeProfile]" << ":" << "Could not find directory"; return false; } - if (sudoCommand == 0) { - if (debug) qDebug() << "[NetctlProfile]" << "[removeProfile]" << ":" << "Could not find sudo"; - return false; - } QString profilePath = profileDirectory->absolutePath() + QDir::separator() + QFileInfo(profile).fileName(); QString cmd = sudoCommand + QString(" /usr/bin/rm ") + profilePath; diff --git a/sources/netctlgui/src/wpasupinteract.cpp b/sources/netctlgui/src/wpasupinteract.cpp index 202721d..3a1d651 100644 --- a/sources/netctlgui/src/wpasupinteract.cpp +++ b/sources/netctlgui/src/wpasupinteract.cpp @@ -249,10 +249,6 @@ bool WpaSup::startWpaSupplicant() if (debug) qDebug() << "[WpaSup]" << "[startWpaSupplicant]" << ":" << "Could not find PID file"; return false; } - if (sudoCommand == 0) { - if (debug) qDebug() << "[WpaSup]" << "[startWpaSupplicant]" << ":" << "Could not find sudo"; - return false; - } if (wpaDrivers == 0) { if (debug) qDebug() << "[WpaSup]" << "[startWpaSupplicant]" << ":" << "Could not find drivers"; return false;