/* Set own SASL context based on whether an external one is given or not */
static void
infd_xmpp_server_setup_own_sasl_context(InfdXmppServer* xmpp)
{
  InfdXmppServerPrivate* priv;

  priv = INFD_XMPP_SERVER_PRIVATE(xmpp);
  g_assert(priv->sasl_own_context == NULL);

  if(priv->sasl_context == NULL && priv->tcp != NULL)
  {
    /* Failure does not matter too much because every XMPP connection will
     * generate an own SASL context in this case, and error out if that
     * fails again. */
    priv->sasl_own_context = inf_sasl_context_new(NULL);

    if(priv->sasl_own_context != NULL)
    {
      priv->sasl_context = priv->sasl_own_context;
      inf_sasl_context_ref(priv->sasl_context);

      inf_sasl_context_set_callback(
        priv->sasl_context,
        infd_xmpp_server_sasl_cb,
        xmpp
      );

      g_object_notify(G_OBJECT(xmpp), "sasl-context");
    }
  }
}
Example #2
0
Gobby::AuthCommands::AuthCommands(Gtk::Window& parent,
                                  Browser& browser,
                                  StatusBar& statusbar,
                                  ConnectionManager& connection_manager,
                                  const Preferences& preferences):
	m_parent(parent),
	m_browser(browser),
	m_connection_manager(connection_manager),
	m_statusbar(statusbar),
	m_preferences(preferences)
{
	GError* error = NULL;
	m_sasl_context = inf_sasl_context_new(&error);

	if(!m_sasl_context)
	{
		std::string error_message =
			std::string("SASL initialization error: ") +
			error->message;
		g_error_free(error);
		throw std::runtime_error(error_message);
	}

	inf_sasl_context_set_callback(
		m_sasl_context, &AuthCommands::sasl_callback_static,
		this, NULL);

	// Set SASL context for new and existing connections:
	m_connection_manager.set_sasl_context(m_sasl_context,
	                                      "ANONYMOUS PLAIN");

	g_signal_connect(
		G_OBJECT(m_browser.get_store()),
		"set-browser",
		G_CALLBACK(&AuthCommands::set_browser_callback_static),
		this);

	// Setup callback for existing browsers
	GtkTreeIter iter;
	GtkTreeModel* model = GTK_TREE_MODEL(m_browser.get_store());
	for(gboolean have_entry = gtk_tree_model_get_iter_first(model, &iter);
	    have_entry == TRUE;
	    have_entry = gtk_tree_model_iter_next(model, &iter))
	{
		InfBrowser* browser;
		gtk_tree_model_get(
			model, &iter,
			INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, -1);

		if(browser != NULL)
		{
			set_browser_callback(NULL, browser);
			g_object_unref(browser);
		}
	}
}
static gboolean
infinoted_startup_load(InfinotedStartup* startup,
                       int* argc,
                       char*** argv,
                       GError** error)
{
  gboolean requires_password;

  if(infinoted_startup_load_options(startup, argc, argv, error) == FALSE)
    return FALSE;

  startup->log = infinoted_log_new();
  if(!infinoted_log_open(startup->log, startup->options->log_path, error))
    return FALSE;

  if(infinoted_startup_load_credentials(startup, error) == FALSE)
    return FALSE;

  requires_password = startup->options->password != NULL;
#ifdef LIBINFINITY_HAVE_PAM
  requires_password =
    requires_password || startup->options->pam_service != NULL;
#endif /* LIBINFINITY_HAVE_PAM */

  if(requires_password)
  {
    startup->sasl_context = inf_sasl_context_new(error);
    if(!startup->sasl_context) return FALSE;

    inf_sasl_context_set_callback(
      startup->sasl_context,
      infinoted_startup_sasl_callback,
      startup,
      NULL
    );
  }

  return TRUE;
}
Example #4
0
Gobby::AuthCommands::AuthCommands(Gtk::Window& parent,
                                  Browser& browser,
                                  StatusBar& statusbar,
                                  ConnectionManager& connection_manager,
                                  const Preferences& preferences):
	m_parent(parent),
	m_browser(browser),
	m_connection_manager(connection_manager),
	m_statusbar(statusbar),
	m_preferences(preferences)
{
	GError* error = NULL;
	m_sasl_context = inf_sasl_context_new(&error);

	if(!m_sasl_context)
	{
		std::string error_message =
			std::string("SASL initialization error: ") +
			error->message;
		g_error_free(error);
		throw std::runtime_error(error_message);
	}

	inf_sasl_context_set_callback(
		m_sasl_context, &AuthCommands::sasl_callback_static,
		this, NULL);

	// Set SASL context for new connections:
	m_connection_manager.set_sasl_context(m_sasl_context,
	                                      "ANONYMOUS PLAIN");

	g_signal_connect(
		G_OBJECT(m_browser.get_store()),
		"set-browser",
		G_CALLBACK(&AuthCommands::set_browser_callback_static),
		this);
}