static gboolean create_collection_with_secret (GkdSecretCreate *self, GkdSecretSecret *master) { DBusError derr = DBUS_ERROR_INIT; GkdSecretService *service; gchar *identifier; g_assert (GKD_SECRET_IS_CREATE (self)); g_assert (master); g_assert (!self->result_path); self->result_path = gkd_secret_create_with_secret (self->pkcs11_attrs, master, &derr); if (!self->result_path) { g_warning ("couldn't create new collection: %s", derr.message); dbus_error_free (&derr); return FALSE; } if (self->alias) { if (!gkd_secret_util_parse_path (self->result_path, &identifier, NULL)) g_assert_not_reached (); service = gkd_secret_prompt_get_service (GKD_SECRET_PROMPT (self)); gkd_secret_service_set_alias (service, self->alias, identifier); g_free (identifier); } return TRUE; }
static gboolean create_collection_with_secret (GkdSecretCreate *self, GkdSecretSecret *master) { GError *error = NULL; GkdSecretService *service; gchar *identifier; g_assert (GKD_SECRET_IS_CREATE (self)); g_assert (master); g_assert (!self->result_path); self->result_path = gkd_secret_create_with_secret (self->attributes, master, &error); if (!self->result_path) { g_warning ("couldn't create new collection: %s", error->message); g_error_free (error); return FALSE; } service = gkd_secret_prompt_get_service (GKD_SECRET_PROMPT (self)); if (self->alias) { if (!gkd_secret_util_parse_path (self->result_path, &identifier, NULL)) g_assert_not_reached (); gkd_secret_service_set_alias (service, self->alias, identifier); g_free (identifier); } /* Notify the callers that a collection was created */ gkd_secret_service_emit_collection_created (service, self->result_path); return TRUE; }
static gboolean service_method_set_alias (GkdExportedService *skeleton, GDBusMethodInvocation *invocation, gchar *alias, gchar *path, GkdSecretService *self) { GckObject *collection; gchar *identifier; if (!g_str_equal (alias, "default")) { g_dbus_method_invocation_return_error_literal (invocation, G_DBUS_ERROR, G_DBUS_ERROR_NOT_SUPPORTED, "Only the 'default' alias is supported"); return TRUE; } /* No default collection */ if (g_str_equal (path, "/")) { identifier = g_strdup (""); /* Find a collection with that path */ } else { if (!object_path_has_prefix (path, SECRET_COLLECTION_PREFIX) || !gkd_secret_util_parse_path (path, &identifier, NULL)) { g_dbus_method_invocation_return_error_literal (invocation, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "Invalid collection object path"); return TRUE; } collection = gkd_secret_objects_lookup_collection (self->objects, g_dbus_method_invocation_get_sender (invocation), path); if (collection == NULL) { g_free (identifier); g_dbus_method_invocation_return_error_literal (invocation, GKD_SECRET_ERROR, GKD_SECRET_ERROR_NO_SUCH_OBJECT, "The collection does not exist"); return TRUE; } g_object_unref (collection); } gkd_secret_service_set_alias (self, alias, identifier); g_free (identifier); gkd_exported_service_complete_set_alias (skeleton, invocation); return TRUE; }
static DBusMessage* service_method_set_alias (GkdSecretService *self, DBusMessage *message) { GckObject *collection; gchar *identifier; const char *alias; const char *path; if (!dbus_message_get_args (message, NULL, DBUS_TYPE_STRING, &alias, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) return NULL; g_return_val_if_fail (alias, NULL); g_return_val_if_fail (path, NULL); if (!g_str_equal (alias, "default")) return dbus_message_new_error (message, DBUS_ERROR_NOT_SUPPORTED, "Only the 'default' alias is supported"); /* No default collection */ if (g_str_equal (path, "/")) { identifier = g_strdup (""); /* Find a collection with that path */ } else { if (!object_path_has_prefix (path, SECRET_COLLECTION_PREFIX) || !gkd_secret_util_parse_path (path, &identifier, NULL)) return dbus_message_new_error (message, DBUS_ERROR_INVALID_ARGS, "Invalid collection object path"); collection = gkd_secret_objects_lookup_collection (self->objects, dbus_message_get_sender (message), path); if (collection == NULL) { g_free (identifier); return dbus_message_new_error (message, SECRET_ERROR_NO_SUCH_OBJECT, "No such collection exists"); } g_object_unref (collection); } gkd_secret_service_set_alias (self, alias, identifier); g_free (identifier); return dbus_message_new_method_return (message); }