[gnome-system-monitor] Fixed policykit kill and renice helpers to work with both old 0.104 and new >=0.107 policikit. https



commit 2b4308d9fc2b2e367030629e79b531c4f9ae3d0a
Author: Robert Roth <robert roth off gmail com>
Date:   Sat Dec 8 02:29:57 2012 +0200

    Fixed policykit kill and renice helpers to work with both old 0.104
    and new >=0.107 policikit.
    https://bugzilla.gnome.org/show_bug.cgi?id=491462

 .gitignore                                         |    4 ++++
 Makefile.am                                        |   14 ++++++++++++--
 configure.ac                                       |    3 +++
 ... => org.gnome.gnome-system-monitor.policy.in.in |    6 ++----
 scripts/Makefile.am                                |   12 ++++++++++++
 scripts/gsm_execute_helper.c                       |   16 ++++++++++++++++
 src/Makefile.am                                    |    3 ++-
 src/procman_pkexec.cpp                             |    2 +-
 8 files changed, 52 insertions(+), 8 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 4e61ba6..1428f0c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,6 +36,7 @@ m4/
 missing
 omf.make
 org.gnome.gnome-system-monitor.policy
+org.gnome.gnome-system-monitor.policy.in
 pixmaps/Makefile
 pixmaps/Makefile.in
 po/.intltool-merge-cache
@@ -67,3 +68,6 @@ src/org.gnome.gnome-system-monitor.gschema.xml
 stamp-h1
 xmldocs.make
 *.patch
+scripts/.deps/
+scripts/gsm-kill
+scripts/gsm-renice
diff --git a/Makefile.am b/Makefile.am
index 7e828d8..24ebad7 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
 ## Process this file with automake to produce Makefile.in
 ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
 
-SUBDIRS = pixmaps po src help
+SUBDIRS = pixmaps po scripts src help
 
 uidir = $(pkgdatadir)
 ui_DATA = data/preferences.ui \
@@ -12,8 +12,14 @@ ui_DATA = data/preferences.ui \
           data/menus.ui \
           data/popups.ui
 
+
+runnabledir = $(pkglibexecdir)
+runnable_SCRIPTS = scripts/gsm-renice \
+                   scripts/gsm-kill
+
 EXTRA_DIST = \
 	$(ui_DATA) \
+	$(runnable_SCRIPTS) \
 	org.gnome.gnome-system-monitor.policy.in \
 	gnome-system-monitor.desktop.in \
 	gnome-system-monitor.doap \
@@ -21,6 +27,9 @@ EXTRA_DIST = \
 	intltool-merge.in \
 	intltool-update.in
 
+org.gnome.gnome-system-monitor.policy.in: org.gnome.gnome-system-monitor.policy.in.in Makefile
+	$(AM_V_GEN) sed -e "s|\ pkglibexecdir\@|$(pkglibexecdir)|" $< > $@
+
 @INTLTOOL_POLICY_RULE@
 polkit_policydir = $(datadir)/polkit-1/actions
 polkit_policy_in_files = org.gnome.gnome-system-monitor.policy.in
@@ -59,6 +68,7 @@ DISTCLEANFILES = \
 	intltool-merge                \
 	intltool-update               \
 	gnome-system-monitor.desktop  \
-	org.gnome.gnome-system-monitor.policy
+	org.gnome.gnome-system-monitor.policy \
+        org.gnome.gnome-system-monitor.policy.in 
 
 DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper
diff --git a/configure.ac b/configure.ac
index ca10f50..b601a7d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,6 +43,8 @@ SYSTEMD_EXCLUDED=43
 
 PKG_CHECK_MODULES(PROCMAN, glib-2.0 >= $GLIB_REQUIRED libgtop-2.0 >= $LIBGTOP_REQUIRED libwnck-3.0 >= $LIBWNCK_REQUIRED gtk+-3.0 >= $GTK_REQUIRED gnome-icon-theme >= $GNOME_ICON_THEME_REQUIRED gtkmm-3.0 >= $GTKMM_REQUIRED libxml-2.0 >= $LIBXML_REQUIRED librsvg-2.0 >= $RSVG_REQUIRED glibmm-2.4 >= $GLIBMM_REQUIRED giomm-2.4 >= $GIOMM_REQUIRED gmodule-2.0)
 
+PKG_CHECK_MODULES(SCRIPTS, glib-2.0 >= $GLIB_REQUIRED)
+
 have_systemd=no
 AC_ARG_ENABLE(systemd, AS_HELP_STRING([--disable-systemd], [disable systemd support]),,enable_systemd=no)
 if test "x$enable_systemd" != "xno"; then
@@ -102,6 +104,7 @@ YELP_HELP_INIT
 
 AC_CONFIG_FILES([
 Makefile
+scripts/Makefile
 src/Makefile
 pixmaps/Makefile
 po/Makefile.in
diff --git a/org.gnome.gnome-system-monitor.policy.in b/org.gnome.gnome-system-monitor.policy.in.in
similarity index 76%
rename from org.gnome.gnome-system-monitor.policy.in
rename to org.gnome.gnome-system-monitor.policy.in.in
index 35db3cc..b0bdeb5 100644
--- a/org.gnome.gnome-system-monitor.policy.in
+++ b/org.gnome.gnome-system-monitor.policy.in.in
@@ -15,8 +15,7 @@
       <allow_inactive>no</allow_inactive>
       <allow_active>auth_admin</allow_active>
     </defaults>
-    <annotate key="org.freedesktop.policykit.exec.path">/bin/kill</annotate>
-    <annotate key="org.freedesktop.policykit.exec.allow_gui">FALSE</annotate>
+    <annotate key="org.freedesktop.policykit.exec.path">@pkglibexecdir@/gsm-kill</annotate>
   </action>
 
   <action id="org.gnome.gnome-system-monitor.renice">
@@ -27,8 +26,7 @@
       <allow_inactive>no</allow_inactive>
       <allow_active>auth_admin</allow_active>
     </defaults>
-    <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/renice</annotate>
-    <annotate key="org.freedesktop.policykit.exec.allow_gui">FALSE</annotate>
+    <annotate key="org.freedesktop.policykit.exec.path">@pkglibexecdir@/gsm-renice</annotate>
   </action>
 
 </policyconfig>
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
new file mode 100644
index 0000000..d353005
--- /dev/null
+++ b/scripts/Makefile.am
@@ -0,0 +1,12 @@
+pkglibexec_PROGRAMS = gsm-renice gsm-kill
+
+INCLUDES = \
+    @SCRIPTS_CFLAGS@
+
+gsm_renice_SOURCES = gsm_execute_helper.c
+gsm_renice_LDADD = @SCRIPTS_LIBS@
+gsm_renice_CFLAGS = -DCOMMAND=\"renice\"
+
+gsm_kill_SOURCES = gsm_execute_helper.c
+gsm_kill_LDADD = @SCRIPTS_LIBS@
+gsm_kill_CFLAGS = -DCOMMAND=\"kill\"
diff --git a/scripts/gsm_execute_helper.c b/scripts/gsm_execute_helper.c
new file mode 100644
index 0000000..2f20a85
--- /dev/null
+++ b/scripts/gsm_execute_helper.c
@@ -0,0 +1,16 @@
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <glib.h>
+
+int main(int argc, char* argv[])
+{
+    gchar **argv_modified;
+    argv_modified = g_new0 (gchar *, argc + 1);
+    memcpy (argv_modified, argv, argc * sizeof (char*));
+    argv_modified[0] = COMMAND;
+    if ( execvp(COMMAND, argv_modified) == -1) {
+        return errno;
+    }
+    return 0;
+}
diff --git a/src/Makefile.am b/src/Makefile.am
index eb6f665..0741165 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -52,7 +52,8 @@ gnome_system_monitor_SOURCES = \
 
 gnome_system_monitor_LDADD = @PROCMAN_LIBS@ @SYSTEMD_LIBS@
 
-gnome_system_monitor_CPPFLAGS = -DGSM_DATA_DIR=\""$(pkgdatadir)"\"
+gnome_system_monitor_CPPFLAGS = -DGSM_DATA_DIR=\""$(pkgdatadir)"\" \
+                                -DGSM_LIBEXEC_DIR=\""$(pkglibexecdir)"\"
 
 specdir = $(datadir)/procman
 
diff --git a/src/procman_pkexec.cpp b/src/procman_pkexec.cpp
index 4dc4e67..355b16d 100644
--- a/src/procman_pkexec.cpp
+++ b/src/procman_pkexec.cpp
@@ -8,7 +8,7 @@ gboolean procman_pkexec_create_root_password_dialog(const char *command)
 {
     gint *exit_status = NULL;
     GError *error = NULL;
-    if (!g_spawn_command_line_sync( g_strdup_printf("pkexec %s", command), NULL, NULL, exit_status, &error)) {
+    if (!g_spawn_command_line_sync( g_strdup_printf("pkexec %s/gsm-%s", GSM_LIBEXEC_DIR, command), NULL, NULL, exit_status, &error)) {
         g_critical("Could not run pkexec(\"%s\") : %s\n",
                    command, error->message);
         g_error_free(error);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]