forked from qt-creator/qt-creator
ProjectExplorer/Debugger: Add a 'Run as root' option for Unix hosts
For local run and GDB debug, with or without terminal. Task-number: QTCREATORBUG-2831 Task-number: QTCREATORBUG-25330 Change-Id: I9b5d2156bcffea4f358474ecdbcad580a4419917 Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -94,6 +94,7 @@ public:
|
||||
QProcess::ProcessError m_error = QProcess::UnknownError;
|
||||
QString m_errorString;
|
||||
bool m_abortOnMetaChars = true;
|
||||
bool m_runAsRoot = false;
|
||||
QSettings *m_settings = nullptr;
|
||||
|
||||
// Used on Unix only
|
||||
@@ -545,6 +546,7 @@ bool ConsoleProcess::start()
|
||||
}
|
||||
|
||||
d->m_environment.unset(QLatin1String("TERM"));
|
||||
|
||||
const QStringList env = d->m_environment.toStringList();
|
||||
if (!env.isEmpty()) {
|
||||
d->m_tempFile = new QTemporaryFile();
|
||||
@@ -571,20 +573,25 @@ bool ConsoleProcess::start()
|
||||
|
||||
const QString stubPath = QCoreApplication::applicationDirPath()
|
||||
+ QLatin1String("/" QTC_REL_TOOLS_PATH "/qtcreator_process_stub");
|
||||
QStringList allArgs = terminalArgs.toUnixArgs()
|
||||
<< stubPath
|
||||
<< modeOption(d->m_mode)
|
||||
<< d->m_stubServer.fullServerName()
|
||||
<< msgPromptToClose()
|
||||
<< workingDirectory()
|
||||
<< (d->m_tempFile ? d->m_tempFile->fileName() : QString())
|
||||
<< QString::number(getpid())
|
||||
<< pcmd
|
||||
<< pargs.toUnixArgs();
|
||||
|
||||
QStringList allArgs = terminalArgs.toUnixArgs();
|
||||
if (d->m_runAsRoot)
|
||||
allArgs << "sudo" << "-A";
|
||||
|
||||
allArgs << stubPath
|
||||
<< modeOption(d->m_mode)
|
||||
<< d->m_stubServer.fullServerName()
|
||||
<< msgPromptToClose()
|
||||
<< workingDirectory()
|
||||
<< (d->m_tempFile ? d->m_tempFile->fileName() : QString())
|
||||
<< QString::number(getpid())
|
||||
<< pcmd
|
||||
<< pargs.toUnixArgs();
|
||||
|
||||
if (terminal.needsQuotes)
|
||||
allArgs = QStringList { QtcProcess::joinArgs(allArgs) };
|
||||
|
||||
d->m_process.setEnvironment(env);
|
||||
d->m_process.start(terminal.command, allArgs);
|
||||
if (!d->m_process.waitForStarted()) {
|
||||
stubServerShutdown();
|
||||
@@ -958,6 +965,11 @@ Environment ConsoleProcess::environment() const
|
||||
return d->m_environment;
|
||||
}
|
||||
|
||||
void Utils::ConsoleProcess::setRunAsRoot(bool on)
|
||||
{
|
||||
d->m_runAsRoot = on;
|
||||
}
|
||||
|
||||
QProcess::ProcessError ConsoleProcess::error() const
|
||||
{
|
||||
return d->m_error;
|
||||
|
||||
Reference in New Issue
Block a user