예제 #1
0
static dbus_bool_t
launch_bus_name (const char *bus_name, BusConfigParser *parser, int alias_depth, DBusError *error)
{
  BusDesktopFile *desktop_file;
  char *exec, *user, *alias;
  dbus_bool_t retval;

  exec = NULL;
  user = NULL;
  alias = NULL;
  retval = FALSE;

  /* get the correct service file for the name we are trying to activate */
  desktop_file = desktop_file_for_name (parser, bus_name, error);
  if (desktop_file == NULL)
    return FALSE;

  /* get exec and user for service name */
  if (!get_parameters_for_service (desktop_file, bus_name, &exec, &user, &alias, error))
    goto finish;

  _dbus_verbose ("dbus-daemon-activation-helper: Name='%s'\n", bus_name);
  if (alias == NULL)
    {
      _dbus_verbose ("dbus-daemon-activation-helper: Exec='%s'\n", exec);
      _dbus_verbose ("dbus-daemon-activation-helper: User='******'\n", user);

      /* actually execute */
      if (!exec_for_correct_user (exec, user, alias, error))
        goto finish;
    }
  else
    {
      _dbus_verbose ("dbus-daemon-activation-helper: Alias='%s'\n", alias);
      if (alias_depth >= DBUS_ACTIVATION_MAX_ALIAS_DEPTH)
        {
          dbus_set_error (error, DBUS_ERROR_SPAWN_SETUP_FAILED,
                          "Maximum recursion of aliased services reached.");
          goto finish;
        }

      /* execute the aliased service */
      if (!run_launch_helper (alias, alias_depth, error))
        goto finish;
    }

  retval = TRUE;

finish:
  dbus_free (exec);
  dbus_free (user);
  dbus_free (alias);
  bus_desktop_file_free (desktop_file);
  return retval;
}
예제 #2
0
static dbus_bool_t
launch_bus_name (const char *bus_name, BusConfigParser *parser, DBusError *error)
{
    BusDesktopFile *desktop_file;
    char *exec, *user;
    dbus_bool_t retval;

    exec = NULL;
    user = NULL;
    retval = FALSE;

    /* get the correct service file for the name we are trying to activate */
    desktop_file = desktop_file_for_name (parser, bus_name, error);
    if (desktop_file == NULL)
        return FALSE;

    /* get exec and user for service name */
    if (!get_parameters_for_service (desktop_file, bus_name, &exec, &user, error))
        goto finish;

    _dbus_verbose ("dbus-daemon-activation-helper: Name='%s'\n", bus_name);
    _dbus_verbose ("dbus-daemon-activation-helper: Exec='%s'\n", exec);
    _dbus_verbose ("dbus-daemon-activation-helper: User='******'\n", user);

    /* actually execute */
    if (!exec_for_correct_user (exec, user, error))
        goto finish;

    retval = TRUE;

finish:
    dbus_free (exec);
    dbus_free (user);
    bus_desktop_file_free (desktop_file);
    return retval;
}