120 lines
3.6 KiB
Plaintext
120 lines
3.6 KiB
Plaintext
$OpenBSD: patch-gio_gunixconnection_c,v 1.3 2011/05/28 07:32:06 ajacoutot Exp $
|
|
|
|
From 77f4f5aa02458e6c7f909dc6087a39d9b75d0ba6 Mon Sep 17 00:00:00 2001
|
|
From: Antoine Jacoutot <ajacoutot@openbsd.org>
|
|
Date: Fri, 27 May 2011 13:51:08 +0000
|
|
Subject: Add glib credentials support to OpenBSD.
|
|
|
|
--- gio/gunixconnection.c.orig Sat May 21 05:29:24 2011
|
|
+++ gio/gunixconnection.c Fri May 27 15:57:02 2011
|
|
@@ -334,6 +334,7 @@ g_unix_connection_send_credentials (GUnixConnection
|
|
gboolean ret;
|
|
GOutputVector vector;
|
|
guchar nul_byte[1] = {'\0'};
|
|
+ gint num_messages;
|
|
|
|
g_return_val_if_fail (G_IS_UNIX_CONNECTION (connection), FALSE);
|
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
@@ -344,14 +345,25 @@ g_unix_connection_send_credentials (GUnixConnection
|
|
|
|
vector.buffer = &nul_byte;
|
|
vector.size = 1;
|
|
- scm = g_unix_credentials_message_new_with_credentials (credentials);
|
|
+
|
|
+ if (g_unix_credentials_message_is_supported ())
|
|
+ {
|
|
+ scm = g_unix_credentials_message_new_with_credentials (credentials);
|
|
+ num_messages = 1;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ scm = NULL;
|
|
+ num_messages = 0;
|
|
+ }
|
|
+
|
|
g_object_get (connection, "socket", &socket, NULL);
|
|
if (g_socket_send_message (socket,
|
|
NULL, /* address */
|
|
&vector,
|
|
1,
|
|
&scm,
|
|
- 1,
|
|
+ num_messages,
|
|
G_SOCKET_MSG_NONE,
|
|
cancellable,
|
|
error) != 1)
|
|
@@ -364,7 +376,8 @@ g_unix_connection_send_credentials (GUnixConnection
|
|
|
|
out:
|
|
g_object_unref (socket);
|
|
- g_object_unref (scm);
|
|
+ if (scm != NULL)
|
|
+ g_object_unref (scm);
|
|
g_object_unref (credentials);
|
|
return ret;
|
|
}
|
|
@@ -497,27 +510,46 @@ g_unix_connection_receive_credentials (GUnixConnection
|
|
goto out;
|
|
}
|
|
|
|
- if (nscm != 1)
|
|
+ if (g_unix_credentials_message_is_supported ())
|
|
{
|
|
- g_set_error (error,
|
|
- G_IO_ERROR,
|
|
- G_IO_ERROR_FAILED,
|
|
- _("Expecting 1 control message, got %d"),
|
|
- nscm);
|
|
- goto out;
|
|
- }
|
|
+ if (nscm != 1)
|
|
+ {
|
|
+ g_set_error (error,
|
|
+ G_IO_ERROR,
|
|
+ G_IO_ERROR_FAILED,
|
|
+ _("Expecting 1 control message, got %d"),
|
|
+ nscm);
|
|
+ goto out;
|
|
+ }
|
|
|
|
- if (!G_IS_UNIX_CREDENTIALS_MESSAGE (scms[0]))
|
|
+ if (!G_IS_UNIX_CREDENTIALS_MESSAGE (scms[0]))
|
|
+ {
|
|
+ g_set_error_literal (error,
|
|
+ G_IO_ERROR,
|
|
+ G_IO_ERROR_FAILED,
|
|
+ _("Unexpected type of ancillary data"));
|
|
+ goto out;
|
|
+ }
|
|
+
|
|
+ ret = g_unix_credentials_message_get_credentials (G_UNIX_CREDENTIALS_MESSAGE (scms[0]));
|
|
+ g_object_ref (ret);
|
|
+ }
|
|
+ else
|
|
{
|
|
- g_set_error_literal (error,
|
|
- G_IO_ERROR,
|
|
- G_IO_ERROR_FAILED,
|
|
- _("Unexpected type of ancillary data"));
|
|
- goto out;
|
|
+ if (nscm != 0)
|
|
+ {
|
|
+ g_set_error (error,
|
|
+ G_IO_ERROR,
|
|
+ G_IO_ERROR_FAILED,
|
|
+ _("Not expecting control message, but got %d"),
|
|
+ nscm);
|
|
+ goto out;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ ret = g_socket_get_credentials (socket, error);
|
|
+ }
|
|
}
|
|
-
|
|
- ret = g_unix_credentials_message_get_credentials (G_UNIX_CREDENTIALS_MESSAGE (scms[0]));
|
|
- g_object_ref (ret);
|
|
|
|
out:
|
|
|