예제 #1
0
gboolean
gkd_pkcs11_startup_ssh (void)
{
	GIOChannel *channel;
	const gchar *base_dir;
	int sock;

	base_dir = gkd_util_get_master_directory ();
	g_return_val_if_fail (base_dir, FALSE);

	sock = gkd_ssh_agent_startup (base_dir);
	if (sock == -1)
		return FALSE;

	channel = g_io_channel_unix_new (sock);
	g_io_add_watch (channel, G_IO_IN | G_IO_HUP, accept_ssh_client, NULL);
	g_io_channel_unref (channel);

	/* gkm-ssh-agent sets the environment variable */
	gkd_util_push_environment ("SSH_AUTH_SOCK", g_getenv ("SSH_AUTH_SOCK"));

	egg_cleanup_register (pkcs11_ssh_cleanup, NULL);

	return TRUE;
}
예제 #2
0
gboolean
gkd_daemon_startup_ssh (void)
{
	const gchar *base_dir;
	GTlsInteraction *interaction;
	GkdSshAgentPreload *preload;
	GkdSshAgentService *service;

	base_dir = gkd_util_get_master_directory ();
	g_return_val_if_fail (base_dir, FALSE);

	interaction = gkd_ssh_agent_interaction_new (NULL);
	preload = gkd_ssh_agent_preload_new ("~/.ssh");

	service = gkd_ssh_agent_service_new (base_dir, interaction, preload);
	g_object_unref (interaction);
	g_object_unref (preload);

	if (!gkd_ssh_agent_service_start (service))
		return FALSE;

	/* ssh-agent sets the environment variable */
	gkd_util_push_environment ("SSH_AUTH_SOCK", g_getenv ("SSH_AUTH_SOCK"));

	egg_cleanup_register (pkcs11_ssh_cleanup, service);

	return TRUE;
}