summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Zeuthen <david@fubar.dk>2006-03-16 23:28:47 +0000
committerDavid Zeuthen <david@fubar.dk>2006-03-16 23:28:47 +0000
commit4fa68a3d911f91c2a6c8af07c673ee8656d3b082 (patch)
tree02b17aba244b90b9a4e3ab5831eb7e9b30c6d962
parentf6dd9fa05c574803a2594ed93abb986ae6ec4dcf (diff)
downloadpolkit-4fa68a3d911f91c2a6c8af07c673ee8656d3b082.tar.gz
Unref when the child dies (polkit_session_initiate_auth): Ref the object
after creating child (polkit_session_initiator_disconnected): Make sure to nuke the kids
-rw-r--r--ChangeLog6
-rw-r--r--polkitd/main.c6
-rw-r--r--polkitd/polkit-session.c11
3 files changed, 22 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index f5dde47..1ecfc60 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-03-16 David Zeuthen <davidz@redhat.com>
+
+ * polkitd/polkit-session.c (data_from_pam): Unref when the child dies
+ (polkit_session_initiate_auth): Ref the object after creating child
+ (polkit_session_initiator_disconnected): Make sure to nuke the kids
+
2006-03-15 David Zeuthen <davidz@redhat.com>
* polkitd/polkit-manager.h: Include sys/types.h; fixed fd.o
diff --git a/polkitd/main.c b/polkitd/main.c
index 49e2810..f996540 100644
--- a/polkitd/main.c
+++ b/polkitd/main.c
@@ -214,8 +214,12 @@ main (int argc, char *argv[])
g_error_free (error);
goto out;
}
-
+ if (request_name_result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
+ g_warning ("There is already a primary owner of the name org.freedesktop.PolicyKit");
+ goto out;
+ }
+
manager = polkit_manager_new (bus, bus_proxy);
diff --git a/polkitd/polkit-session.c b/polkitd/polkit-session.c
index 2356bdf..4e28ab5 100644
--- a/polkitd/polkit-session.c
+++ b/polkitd/polkit-session.c
@@ -688,6 +688,10 @@ data_from_pam (GIOChannel *source,
session->priv->child_pid = 0;
waitpid (session->priv->child_pid, &status, 0);
}
+
+ /* release the ref we made when creating the child */
+ g_object_unref (session);
+
/* remove the source */
return FALSE;
}
@@ -773,6 +777,9 @@ polkit_session_initiate_auth (PolicyKitSession *session,
session->priv->pam_channel_write = g_io_channel_unix_new (fdsb[1]);
session->priv->pam_channel = g_io_channel_unix_new (fds[0]);
+ /* ref because we need the object in data_from_pam */
+ g_object_ref (session);
+
g_io_add_watch (session->priv->pam_channel,
G_IO_IN | G_IO_ERR | G_IO_HUP,
data_from_pam,
@@ -987,6 +994,10 @@ polkit_session_initiator_disconnected (PolicyKitSession *session)
{
/*g_debug ("initiator disconnected");*/
+ /* if we have a child... kill it */
+ if (session->priv->child_pid != 0)
+ kill (session->priv->child_pid, SIGTERM);
+
if (session->priv->have_granted_temp_privileges) {
if (!polkit_manager_remove_temporary_privilege (session->priv->manager,
session->priv->grant_to_uid,