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; }
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; }
static gboolean handle_get_control_directory (GkdExportedDaemon *skeleton, GDBusMethodInvocation *invocation, gpointer user_data) { gkd_exported_daemon_complete_get_control_directory (skeleton, invocation, gkd_util_get_master_directory ()); return TRUE; }
gboolean gkd_pkcs11_startup_pkcs11 (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 = gkm_rpc_layer_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_rpc_client, NULL); g_io_channel_unref (channel); egg_cleanup_register (pkcs11_rpc_cleanup, NULL); return TRUE; }
static DBusHandlerResult message_handler_cb (DBusConnection *conn, DBusMessage *message, void *user_data) { /* * Here we handle the requests to our own gnome-keyring DBus interfaces */ DBusMessageIter args; DBusMessage *reply = NULL; /* GetEnvironment */ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_METHOD_CALL && dbus_message_is_method_call (message, GNOME_KEYRING_DAEMON_INTERFACE, "GetEnvironment") && g_str_equal (dbus_message_get_signature (message), "")) { const gchar **env; DBusMessageIter items, entry; env = gkd_util_get_environment (); g_return_val_if_fail (env, DBUS_HANDLER_RESULT_NOT_YET_HANDLED); /* Setup the result */ reply = dbus_message_new_method_return (message); dbus_message_iter_init_append (reply, &args); if (!dbus_message_iter_open_container (&args, DBUS_TYPE_ARRAY, "{ss}", &items)) g_return_val_if_reached (DBUS_HANDLER_RESULT_NEED_MEMORY); while (*env) { gchar **parts; parts = g_strsplit (*env, "=", 2); g_return_val_if_fail (parts && parts[0] && parts[1], DBUS_HANDLER_RESULT_NOT_YET_HANDLED); if (!dbus_message_iter_open_container (&items, DBUS_TYPE_DICT_ENTRY, NULL, &entry) || !dbus_message_iter_append_basic (&entry, DBUS_TYPE_STRING, &parts[0]) || !dbus_message_iter_append_basic (&entry, DBUS_TYPE_STRING, &parts[1]) || !dbus_message_iter_close_container (&items, &entry)) { g_strfreev (parts); g_return_val_if_reached (DBUS_HANDLER_RESULT_NEED_MEMORY); } g_strfreev (parts); ++env; } if (!dbus_message_iter_close_container (&args, &items)) g_return_val_if_reached (DBUS_HANDLER_RESULT_NEED_MEMORY); /* GetControlDirectory */ } else if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_METHOD_CALL && dbus_message_is_method_call (message, GNOME_KEYRING_DAEMON_INTERFACE, "GetControlDirectory") && g_str_equal (dbus_message_get_signature (message), "")) { /* Setup the result */ const gchar *directory = gkd_util_get_master_directory (); reply = dbus_message_new_method_return (message); dbus_message_append_args (reply, DBUS_TYPE_STRING, &directory, DBUS_TYPE_INVALID); /* Unknown call */ } else { return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } /* Send the reply */ if (!dbus_connection_send (conn, reply, NULL)) g_return_val_if_reached (DBUS_HANDLER_RESULT_NEED_MEMORY); dbus_connection_flush (conn); return DBUS_HANDLER_RESULT_HANDLED; }