From: Steven Rostedt <rostedt@goodmis.org>
To: "Yordan Karadzhov (VMware)" <y.karadz@gmail.com>
Cc: linux-trace-devel@vger.kernel.org, mike.auty@gmail.com
Subject: Re: [PATCH 2/3] kernel-shark: Don't use pkexec when running as Root
Date: Fri, 9 Aug 2019 09:33:41 -0400 [thread overview]
Message-ID: <20190809093341.0936f336@gandalf.local.home> (raw)
In-Reply-To: <20190809080623.7548-3-y.karadz@gmail.com>
On Fri, 9 Aug 2019 11:06:22 +0300
"Yordan Karadzhov (VMware)" <y.karadz@gmail.com> wrote:
> If KernelShark GUI has been started as Root we do not need to use
> "pkexec" when starting the Record dialog. Note that the actual place
> where "pkexec" gets used is in the script "kshark-su-record".
>
> Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
> ---
> kernel-shark/src/KsMainWindow.cpp | 47 +++++++++++++++++++++----------
> 1 file changed, 32 insertions(+), 15 deletions(-)
>
> diff --git a/kernel-shark/src/KsMainWindow.cpp b/kernel-shark/src/KsMainWindow.cpp
> index 2560bf8..e9c6d54 100644
> --- a/kernel-shark/src/KsMainWindow.cpp
> +++ b/kernel-shark/src/KsMainWindow.cpp
> @@ -883,23 +883,26 @@ void KsMainWindow::_pluginAdd()
>
> void KsMainWindow::_record()
> {
> -#ifndef DO_AS_ROOT
> + bool canDoAsRoot(false);
Is this the C++ way of doing:
bool canDoAsRoot = false; ?
>
> - QErrorMessage *em = new QErrorMessage(this);
> - QString message;
> -
> - message = "Record is currently not supported.";
> - message += " Install \"pkexec\" and then do:<br>";
> - message += " cd build <br> sudo ./cmake_uninstall.sh <br>";
> - message += " ./cmake_clean.sh <br> cmake .. <br> make <br>";
> - message += " sudo make install";
> +#ifdef DO_AS_ROOT
BTW, I think we should rename DO_AS_ROOT to "HAS_PKEXEC" as that is
much more descriptive of what that macro means.
> + canDoAsRoot = true;
> +#endif
>
> - em->showMessage(message);
> - qCritical() << "ERROR: " << message;
> + if (geteuid() && !canDoAsRoot) {
> + QErrorMessage *em = new QErrorMessage(this);
> + QString message;
>
> - return;
> + message = "Record is currently not supported.";
> + message += " Install \"pkexec\" and then do:<br>";
> + message += " cd build <br> sudo ./cmake_uninstall.sh <br>";
> + message += " ./cmake_clean.sh <br> cmake .. <br> make <br>";
> + message += " sudo make install";
>
> -#endif
> + em->showMessage(message);
> + qCritical() << "ERROR: " << message;
> + return;
> + }
>
> _capture.start();
> }
> @@ -1134,9 +1137,24 @@ void KsMainWindow::loadSession(const QString &fileName)
>
> void KsMainWindow::_initCapture()
> {
> + bool canDoAsRoot(false);
> +
> #ifdef DO_AS_ROOT
> + canDoAsRoot = true;
> +#endif
As we are repeating this, why not just do at the top of the file:
#ifdef HAS_PKEXEC
# define has_pkexec 1
#else
# define has_pkexec 0
#endif
And remove the deplicate logic.
> +
> + if (geteuid() && !canDoAsRoot)
> + return;
>
> - _capture.setProgram("kshark-su-record");
> + if (geteuid()) {
Also, "geteuid()" is a system call. It causes a call to the kernel each
time. We should cache that in a local variable instead, and use that.
uid_t euid = geteuid();
Then use "euid" for other locations. But its OK to calculated it in the
function itself. That is, don't use the value from a different
function, as we don't want to worry about adding commands that change
the euid later.
-- Steve
> + _capture.setProgram("kshark-su-record");
> + } else {
> + QStringList argv;
> +
> + _capture.setProgram("kshark-record");
> + argv << QString("-o ") + QDir::homePath();
> + _capture.setArguments(argv);
> + }
>
> connect(&_capture, &QProcess::started,
> this, &KsMainWindow::_captureStarted);
> @@ -1155,7 +1173,6 @@ void KsMainWindow::_initCapture()
> connect(&_captureLocalServer, &QLocalServer::newConnection,
> this, &KsMainWindow::_readSocket);
>
> -#endif
> }
>
> void KsMainWindow::_captureStarted()
next prev parent reply other threads:[~2019-08-09 13:33 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-09 8:06 [PATCH 0/3] Handle the case when KernelShark is started as Root Yordan Karadzhov (VMware)
2019-08-09 8:06 ` [PATCH 1/3] kernel-shark: Show warning message when running " Yordan Karadzhov (VMware)
[not found] ` <430194dd-0e96-bb3a-a2de-e4379dd540a1@gmail.com>
2019-08-09 12:13 ` Yordan Karadzhov (VMware)
2019-08-09 13:19 ` Steven Rostedt
2019-08-09 8:06 ` [PATCH 2/3] kernel-shark: Don't use pkexec " Yordan Karadzhov (VMware)
2019-08-09 13:33 ` Steven Rostedt [this message]
2019-08-09 8:06 ` [PATCH 3/3] kernel-shark: Use standart error message in KsMainWindow::_record() Yordan Karadzhov (VMware)
2019-08-09 13:35 ` Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190809093341.0936f336@gandalf.local.home \
--to=rostedt@goodmis.org \
--cc=linux-trace-devel@vger.kernel.org \
--cc=mike.auty@gmail.com \
--cc=y.karadz@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).