[sysprof] libsysprof: remove authorization from perf source
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sysprof] libsysprof: remove authorization from perf source
- Date: Wed, 29 May 2019 22:19:18 +0000 (UTC)
commit eff557db597add2081f6b0405b03082408b93a5d
Author: Christian Hergert <chergert redhat com>
Date: Fri May 10 09:24:28 2019 -0700
libsysprof: remove authorization from perf source
This will be done more generically from the local profiler
later on.
src/libsysprof/sysprof-perf-source.c | 118 +----------------------------------
1 file changed, 3 insertions(+), 115 deletions(-)
---
diff --git a/src/libsysprof/sysprof-perf-source.c b/src/libsysprof/sysprof-perf-source.c
index 895fa2e..1857c6c 100644
--- a/src/libsysprof/sysprof-perf-source.c
+++ b/src/libsysprof/sysprof-perf-source.c
@@ -725,8 +725,6 @@ sysprof_perf_source_start (SysprofSource *source)
self->running = TRUE;
sysprof_perf_counter_enable (self->counter);
-
- sysprof_source_emit_ready (source);
}
static void
@@ -772,123 +770,13 @@ sysprof_perf_source_add_pid (SysprofSource *source,
g_hash_table_add (self->pids, GINT_TO_POINTER (pid));
}
-static void
-sysprof_perf_source_emit_ready (SysprofPerfSource *self)
-{
- g_assert (SYSPROF_IS_PERF_SOURCE (self));
-
- self->is_ready = TRUE;
- sysprof_source_emit_ready (SYSPROF_SOURCE (self));
-}
-
-static void
-sysprof_perf_source_authorize_cb (GObject *object,
- GAsyncResult *result,
- gpointer user_data)
-{
- g_autoptr(SysprofPerfSource) self = user_data;
- g_autoptr(GError) error = NULL;
-
- g_assert (G_IS_ASYNC_RESULT (result));
-
- if (!sysprof_perf_counter_authorize_finish (result, &error))
- {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED))
- {
- sysprof_source_emit_failed (SYSPROF_SOURCE (self), error);
- return;
- }
- }
-
- sysprof_perf_source_emit_ready (self);
-}
-
-static gboolean
-user_owns_pid (uid_t uid,
- GPid pid)
-{
- g_autofree gchar *contents = NULL;
- g_autofree gchar *path = NULL;
- g_autoptr(SysprofLineReader) reader = NULL;
- gchar *line;
- gsize len;
- gsize line_len;
-
- path = g_strdup_printf ("/proc/%u/status", (guint)pid);
-
- if (!g_file_get_contents (path, &contents, &len, NULL))
- return FALSE;
-
- reader = sysprof_line_reader_new (contents, len);
-
- while (NULL != (line = (gchar *)sysprof_line_reader_next (reader, &line_len)))
- {
- if (g_str_has_prefix (line, "Uid:"))
- {
- g_auto(GStrv) parts = NULL;
- guint i;
-
- line[line_len] = '\0';
- parts = g_strsplit (line, "\t", 0);
-
- for (i = 1; parts[i]; i++)
- {
- gint64 v64;
-
- v64 = g_ascii_strtoll (parts[i], NULL, 10);
-
- if (v64 > 0 && v64 <= G_MAXUINT)
- {
- if ((uid_t)v64 == uid)
- return TRUE;
- }
- }
- }
- }
-
- return FALSE;
-}
-
-static gboolean
-sysprof_perf_source_needs_auth (SysprofPerfSource *self)
-{
- GHashTableIter iter;
- gpointer key;
- uid_t uid;
-
- g_assert (SYSPROF_IS_PERF_SOURCE (self));
-
- if (g_hash_table_size (self->pids) == 0)
- return TRUE;
-
- uid = getuid ();
-
- g_hash_table_iter_init (&iter, self->pids);
-
- while (g_hash_table_iter_next (&iter, &key, NULL))
- {
- GPid pid = GPOINTER_TO_INT (key);
-
- if (!user_owns_pid (uid, pid))
- return TRUE;
- }
-
- return FALSE;
-}
-
static void
sysprof_perf_source_prepare (SysprofSource *source)
{
- SysprofPerfSource *self = (SysprofPerfSource *)source;
+ g_assert (SYSPROF_IS_PERF_SOURCE (source));
- g_assert (SYSPROF_IS_PERF_SOURCE (self));
-
- if (sysprof_perf_source_needs_auth (self))
- sysprof_perf_counter_authorize_async (NULL,
- sysprof_perf_source_authorize_cb,
- g_object_ref (self));
- else
- sysprof_perf_source_emit_ready (self);
+ SYSPROF_PERF_SOURCE (source)->is_ready = TRUE;
+ sysprof_source_emit_ready (source);
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]