[glib/gdbus-merge] Set up gtk-doc for GDBus
- From: David Zeuthen <davidz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/gdbus-merge] Set up gtk-doc for GDBus
- Date: Thu, 6 May 2010 19:33:12 +0000 (UTC)
commit c490c14f4e3fbbe8c74b26e6cacac31b0e744c92
Author: David Zeuthen <davidz redhat com>
Date: Thu May 6 15:31:45 2010 -0400
Set up gtk-doc for GDBus
Also move send_credentials() and receive_credentials() to
GUnixConnection. This code might change, discussion is still ongoing
in
https://bugzilla.gnome.org/show_bug.cgi?id=617483.
docs/reference/gio/gio-docs.xml | 21 ++
docs/reference/gio/gio-sections.txt | 390 +++++++++++++++++++++++++++++++++++
docs/reference/gio/gio.types | 11 +
gio/gcredentials.c | 4 +-
gio/gdbusaddress.c | 2 +-
gio/gdbusauth.c | 189 -----------------
gio/gdbusauthobserver.c | 2 +-
gio/gdbusconnection.c | 8 +-
gio/gdbuserror.c | 2 +-
gio/gdbusintrospection.c | 2 +-
gio/gdbusmessage.c | 2 +-
gio/gdbusmethodinvocation.c | 2 +-
gio/gdbusnameowning.c | 4 +-
gio/gdbusnamewatching.c | 4 +-
gio/gdbusproxy.c | 2 +-
gio/gdbusproxywatching.c | 4 +-
gio/gdbusserver.c | 4 +-
gio/gdbusutils.c | 2 +-
gio/gunixconnection.c | 258 +++++++++++++++++++++++
gio/gunixconnection.h | 10 +
20 files changed, 712 insertions(+), 211 deletions(-)
---
diff --git a/docs/reference/gio/gio-docs.xml b/docs/reference/gio/gio-docs.xml
index 8ea9f38..305dc7a 100644
--- a/docs/reference/gio/gio-docs.xml
+++ b/docs/reference/gio/gio-docs.xml
@@ -107,6 +107,8 @@
<xi:include href="xml/gsocketcontrolmessage.xml"/>
<xi:include href="xml/gunixfdlist.xml"/>
<xi:include href="xml/gunixfdmessage.xml"/>
+ <xi:include href="xml/gcredentials.xml"/>
+ <xi:include href="xml/gunixcredentialsmessage.xml"/>
</chapter>
<chapter id="resolver">
<title>DNS resolution</title>
@@ -124,6 +126,25 @@
<xi:include href="xml/gsocketservice.xml"/>
<xi:include href="xml/gthreadedsocketservice.xml"/>
</chapter>
+ <chapter id="gdbus-lowlevel">
+ <title>Lowlevel D-Bus Support</title>
+ <xi:include href="xml/gdbusutils.xml"/>
+ <xi:include href="xml/gdbusaddress.xml"/>
+ <xi:include href="xml/gdbusintrospection.xml"/>
+ <xi:include href="xml/gdbuserror.xml"/>
+ <xi:include href="xml/gdbusmessage.xml"/>
+ <xi:include href="xml/gdbusconnection.xml"/>
+ <xi:include href="xml/gdbusmethodinvocation.xml"/>
+ <xi:include href="xml/gdbusproxy.xml"/>
+ <xi:include href="xml/gdbusserver.xml"/>
+ <xi:include href="xml/gdbusauthobserver.xml"/>
+ </chapter>
+ <chapter id="gdbus-convenience">
+ <title>Highlevel D-Bus Support</title>
+ <xi:include href="xml/gdbusnameowning.xml"/>
+ <xi:include href="xml/gdbusnamewatching.xml"/>
+ <xi:include href="xml/gdbusproxywatching.xml"/>
+ </chapter>
<chapter id="utils">
<title>Utilities</title>
<xi:include href="xml/gfilenamecompleter.xml"/>
diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt
index fd2c338..06d8199 100644
--- a/docs/reference/gio/gio-sections.txt
+++ b/docs/reference/gio/gio-sections.txt
@@ -1807,6 +1807,8 @@ g_tcp_connection_get_graceful_disconnect
GUnixConnection
g_unix_connection_receive_fd
g_unix_connection_send_fd
+g_unix_connection_receive_credentials
+g_unix_connection_send_credentials
<SUBSECTION>
g_socket_connection_factory_create_connection
g_socket_connection_factory_lookup_type
@@ -2167,3 +2169,391 @@ G_SETTINGS_SCHEMA_GET_CLASS
<SUBSECTION Private>
g_settings_get_type
</SECTION>
+
+<SECTION>
+<FILE>gunixcredentialsmessage</FILE>
+<TITLE>GUnixCredentialsMessage</TITLE>
+GUnixCredentialsMessage
+GUnixCredentialsMessageClass
+g_unix_credentials_message_new
+g_unix_credentials_message_new_with_credentials
+g_unix_credentials_message_get_credentials
+g_unix_credentials_message_is_supported
+<SUBSECTION Standard>
+G_IS_UNIX_CREDENTIALS_MESSAGE
+G_IS_UNIX_CREDENTIALS_MESSAGE_CLASS
+G_TYPE_UNIX_CREDENTIALS_MESSAGE
+G_UNIX_CREDENTIALS_MESSAGE
+G_UNIX_CREDENTIALS_MESSAGE_CLASS
+G_UNIX_CREDENTIALS_MESSAGE_GET_CLASS
+<SUBSECTION Private>
+GUnixCredentialsMessagePrivate
+g_unix_credentials_message_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gcredentials</FILE>
+<TITLE>GCredentials</TITLE>
+GCredentials
+GCredentialsClass
+GCredentialType
+g_credentials_new
+g_credentials_new_for_process
+g_credentials_new_for_string
+g_credentials_to_string
+g_credentials_has_unix_user
+g_credentials_get_unix_user
+g_credentials_set_unix_user
+g_credentials_has_unix_group
+g_credentials_get_unix_group
+g_credentials_set_unix_group
+g_credentials_has_unix_process
+g_credentials_get_unix_process
+g_credentials_set_unix_process
+g_credentials_has_windows_user
+g_credentials_get_windows_user
+g_credentials_set_windows_user
+<SUBSECTION Standard>
+G_CREDENTIALS
+G_IS_CREDENTIALS
+G_TYPE_CREDENTIALS
+g_credentials_get_type
+G_CREDENTIALS_CLASS
+G_IS_CREDENTIALS_CLASS
+G_CREDENTIALS_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>gdbusaddress</FILE>
+g_dbus_is_address
+g_dbus_is_supported_address
+g_dbus_address_get_stream
+g_dbus_address_get_stream_finish
+g_dbus_address_get_stream_sync
+g_dbus_address_get_for_bus_sync
+</SECTION>
+
+<SECTION>
+<FILE>gdbusutils</FILE>
+g_dbus_is_activated
+g_dbus_generate_guid
+g_dbus_is_guid
+g_dbus_is_name
+g_dbus_is_unique_name
+g_dbus_is_member_name
+g_dbus_is_interface_name
+</SECTION>
+
+<SECTION>
+<FILE>gdbusauthobserver</FILE>
+<TITLE>GDBusAuthObserver</TITLE>
+GDBusAuthObserver
+GDBusAuthObserverClass
+g_dbus_auth_observer_new
+g_dbus_auth_observer_deny_authenticated_peer
+<SUBSECTION Standard>
+G_DBUS_AUTH_OBSERVER
+G_IS_DBUS_AUTH_OBSERVER
+G_TYPE_DBUS_AUTH_OBSERVER
+g_dbus_server_get_gtype
+G_DBUS_AUTH_OBSERVER_CLASS
+G_IS_DBUS_AUTH_OBSERVER_CLASS
+G_DBUS_AUTH_OBSERVER_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>gdbusserver</FILE>
+<TITLE>GDBusServer</TITLE>
+GDBusServer
+GDBusServerClass
+GDBusServerFlags
+g_dbus_server_new_sync
+g_dbus_server_start
+g_dbus_server_stop
+g_dbus_server_is_active
+g_dbus_server_get_guid
+g_dbus_server_get_flags
+g_dbus_server_get_client_address
+<SUBSECTION Standard>
+G_DBUS_SERVER
+G_IS_DBUS_SERVER
+G_TYPE_DBUS_SERVER
+g_dbus_server_get_gtype
+G_DBUS_SERVER_CLASS
+G_IS_DBUS_SERVER_CLASS
+G_DBUS_SERVER_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>gdbusmessage</FILE>
+<TITLE>GDBusMessage</TITLE>
+GDBusMessageType
+GDBusMessageFlags
+GDBusMessageHeaderField
+GDBusMessage
+GDBusMessageClass
+g_dbus_message_new
+g_dbus_message_new_signal
+g_dbus_message_new_method_call
+g_dbus_message_new_method_reply
+g_dbus_message_new_method_error
+g_dbus_message_new_method_error_valist
+g_dbus_message_new_method_error_literal
+g_dbus_message_print
+g_dbus_message_get_type
+g_dbus_message_set_type
+g_dbus_message_get_serial
+g_dbus_message_set_serial
+g_dbus_message_get_flags
+g_dbus_message_set_flags
+g_dbus_message_get_body
+g_dbus_message_set_body
+g_dbus_message_get_unix_fd_list
+g_dbus_message_set_unix_fd_list
+g_dbus_message_get_header_fields
+g_dbus_message_get_header
+g_dbus_message_set_header
+g_dbus_message_get_destination
+g_dbus_message_set_destination
+g_dbus_message_get_error_name
+g_dbus_message_set_error_name
+g_dbus_message_get_interface
+g_dbus_message_set_interface
+g_dbus_message_get_member
+g_dbus_message_set_member
+g_dbus_message_get_path
+g_dbus_message_set_path
+g_dbus_message_get_reply_serial
+g_dbus_message_set_reply_serial
+g_dbus_message_get_sender
+g_dbus_message_set_sender
+g_dbus_message_get_signature
+g_dbus_message_set_signature
+g_dbus_message_get_arg0
+g_dbus_message_to_blob
+g_dbus_message_bytes_needed
+g_dbus_message_new_from_blob
+g_dbus_message_to_gerror
+<SUBSECTION Standard>
+G_DBUS_MESSAGE
+G_IS_DBUS_MESSAGE
+G_TYPE_DBUS_MESSAGE
+g_dbus_message_get_gtype
+G_DBUS_MESSAGE_CLASS
+G_IS_DBUS_MESSAGE_CLASS
+G_DBUS_MESSAGE_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>gdbusconnection</FILE>
+<TITLE>GDBusConnection</TITLE>
+GBusType
+g_bus_get
+g_bus_get_finish
+g_bus_get_sync
+GDBusConnection
+GDBusConnectionClass
+GDBusConnectionFlags
+g_dbus_connection_new
+g_dbus_connection_new_finish
+g_dbus_connection_new_sync
+g_dbus_connection_new_for_address
+g_dbus_connection_new_for_address_finish
+g_dbus_connection_new_for_address_sync
+GDBusCapabilityFlags
+g_dbus_connection_close
+g_dbus_connection_is_closed
+g_dbus_connection_get_exit_on_close
+g_dbus_connection_set_exit_on_close
+g_dbus_connection_get_stream
+g_dbus_connection_get_guid
+g_dbus_connection_get_unique_name
+g_dbus_connection_get_capabilities
+g_dbus_connection_get_peer_credentials
+GDBusInvokeMethodFlags
+g_dbus_connection_invoke_method
+g_dbus_connection_invoke_method_finish
+g_dbus_connection_invoke_method_sync
+g_dbus_connection_emit_signal
+GDBusSignalCallback
+g_dbus_connection_signal_subscribe
+g_dbus_connection_signal_unsubscribe
+g_dbus_connection_send_message
+g_dbus_connection_send_message_with_reply
+g_dbus_connection_send_message_with_reply_finish
+g_dbus_connection_send_message_with_reply_sync
+GDBusMessageFilterFunction
+g_dbus_connection_add_filter
+g_dbus_connection_remove_filter
+GDBusInterfaceVTable
+GDBusInterfaceMethodCallFunc
+GDBusInterfaceGetPropertyFunc
+GDBusInterfaceSetPropertyFunc
+g_dbus_connection_register_object
+g_dbus_connection_unregister_object
+GDBusSubtreeVTable
+GDBusSubtreeEnumerateFunc
+GDBusSubtreeIntrospectFunc
+GDBusSubtreeDispatchFunc
+GDBusSubtreeFlags
+g_dbus_connection_register_subtree
+g_dbus_connection_unregister_subtree
+<SUBSECTION Standard>
+G_DBUS_CONNECTION
+G_IS_DBUS_CONNECTION
+G_TYPE_DBUS_CONNECTION
+g_dbus_connection_get_type
+G_DBUS_CONNECTION_CLASS
+G_IS_DBUS_CONNECTION_CLASS
+G_DBUS_CONNECTION_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>gdbusmethodinvocation</FILE>
+<TITLE>GDBusMethodInvocation</TITLE>
+GDBusMethodInvocation
+GDBusMethodInvocationClass
+g_dbus_method_invocation_new
+g_dbus_method_invocation_get_sender
+g_dbus_method_invocation_get_object_path
+g_dbus_method_invocation_get_interface_name
+g_dbus_method_invocation_get_method_name
+g_dbus_method_invocation_get_method_info
+g_dbus_method_invocation_get_connection
+g_dbus_method_invocation_get_message
+g_dbus_method_invocation_get_parameters
+g_dbus_method_invocation_get_user_data
+g_dbus_method_invocation_return_value
+g_dbus_method_invocation_return_error
+g_dbus_method_invocation_return_error_valist
+g_dbus_method_invocation_return_error_literal
+g_dbus_method_invocation_return_gerror
+g_dbus_method_invocation_return_dbus_error
+<SUBSECTION Standard>
+G_DBUS_METHOD_INVOCATION
+G_IS_DBUS_METHOD_INVOCATION
+G_TYPE_DBUS_METHOD_INVOCATION
+g_dbus_method_invocation_get_type
+G_DBUS_METHOD_INVOCATION_CLASS
+G_IS_DBUS_METHOD_INVOCATION_CLASS
+G_DBUS_METHOD_INVOCATION_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>gdbusnameowning</FILE>
+GBusAcquiredCallback
+GBusNameAcquiredCallback
+GBusNameLostCallback
+GBusNameOwnerFlags
+g_bus_own_name
+g_bus_own_name_on_connection
+g_bus_unown_name
+</SECTION>
+
+<SECTION>
+<FILE>gdbusnamewatching</FILE>
+GBusNameAppearedCallback
+GBusNameVanishedCallback
+GBusNameWatcherFlags
+g_bus_watch_name
+g_bus_unwatch_name
+</SECTION>
+
+<SECTION>
+<FILE>gdbusproxywatching</FILE>
+GBusProxyAppearedCallback
+GBusProxyVanishedCallback
+g_bus_watch_proxy
+g_bus_unwatch_proxy
+</SECTION>
+
+<SECTION>
+<FILE>gdbuserror</FILE>
+GDBusError
+G_DBUS_ERROR
+g_dbus_error_is_remote_error
+g_dbus_error_get_remote_error
+g_dbus_error_strip_remote_error
+GDBusErrorEntry
+g_dbus_error_register_error_domain
+g_dbus_error_register_error
+g_dbus_error_unregister_error
+g_dbus_error_new_for_dbus_error
+g_dbus_error_set_dbus_error
+g_dbus_error_set_dbus_error_valist
+g_dbus_error_encode_gerror
+</SECTION>
+
+<SECTION>
+<FILE>gdbusproxy</FILE>
+<TITLE>GDBusProxy</TITLE>
+GDBusProxyFlags
+GDBusProxy
+GDBusProxyClass
+g_dbus_proxy_new
+g_dbus_proxy_new_finish
+g_dbus_proxy_new_sync
+g_dbus_proxy_get_flags
+g_dbus_proxy_get_connection
+g_dbus_proxy_get_unique_bus_name
+g_dbus_proxy_get_object_path
+g_dbus_proxy_get_interface_name
+g_dbus_proxy_get_default_timeout
+g_dbus_proxy_set_default_timeout
+g_dbus_proxy_get_cached_property_names
+g_dbus_proxy_get_cached_property
+g_dbus_proxy_set_interface_info
+g_dbus_proxy_get_interface_info
+g_dbus_proxy_invoke_method
+g_dbus_proxy_invoke_method_finish
+g_dbus_proxy_invoke_method_sync
+<SUBSECTION Standard>
+G_DBUS_PROXY
+G_IS_DBUS_PROXY
+G_TYPE_DBUS_PROXY
+g_dbus_proxy_get_type
+G_DBUS_PROXY_CLASS
+G_IS_DBUS_PROXY_CLASS
+G_DBUS_PROXY_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>gdbusintrospection</FILE>
+GDBusAnnotationInfo
+GDBusArgInfo
+GDBusMethodInfo
+GDBusSignalInfo
+GDBusPropertyInfoFlags
+GDBusPropertyInfo
+GDBusInterfaceInfo
+GDBusNodeInfo
+g_dbus_annotation_info_lookup
+g_dbus_interface_info_lookup_method
+g_dbus_interface_info_lookup_signal
+g_dbus_interface_info_lookup_property
+g_dbus_interface_info_generate_xml
+g_dbus_node_info_new_for_xml
+g_dbus_node_info_lookup_interface
+g_dbus_node_info_generate_xml
+G_TYPE_DBUS_NODE_INFO
+G_TYPE_DBUS_INTERFACE_INFO
+G_TYPE_DBUS_METHOD_INFO
+G_TYPE_DBUS_SIGNAL_INFO
+G_TYPE_DBUS_PROPERTY_INFO
+G_TYPE_DBUS_ARG_INFO
+G_TYPE_DBUS_ANNOTATION_INFO
+g_dbus_node_info_ref
+g_dbus_interface_info_ref
+g_dbus_method_info_ref
+g_dbus_signal_info_ref
+g_dbus_property_info_ref
+g_dbus_arg_info_ref
+g_dbus_annotation_info_ref
+g_dbus_node_info_unref
+g_dbus_interface_info_unref
+g_dbus_method_info_unref
+g_dbus_signal_info_unref
+g_dbus_property_info_unref
+g_dbus_arg_info_unref
+g_dbus_annotation_info_unref
+</SECTION>
diff --git a/docs/reference/gio/gio.types b/docs/reference/gio/gio.types
index e8f9738..e1d65a9 100644
--- a/docs/reference/gio/gio.types
+++ b/docs/reference/gio/gio.types
@@ -107,3 +107,14 @@ g_volume_monitor_get_type
g_zlib_compressor_get_type
g_zlib_compressor_format_get_type
g_zlib_decompressor_get_type
+g_dbus_message_get_gtype
+g_dbus_connection_get_type
+g_bus_type_get_type
+g_bus_name_owner_flags_get_type
+g_dbus_error_get_type
+g_dbus_proxy_get_type
+g_dbus_method_invocation_get_type
+g_dbus_server_get_type
+g_dbus_auth_observer_get_type
+g_credentials_get_type
+g_unix_credentials_message_get_type
diff --git a/gio/gcredentials.c b/gio/gcredentials.c
index e1712fe..1ca2543 100644
--- a/gio/gcredentials.c
+++ b/gio/gcredentials.c
@@ -36,8 +36,8 @@
/**
* SECTION:gcredentials
- * @short_description: Credentials
- * @include: gdbus/gdbus.h
+ * @short_description: An object containing credentials
+ * @include: gio/gio.h
*
* The #GCredentials type is used for storing information that can be
* used for identifying, authenticating and authorizing processes.
diff --git a/gio/gdbusaddress.c b/gio/gdbusaddress.c
index e50e737..6cfa5f9 100644
--- a/gio/gdbusaddress.c
+++ b/gio/gdbusaddress.c
@@ -40,7 +40,7 @@
* SECTION:gdbusaddress
* @title: D-Bus Addresses
* @short_description: D-Bus connection endpoints
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* Routines for working with D-Bus addresses.
*/
diff --git a/gio/gdbusauth.c b/gio/gdbusauth.c
index 850db9a..2d47060 100644
--- a/gio/gdbusauth.c
+++ b/gio/gdbusauth.c
@@ -78,195 +78,6 @@ debug_print (const gchar *message, ...)
#endif
}
-
-/* ---------------------------------------------------------------------------------------------------- */
-/* TODO: move to gio */
-
-/**
- * g_unix_connection_send_credentials:
- * @connection: A #GUnixConnection.
- * @credentials: A #GCredentials to send.
- * @cancellable: A #GCancellable or %NULL.
- * @error: Return location for error or %NULL.
- *
- * Passes the credentials stored in @credentials to the recieving side
- * of the connection. The recieving end has to call
- * g_unix_connection_receive_credentials() (or similar) to accept the
- * credentials.
- *
- * The credentials which the sender specifies are checked by the
- * kernel. A process with effective user ID 0 is allowed to specify
- * values that do not match its own. This means that the credentials
- * can be used to authenticate other connections.
- *
- * As well as sending the credentials this also writes a single NUL
- * byte to the stream, as this is required for credentials passing to
- * work on some implementations.
- *
- * Returns: %TRUE on success, %FALSE if @error is set.
- *
- * Since: 2.26
- */
-static gboolean
-g_unix_connection_send_credentials (GUnixConnection *connection,
- GCredentials *credentials,
- GCancellable *cancellable,
- GError **error)
-{
- GSocketControlMessage *scm;
- GSocket *socket;
- gboolean ret;
- GOutputVector vector;
- guchar nul_byte[1] = {'\0'};
-
- g_return_val_if_fail (G_IS_UNIX_CONNECTION (connection), FALSE);
- g_return_val_if_fail (G_IS_CREDENTIALS (credentials), FALSE);
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
- ret = FALSE;
-
- vector.buffer = &nul_byte;
- vector.size = 1;
- scm = g_unix_credentials_message_new_with_credentials (credentials);
- g_object_get (connection, "socket", &socket, NULL);
- if (g_socket_send_message (socket,
- NULL, /* address */
- &vector,
- 1,
- &scm,
- 1,
- G_SOCKET_MSG_NONE,
- cancellable,
- error) != 1)
- {
- g_prefix_error (error, _("Error sending credentials: "));
- goto out;
- }
-
- ret = TRUE;
-
- out:
- g_object_unref (socket);
- g_object_unref (scm);
- return ret;
-}
-
-/**
- * g_unix_connection_receive_credentials:
- * @connection: A #GUnixConnection.
- * @cancellable: A #GCancellable or %NULL.
- * @error: Return location for error or %NULL.
- *
- * Receives credentials from the sending end of the connection. The
- * sending end has to call g_unix_connection_send_credentials() (or
- * similar) for this to work.
- *
- * As well as reading the credentials this also reads (and discards) a
- * single byte from the stream, as this is required for credentials
- * passing to work on some implementations.
- *
- * Returns: Received credentials on success (free with
- * g_object_unref()), %NULL if @error is set.
- *
- * Since: 2.26
- */
-static GCredentials *
-g_unix_connection_receive_credentials (GUnixConnection *connection,
- GCancellable *cancellable,
- GError **error)
-{
- GCredentials *ret;
- GSocketControlMessage **scms;
- gint nscm;
- GSocket *socket;
- gint n;
- volatile GType credentials_message_gtype;
- gssize num_bytes_read;
-
- g_return_val_if_fail (G_IS_UNIX_CONNECTION (connection), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- ret = NULL;
- scms = NULL;
-
- g_object_get (connection, "socket", &socket, NULL);
-
-#if 1
- /* TODO: Move this to gsocket.c... */
- {
- int opt_val = 1;
- if (setsockopt (g_socket_get_fd (socket),
- SOL_SOCKET,
- SO_PASSCRED,
- &opt_val,
- sizeof opt_val) != 0)
- {
- g_warning ("boo, error setting SO_PASSCRED: %m");
- }
- }
-#endif
-
- /* ensure the type of GUnixCredentialsMessage has been registered with the type system */
- credentials_message_gtype = G_TYPE_UNIX_CREDENTIALS_MESSAGE;
- num_bytes_read = g_socket_receive_message (socket,
- NULL, /* GSocketAddress **address */
- NULL,
- 0,
- &scms,
- &nscm,
- NULL,
- cancellable,
- error);
- if (num_bytes_read != 1)
- {
- /* Handle situation where g_socket_receive_message() returns
- * 0 bytes and not setting @error
- */
- if (num_bytes_read == 0 && error != NULL && *error == NULL)
- {
- g_set_error_literal (error,
- G_IO_ERROR,
- G_IO_ERROR_FAILED,
- _("Expecting to read a single byte for receiving credentials but read zero bytes"));
- }
- 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]))
- {
- 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);
-
- out:
- if (scms != NULL)
- {
- for (n = 0; n < nscm; n++)
- g_object_unref (scms[n]);
- g_free (scms);
- }
- g_object_unref (socket);
- return ret;
-}
-
-/* ---------------------------------------------------------------------------------------------------- */
-
typedef struct
{
const gchar *name;
diff --git a/gio/gdbusauthobserver.c b/gio/gdbusauthobserver.c
index f0411ab..4de6722 100644
--- a/gio/gdbusauthobserver.c
+++ b/gio/gdbusauthobserver.c
@@ -33,7 +33,7 @@
/**
* SECTION:gdbusauthobserver
* @short_description: Object used for authenticating connections
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* The #GDBusAuthObserver type provides a mechanism for participating
* in how a #GDBusServer (or a #GDBusConnection) authenticates remote
diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c
index 0bcd58f..fdcb6ed 100644
--- a/gio/gdbusconnection.c
+++ b/gio/gdbusconnection.c
@@ -78,7 +78,7 @@
/**
* SECTION:gdbusconnection
* @short_description: D-Bus Connections
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* <para><note>
* This class is rarely used directly in D-Bus clients. If you are
@@ -89,11 +89,11 @@
* The #GDBusConnection type is used for D-Bus connections to remote
* peers such as a message buses.
*
- * <example id="gdbus-server"><title>D-Bus server example</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../../gio/tests/gdbus-example-server.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
+ * <example id="gdbus-server"><title>D-Bus server example</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../gio/tests/gdbus-example-server.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
*
- * <example id="gdbus-subtree-server"><title>D-Bus subtree example</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../../gio/tests/gdbus-example-subtree.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
+ * <example id="gdbus-subtree-server"><title>D-Bus subtree example</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../gio/tests/gdbus-example-subtree.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
*
- * <example id="gdbus-unix-fd-client"><title>D-Bus UNIX File Descriptor example</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../../gio/tests/gdbus-example-unix-fd-client.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
+ * <example id="gdbus-unix-fd-client"><title>D-Bus UNIX File Descriptor example</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../gio/tests/gdbus-example-unix-fd-client.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
*/
/* ---------------------------------------------------------------------------------------------------- */
diff --git a/gio/gdbuserror.c b/gio/gdbuserror.c
index 3b0e080..5bc9c69 100644
--- a/gio/gdbuserror.c
+++ b/gio/gdbuserror.c
@@ -36,7 +36,7 @@
* SECTION:gdbuserror
* @title: GDBusError
* @short_description: Mapping D-Bus errors to and from #GError
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* All facilities that return errors from remote methods (such as
* g_dbus_connection_invoke_method_sync()) use #GError to represent
diff --git a/gio/gdbusintrospection.c b/gio/gdbusintrospection.c
index 63b945e..c76af4e 100644
--- a/gio/gdbusintrospection.c
+++ b/gio/gdbusintrospection.c
@@ -32,7 +32,7 @@
* SECTION:gdbusintrospection
* @title: Introspection XML
* @short_description: Parse and Generate Introspection XML
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* Various data structures and convenience routines to parse and
* generate D-Bus introspection XML.
diff --git a/gio/gdbusmessage.c b/gio/gdbusmessage.c
index 668b1c8..d1929ae 100644
--- a/gio/gdbusmessage.c
+++ b/gio/gdbusmessage.c
@@ -48,7 +48,7 @@
/**
* SECTION:gdbusmessage
* @short_description: D-Bus Message
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* A type for representing D-Bus messages that can be sent or received
* on a #GDBusConnection.
diff --git a/gio/gdbusmethodinvocation.c b/gio/gdbusmethodinvocation.c
index dc6950b..5885abc 100644
--- a/gio/gdbusmethodinvocation.c
+++ b/gio/gdbusmethodinvocation.c
@@ -36,7 +36,7 @@
/**
* SECTION:gdbusmethodinvocation
* @short_description: Object for handling remote calls
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* Instances of the #GDBusMethodInvocation class are used when
* handling D-Bus method calls. It provides a way to asynchronously
diff --git a/gio/gdbusnameowning.c b/gio/gdbusnameowning.c
index 3090165..e840353 100644
--- a/gio/gdbusnameowning.c
+++ b/gio/gdbusnameowning.c
@@ -36,11 +36,11 @@
* SECTION:gdbusnameowning
* @title: Owning Bus Names
* @short_description: Simple API for owning bus names
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* Convenience API for owning bus names.
*
- * <example id="gdbus-owning-names"><title>Simple application owning a name</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../../gio/tests/gdbus-example-own-name.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
+ * <example id="gdbus-owning-names"><title>Simple application owning a name</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../gio/tests/gdbus-example-own-name.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
*/
G_LOCK_DEFINE_STATIC (lock);
diff --git a/gio/gdbusnamewatching.c b/gio/gdbusnamewatching.c
index 92e04cc..6ae4754 100644
--- a/gio/gdbusnamewatching.c
+++ b/gio/gdbusnamewatching.c
@@ -36,11 +36,11 @@
* SECTION:gdbusnamewatching
* @title: Watching Bus Names
* @short_description: Simple API for watching bus names
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* Convenience API for watching bus names.
*
- * <example id="gdbus-watching-names"><title>Simple application watching a name</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../../gio/tests/gdbus-example-watch-name.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
+ * <example id="gdbus-watching-names"><title>Simple application watching a name</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../gio/tests/gdbus-example-watch-name.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
*/
G_LOCK_DEFINE_STATIC (lock);
diff --git a/gio/gdbusproxy.c b/gio/gdbusproxy.c
index 39094d0..89aced9 100644
--- a/gio/gdbusproxy.c
+++ b/gio/gdbusproxy.c
@@ -42,7 +42,7 @@
/**
* SECTION:gdbusproxy
* @short_description: Base class for proxies
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* #GDBusProxy is a base class used for proxies to access a D-Bus
* interface on a remote object. A #GDBusProxy can only be constructed
diff --git a/gio/gdbusproxywatching.c b/gio/gdbusproxywatching.c
index 4f85c1d..4025e1f 100644
--- a/gio/gdbusproxywatching.c
+++ b/gio/gdbusproxywatching.c
@@ -39,11 +39,11 @@
* SECTION:gdbusproxywatching
* @title: Watching Proxies
* @short_description: Simple API for watching proxies
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* Convenience API for watching bus proxies.
*
- * <example id="gdbus-watching-proxy"><title>Simple application watching a proxy</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../../gio/tests/gdbus-example-watch-proxy.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
+ * <example id="gdbus-watching-proxy"><title>Simple application watching a proxy</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../gio/tests/gdbus-example-watch-proxy.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
*/
/* ---------------------------------------------------------------------------------------------------- */
diff --git a/gio/gdbusserver.c b/gio/gdbusserver.c
index 0d0deea..99e7701 100644
--- a/gio/gdbusserver.c
+++ b/gio/gdbusserver.c
@@ -44,12 +44,12 @@
/**
* SECTION:gdbusserver
* @short_description: Helper for accepting connections
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* #GDBusServer is a helper for listening to and accepting D-Bus
* connections.
*
- * <example id="gdbus-peer-to-peer"><title>D-Bus peer-to-peer example</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../../gio/tests/gdbus-example-peer.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
+ * <example id="gdbus-peer-to-peer"><title>D-Bus peer-to-peer example</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../gio/tests/gdbus-example-peer.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
*/
struct _GDBusServerPrivate
diff --git a/gio/gdbusutils.c b/gio/gdbusutils.c
index b1ec0ea..0052916 100644
--- a/gio/gdbusutils.c
+++ b/gio/gdbusutils.c
@@ -33,7 +33,7 @@
* SECTION:gdbusutils
* @title: D-Bus Utilities
* @short_description: Various utilities related to D-Bus.
- * @include: gdbus/gdbus.h
+ * @include: gio/gio.h
*
* Various utility routines related to D-Bus.
*/
diff --git a/gio/gunixconnection.c b/gio/gunixconnection.c
index 92ad246..8b618cb 100644
--- a/gio/gunixconnection.c
+++ b/gio/gunixconnection.c
@@ -36,6 +36,14 @@
#include <gio/gsocket.h>
#include <unistd.h>
+#ifdef __linux__
+/* for getsockopt() and setsockopt() */
+#include <sys/types.h> /* See NOTES */
+#include <sys/socket.h>
+#include <errno.h>
+#include <string.h>
+#endif
+
#include "gioalias.h"
G_DEFINE_TYPE_WITH_CODE (GUnixConnection, g_unix_connection,
@@ -287,5 +295,255 @@ gboolean g_unix_connection_create_pair (GUnixCo
GError **error);
*/
+
+/**
+ * g_unix_connection_send_credentials:
+ * @connection: A #GUnixConnection.
+ * @credentials: A #GCredentials to send.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Passes the credentials stored in @credentials to the recieving side
+ * of the connection. The recieving end has to call
+ * g_unix_connection_receive_credentials() (or similar) to accept the
+ * credentials.
+ *
+ * The credentials which the sender specifies are checked by the
+ * kernel. A process with effective user ID 0 is allowed to specify
+ * values that do not match its own. This means that the credentials
+ * can be used to authenticate other connections.
+ *
+ * As well as sending the credentials this also writes a single NUL
+ * byte to the stream, as this is required for credentials passing to
+ * work on some implementations.
+ *
+ * Returns: %TRUE on success, %FALSE if @error is set.
+ *
+ * Since: 2.26
+ */
+gboolean
+g_unix_connection_send_credentials (GUnixConnection *connection,
+ GCredentials *credentials,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GSocketControlMessage *scm;
+ GSocket *socket;
+ gboolean ret;
+ GOutputVector vector;
+ guchar nul_byte[1] = {'\0'};
+
+ g_return_val_if_fail (G_IS_UNIX_CONNECTION (connection), FALSE);
+ g_return_val_if_fail (G_IS_CREDENTIALS (credentials), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ ret = FALSE;
+
+ vector.buffer = &nul_byte;
+ vector.size = 1;
+ scm = g_unix_credentials_message_new_with_credentials (credentials);
+ g_object_get (connection, "socket", &socket, NULL);
+ if (g_socket_send_message (socket,
+ NULL, /* address */
+ &vector,
+ 1,
+ &scm,
+ 1,
+ G_SOCKET_MSG_NONE,
+ cancellable,
+ error) != 1)
+ {
+ g_prefix_error (error, _("Error sending credentials: "));
+ goto out;
+ }
+
+ ret = TRUE;
+
+ out:
+ g_object_unref (socket);
+ g_object_unref (scm);
+ return ret;
+}
+
+/**
+ * g_unix_connection_receive_credentials:
+ * @connection: A #GUnixConnection.
+ * @cancellable: A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Receives credentials from the sending end of the connection. The
+ * sending end has to call g_unix_connection_send_credentials() (or
+ * similar) for this to work.
+ *
+ * As well as reading the credentials this also reads (and discards) a
+ * single byte from the stream, as this is required for credentials
+ * passing to work on some implementations.
+ *
+ * Returns: Received credentials on success (free with
+ * g_object_unref()), %NULL if @error is set.
+ *
+ * Since: 2.26
+ */
+GCredentials *
+g_unix_connection_receive_credentials (GUnixConnection *connection,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GCredentials *ret;
+ GSocketControlMessage **scms;
+ gint nscm;
+ GSocket *socket;
+ gint n;
+ volatile GType credentials_message_gtype;
+ gssize num_bytes_read;
+#ifdef __linux__
+ gboolean turn_off_so_passcreds;
+#endif
+
+ g_return_val_if_fail (G_IS_UNIX_CONNECTION (connection), NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ ret = NULL;
+ scms = NULL;
+
+ g_object_get (connection, "socket", &socket, NULL);
+
+ /* On Linux, we need to turn on SO_PASSCRED if it isn't enabled
+ * already. We also need to turn it off when we're done. See
+ * #617483 for more discussion.
+ */
+#ifdef __linux__
+ {
+ gint opt_val;
+ socklen_t opt_len;
+
+ turn_off_so_passcreds = FALSE;
+ opt_val = 0;
+ opt_len = sizeof (gint);
+ if (getsockopt (g_socket_get_fd (socket),
+ SOL_SOCKET,
+ SO_PASSCRED,
+ &opt_val,
+ &opt_len) != 0)
+ {
+ g_set_error (error,
+ G_IO_ERROR,
+ g_io_error_from_errno (errno),
+ _("Error checking if SO_PASSCRED is enabled for socket: %s"),
+ strerror (errno));
+ goto out;
+ }
+ if (opt_len != sizeof (gint))
+ {
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_FAILED,
+ _("Unexpected option length while checking if SO_PASSCRED is enabled for socket. "
+ "Expected %d bytes, got %d"),
+ (gint) sizeof (gint), (gint) opt_len);
+ goto out;
+ }
+ if (opt_val == 0)
+ {
+ opt_val = 1;
+ if (setsockopt (g_socket_get_fd (socket),
+ SOL_SOCKET,
+ SO_PASSCRED,
+ &opt_val,
+ sizeof opt_val) != 0)
+ {
+ g_set_error (error,
+ G_IO_ERROR,
+ g_io_error_from_errno (errno),
+ _("Error enabling SO_PASSCRED: %s"),
+ strerror (errno));
+ goto out;
+ }
+ turn_off_so_passcreds = TRUE;
+ }
+ }
+#endif
+
+ /* ensure the type of GUnixCredentialsMessage has been registered with the type system */
+ credentials_message_gtype = G_TYPE_UNIX_CREDENTIALS_MESSAGE;
+ num_bytes_read = g_socket_receive_message (socket,
+ NULL, /* GSocketAddress **address */
+ NULL,
+ 0,
+ &scms,
+ &nscm,
+ NULL,
+ cancellable,
+ error);
+ if (num_bytes_read != 1)
+ {
+ /* Handle situation where g_socket_receive_message() returns
+ * 0 bytes and not setting @error
+ */
+ if (num_bytes_read == 0 && error != NULL && *error == NULL)
+ {
+ g_set_error_literal (error,
+ G_IO_ERROR,
+ G_IO_ERROR_FAILED,
+ _("Expecting to read a single byte for receiving credentials but read zero bytes"));
+ }
+ 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]))
+ {
+ 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);
+
+ out:
+
+#ifdef __linux__
+ if (turn_off_so_passcreds)
+ {
+ gint opt_val;
+ opt_val = 0;
+ if (setsockopt (g_socket_get_fd (socket),
+ SOL_SOCKET,
+ SO_PASSCRED,
+ &opt_val,
+ sizeof opt_val) != 0)
+ {
+ g_set_error (error,
+ G_IO_ERROR,
+ g_io_error_from_errno (errno),
+ _("Error while disabling SO_PASSCRED: %s"),
+ strerror (errno));
+ goto out;
+ }
+ }
+#endif
+
+ if (scms != NULL)
+ {
+ for (n = 0; n < nscm; n++)
+ g_object_unref (scms[n]);
+ g_free (scms);
+ }
+ g_object_unref (socket);
+ return ret;
+}
+
#define __G_UNIX_CONNECTION_C__
#include "gioaliasdef.c"
diff --git a/gio/gunixconnection.h b/gio/gunixconnection.h
index 7435e97..9c691ea 100644
--- a/gio/gunixconnection.h
+++ b/gio/gunixconnection.h
@@ -71,6 +71,16 @@ gint g_unix_connection_receive_fd (GUnixCo
GCancellable *cancellable,
GError **error);
+gboolean g_unix_connection_send_credentials (GUnixConnection *connection,
+ GCredentials *credentials,
+ GCancellable *cancellable,
+ GError **error);
+
+GCredentials *g_unix_connection_receive_credentials (GUnixConnection *connection,
+ GCancellable *cancellable,
+ GError **error);
+
+
G_END_DECLS
#endif /* __G_UNIX_CONNECTION_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]