New Ticket     Wiki     Browse Source     Timeline     Roadmap     Ticket Reports     Search

Ticket #17950: patch-launchd-part2.diff

File patch-launchd-part2.diff, 5.4 KB (added by mta@…, 3 years ago)

Patch for changes to launchd support.

  • dbus-server-launchd.c

    old new  
    2929 
    3030#include "dbus-server-socket.h" 
    3131#include "dbus-server-launchd.h" 
     32#include "dbus-transport-protected.h" 
     33#include "dbus-transport-unix.h" 
    3234 
    3335/** 
    3436 * @defgroup DBusServerLaunchd DBusServer implementations for Launchd 
     
    5658  launch_data_t sockets_dict, checkin_response; 
    5759  launch_data_t checkin_request; 
    5860  launch_data_t listening_fd_array, listening_fd; 
     61  dbus_bool_t supported, retval; 
    5962 
    6063  _DBUS_ASSERT_ERROR_IS_CLEAR (error); 
    6164 
     
    6467      dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); 
    6568      return NULL; 
    6669    } 
    67   if (!_dbus_string_append (&address, "launchd:key=")) 
     70   
     71  if (strcmp (socket_key, "session") != 0) 
    6872    { 
    69       dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); 
     73      dbus_set_error (error, DBUS_ERROR_FAILED, "Not server socket %s\n", socket_key); 
    7074      goto l_failed_0; 
    7175    } 
    72   if (!_dbus_string_append (&address, socket_key)) 
     76  supported = FALSE; 
     77  retval = _dbus_lookup_session_address (&supported, &address, error); 
     78  if ( !(supported && retval) ) 
    7379    { 
    74       dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); 
     80      if (!dbus_error_is_set(error)) 
     81        { 
     82          dbus_set_error(error, DBUS_ERROR_FAILED, 
     83                         "Unable to get session socket address\n"); 
     84        } 
    7585      goto l_failed_0; 
    7686    } 
    7787 
     
    146156  return NULL; 
    147157} 
    148158 
     159/** 
     160 * Opens launchd transport types. 
     161 *  
     162 * @param entry the address entry to try opening 
     163 * @param transport_p return location for the opened transport 
     164 * @param error error to be set 
     165 * @returns result of the attempt 
     166 */ 
     167DBusTransportOpenResult 
     168_dbus_transport_open_launchd (DBusAddressEntry  *entry, 
     169                              DBusTransport    **transport_p, 
     170                              DBusError         *error) 
     171{ 
     172  const char *method, *path; 
     173   
     174  method = dbus_address_entry_get_method (entry); 
     175  _dbus_assert (method != NULL); 
     176 
     177  if (strcmp (method, "launchd") == 0) 
     178    { 
     179      const char *socket_key = dbus_address_entry_get_value (entry, "key"); 
     180      DBusString address, prefix; 
     181      dbus_bool_t supported, retval; 
     182      int prefixlen; 
     183       
     184      _dbus_verbose ("Opening launchd transport\n"); 
     185 
     186      if (socket_key == NULL) 
     187        { 
     188          _dbus_set_bad_address (error, "launchd", "key", NULL); 
     189          return DBUS_TRANSPORT_OPEN_BAD_ADDRESS; 
     190        } 
     191       
     192      if (strcmp (socket_key, "session") != 0) 
     193        { 
     194          _dbus_set_bad_address (error, NULL, NULL, 
     195                                 "launchd key must be 'session'\n"); 
     196          return DBUS_TRANSPORT_OPEN_BAD_ADDRESS; 
     197        } 
     198       
     199      if (!_dbus_string_init (&address)) 
     200        { 
     201          dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); 
     202          return DBUS_TRANSPORT_OPEN_BAD_ADDRESS; 
     203        } 
     204   
     205      supported = FALSE; 
     206      retval = _dbus_lookup_session_address (&supported, &address, error); 
     207      _dbus_string_init_const (&prefix, "unix:path="); 
     208      prefixlen = _dbus_string_get_length(&prefix); 
     209      if ( !(supported && retval) || 
     210           !_dbus_string_equal_substring (&address, 0, prefixlen, &prefix, 0)) 
     211        { 
     212          if (!dbus_error_is_set(error)) 
     213            { 
     214              dbus_set_error(error, DBUS_ERROR_FAILED, 
     215                             "Unable to get session socket address\n"); 
     216            } 
     217          goto l_failed_1; 
     218        } 
     219      path = _dbus_string_get_const_data_len ( &address, prefixlen,  
     220                                               _dbus_string_get_length( &address) - prefixlen ); 
     221      *transport_p = _dbus_transport_new_for_domain_socket ( path, FALSE, error ); 
     222       
     223      if (*transport_p == NULL) 
     224        { 
     225          _DBUS_ASSERT_ERROR_IS_SET (error); 
     226          goto l_failed_1; 
     227        } 
     228       
     229      _dbus_verbose ("Opened launchd socket at %s\n", path); 
     230 
     231      _dbus_string_free (&address); 
     232      _dbus_string_free (&prefix); 
     233 
     234      _DBUS_ASSERT_ERROR_IS_CLEAR (error); 
     235      return DBUS_TRANSPORT_OPEN_OK; 
     236         
     237         
     238      l_failed_1: 
     239      _dbus_string_free (&prefix); 
     240 
     241      l_failed_0: 
     242      _dbus_string_free (&address); 
     243     
     244      return DBUS_TRANSPORT_OPEN_BAD_ADDRESS; 
     245    } 
     246  else 
     247    { 
     248      _DBUS_ASSERT_ERROR_IS_CLEAR (error); 
     249      return DBUS_TRANSPORT_OPEN_NOT_HANDLED; 
     250    } 
     251} 
     252 
    149253/** @} */ 
    150254 
  • dbus-transport-protected.h

    old new  
    138138                                                                DBusTransport    **transport_p, 
    139139                                                                DBusError         *error); 
    140140 
     141DBusTransportOpenResult _dbus_transport_open_launchd (DBusAddressEntry  *entry, 
     142                                                      DBusTransport    **transport_p, 
     143                                                      DBusError         *error); 
     144 
    141145DBUS_END_DECLS 
    142146 
    143147#endif /* DBUS_TRANSPORT_PROTECTED_H */ 
  • dbus-transport.c

    old new  
    333333  { _dbus_transport_open_socket }, 
    334334  { _dbus_transport_open_platform_specific }, 
    335335  { _dbus_transport_open_autolaunch } 
     336#ifdef DBUS_ENABLE_LAUNCHD 
     337  , {_dbus_transport_open_launchd } 
     338#endif 
    336339#ifdef DBUS_BUILD_TESTS 
    337340  , { _dbus_transport_open_debug_pipe } 
    338341#endif