static void print_environment (void) { const gchar **env; for (env = gkd_util_get_environment (); *env; ++env) printf ("%s\n", *env); fflush (stdout); }
static void print_environment (pid_t pid) { const gchar **env; for (env = gkd_util_get_environment (); *env; ++env) printf ("%s\n", *env); if (pid) printf ("MATE_KEYRING_PID=%d\n", (gint)pid); }
static gboolean handle_get_environment (GkdExportedDaemon *skeleton, GDBusMethodInvocation *invocation, gpointer user_data) { const gchar **env; gchar **parts; GVariantBuilder builder; g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}")); for (env = gkd_util_get_environment (); *env != NULL; env++) { parts = g_strsplit (*env, "=", 2); g_variant_builder_add (&builder, "{ss}", parts[0], parts[1]); g_strfreev (parts); } gkd_exported_daemon_complete_get_environment (skeleton, invocation, g_variant_builder_end (&builder)); 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; }