25 #include "dbus-transport-protected.h"
26 #include "dbus-transport-unix.h"
27 #include "dbus-transport-socket.h"
28 #include "dbus-connection-internal.h"
29 #include "dbus-watch.h"
30 #include "dbus-auth.h"
31 #include "dbus-address.h"
32 #include "dbus-credentials.h"
33 #include "dbus-mainloop.h"
34 #include "dbus-message-private.h"
35 #include "dbus-marshal-header.h"
36 #ifdef DBUS_BUILD_TESTS
37 #include "dbus-server-debug-pipe.h"
70 _dbus_verbose (
"Size counter value is now %d\n",
72 _dbus_verbose (
"Unix FD counter value is now %d\n",
161 transport->
vtable = vtable;
162 transport->
loader = loader;
163 transport->
auth = auth;
170 transport->
address = address_copy;
197 live_messages_notify,
201 _dbus_verbose (
"Initialized transport on address %s\n", transport->
address);
246 check_address (
const char *address,
DBusError *error)
258 for (i = 0; i < len; i++)
261 if (transport !=
NULL)
277 _dbus_transport_new_for_autolaunch (
const char *scope,
DBusError *error)
282 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
292 _DBUS_ASSERT_ERROR_IS_SET (error);
298 _DBUS_ASSERT_ERROR_IS_SET (error);
300 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
307 static DBusTransportOpenResult
317 if (strcmp (method,
"autolaunch") == 0)
321 *transport_p = _dbus_transport_new_for_autolaunch (scope, error);
323 if (*transport_p ==
NULL)
325 _DBUS_ASSERT_ERROR_IS_SET (error);
326 return DBUS_TRANSPORT_OPEN_DID_NOT_CONNECT;
330 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
331 return DBUS_TRANSPORT_OPEN_OK;
336 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
337 return DBUS_TRANSPORT_OPEN_NOT_HANDLED;
341 static const struct {
348 { _dbus_transport_open_autolaunch }
349 #ifdef DBUS_BUILD_TESTS
350 , { _dbus_transport_open_debug_pipe }
367 const char *expected_guid_orig;
372 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
378 if (expected_guid_orig !=
NULL && expected_guid ==
NULL)
380 _DBUS_SET_OOM (error);
386 DBusTransportOpenResult result;
388 _DBUS_ASSERT_ERROR_IS_CLEAR (&tmp_error);
389 result = (* open_funcs[i].func) (entry, &transport, &tmp_error);
393 case DBUS_TRANSPORT_OPEN_OK:
394 _DBUS_ASSERT_ERROR_IS_CLEAR (&tmp_error);
397 case DBUS_TRANSPORT_OPEN_NOT_HANDLED:
398 _DBUS_ASSERT_ERROR_IS_CLEAR (&tmp_error);
401 case DBUS_TRANSPORT_OPEN_BAD_ADDRESS:
402 _DBUS_ASSERT_ERROR_IS_SET (&tmp_error);
405 case DBUS_TRANSPORT_OPEN_DID_NOT_CONNECT:
406 _DBUS_ASSERT_ERROR_IS_SET (&tmp_error);
414 if (transport ==
NULL)
419 "Unknown address type (examples of valid types are \"tcp\" and on UNIX \"unix\")");
421 _DBUS_ASSERT_ERROR_IS_SET (&tmp_error);
427 _DBUS_ASSERT_ERROR_IS_CLEAR (&tmp_error);
481 _dbus_verbose (
"finalizing\n");
500 _dbus_verbose (
"start\n");
511 _dbus_verbose (
"end\n");
535 void *unix_user_data;
548 _dbus_verbose (
"unlock\n");
551 allow = (* unix_user_function) (connection,
555 _dbus_verbose (
"lock post unix user function\n");
565 " was rejected, disconnecting\n",
580 void *windows_user_data;
593 if (windows_sid ==
NULL)
599 _dbus_verbose (
"unlock\n");
602 allow = (* windows_user_function) (connection,
606 _dbus_verbose (
"lock post windows user function\n");
611 _dbus_verbose (
"Client SID '%s' authorized\n", windows_sid);
615 _dbus_verbose (
"Client SID '%s' was rejected, disconnecting\n",
638 if (our_identity ==
NULL)
650 _dbus_verbose (
"Client authorized as SID '%s'"
651 "matching our SID '%s'\n",
665 _dbus_verbose (
"Client authorized as SID '%s'"
666 " but our SID is '%s', disconnecting\n",
672 _dbus_verbose (
"Client authorized as UID "DBUS_UID_FORMAT
673 " but our UID is "DBUS_UID_FORMAT
", disconnecting\n",
711 maybe_authenticated =
715 if (maybe_authenticated)
719 case DBUS_AUTH_STATE_AUTHENTICATED:
723 maybe_authenticated =
FALSE;
729 if (maybe_authenticated && !transport->
is_server)
731 const char *server_guid;
739 _dbus_verbose (
"Client expected GUID '%s' and we got '%s' from the server\n",
749 if (maybe_authenticated && transport->
is_server)
764 allow = auth_via_unix_user_function (transport);
769 allow = auth_via_windows_user_function (transport);
773 allow = auth_via_default_rules (transport);
777 maybe_authenticated =
FALSE;
783 return maybe_authenticated;
818 return DBUS_TRANSPORT_CAN_SEND_UNIX_FD(transport);
864 unsigned int condition)
959 int timeout_milliseconds)
963 _dbus_verbose (
"Transport iteration flags 0x%x timeout %d connected = %d\n",
966 if ((flags & (DBUS_ITERATION_DO_WRITING |
967 DBUS_ITERATION_DO_READING)) == 0)
975 timeout_milliseconds);
978 _dbus_verbose (
"end\n");
998 encoded, &plaintext))
1016 _dbus_verbose (
" %d unused bytes sent to message loader\n",
1048 _dbus_verbose (
" %d unused bytes sent to message loader\n",
1066 _dbus_verbose (
"Not enough memory to transfer unused bytes from auth conversation\n");
1087 DBUS_AUTH_STATE_WAITING_FOR_MEMORY)
1094 !recover_unused_bytes (transport))
1122 _dbus_verbose (
"_dbus_transport_queue_messages()\n");
1134 message = link->
data;
1136 _dbus_verbose (
"queueing received message %p\n", message);
1155 _dbus_verbose (
"Corrupted message stream, disconnecting\n");
1226 live_messages_notify,
1244 live_messages_notify,
1296 DBUS_CREDENTIAL_UNIX_USER_ID))
1329 DBUS_CREDENTIAL_UNIX_PROCESS_ID))
1362 DBUS_CREDENTIAL_ADT_AUDIT_DATA_ID))
1407 char **windows_sid_p)
1411 *windows_sid_p =
NULL;
1419 DBUS_CREDENTIAL_WINDOWS_SID))
1467 const char **mechanisms)