[PATCH 49/63] policycoreutils: restorecond: make restorecond -u exit

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

 



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


   This patch looks good to me. acked.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk6wTx4ACgkQrlYvE4MpobPA6ACfZeAur5Hn/gSkFUJMOdtbCoGn
S1MAnjcUzDWIsSM+9POsRmRI4JxlxEVw
=273V
-----END PGP SIGNATURE-----
>From 34999f94347fbececde40e562a6ac0656e464b66 Mon Sep 17 00:00:00 2001
From: Dan Walsh <dwalsh@xxxxxxxxxx>
Date: Thu, 6 Oct 2011 16:05:03 -0400
Subject: [PATCH 49/63] policycoreutils: restorecond: make restorecond -u exit
 when terminal closes

Make restorecond -u watch the terminal io channel for and exit indicator
and then exit itself if it is not being run from dbus.  If being run
from dbus, dbus takes care of the session cleanup.

Signed-off-by: Eric Paris <eparis@xxxxxxxxxx>
---
 policycoreutils/restorecond/user.c |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/policycoreutils/restorecond/user.c b/policycoreutils/restorecond/user.c
index ade3fb8..4257058 100644
--- a/policycoreutils/restorecond/user.c
+++ b/policycoreutils/restorecond/user.c
@@ -123,6 +123,11 @@ io_channel_callback
        sizeof (buffer),
        &bytes_read);
 
+    if (! bytes_read) {
+	    /* Sesssion/Terminal Ended */
+	    exit(0);
+    }
+
     while (i < bytes_read) {
 	    struct inotify_event *event;
 	    event = (struct inotify_event *)&buffer[i];
@@ -148,6 +153,7 @@ io_channel_callback
 
   if (condition & G_IO_HUP) {
     g_io_channel_close (source);
+    exit(0);
     return FALSE;
   }
 
@@ -210,6 +216,13 @@ static int local_server() {
 			perror("flock");
 		return -1;
 	}
+	/* watch for stdin/terminal going away */
+	GIOChannel *in = g_io_channel_unix_new(0);
+	g_io_add_watch_full( in,
+			     G_PRIORITY_HIGH,
+			     G_IO_IN|G_IO_ERR|G_IO_HUP,
+			     io_channel_callback, NULL, NULL);
+
 	return 0;
 }
 
@@ -221,7 +234,7 @@ int server(int master_fd, const char *watch_file) {
 #ifdef HAVE_DBUS
     if (dbus_server(loop) != 0)
 #endif /* HAVE_DBUS */
-	    if (local_server(loop))
+	    if (local_server())
 		    goto end;
 
     read_config(master_fd, watch_file);
-- 
1.7.7


[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux