From 6094eb06bfeba80bf4cc0c51a4f260a6a6fb390a Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Dec 01 2011 20:14:33 +0000 Subject: - add find_request/ca_by_nickname to the base node --- diff --git a/doc/api.txt b/doc/api.txt index a6fc142..cecb950 100644 --- a/doc/api.txt +++ b/doc/api.txt @@ -12,6 +12,9 @@ o service name = org.fedorahosted.certmonger o object layout /org/fedorahosted/certmonger interface=org.fedorahosted.certmonger + - find_request_by_nickname + arguments: nickname -> string of request's nickname + returns: path -> object path for request, if found - get_requests returns: array of paths -> object paths for requests - get_defaults @@ -51,6 +54,9 @@ o object layout - remove_request arguments: path -> object path for request returns: boolean -> succeeded + - find_ca_by_nickname + arguments: nickname -> string of ca's nickname + returns: path -> object path for ca, if found - get_known_cas returns: array of path -> object paths for known cas - add_known_ca diff --git a/src/tdbush.c b/src/tdbush.c index 5026dbc..b3ce0b4 100644 --- a/src/tdbush.c +++ b/src/tdbush.c @@ -984,6 +984,92 @@ base_add_request(DBusConnection *conn, DBusMessage *msg, } static DBusHandlerResult +base_find_request(DBusConnection *conn, DBusMessage *msg, + struct cm_context *ctx) +{ + struct cm_store_entry *entry; + DBusMessage *rep; + void *parent; + char *arg, *path; + int i, n_entries; + + parent = talloc_new(NULL); + path = NULL; + if (cm_tdbusm_get_s(msg, parent, &arg) != 0) { + cm_log(1, "Error parsing arguments.\n"); + talloc_free(parent); + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + } else { + n_entries = cm_get_n_entries(ctx); + for (i = 0; i < n_entries; i++) { + entry = cm_get_entry_by_index(ctx, i); + if (strcmp(arg, entry->cm_nickname) == 0) { + path = talloc_asprintf(ctx, "%s/%s", + CM_DBUS_REQUEST_PATH, + entry->cm_busname); + break; + } + } + } + rep = dbus_message_new_method_return(msg); + if (rep != NULL) { + if (path != NULL) { + cm_tdbusm_set_p(rep, path); + } + dbus_connection_send(conn, rep, NULL); + dbus_message_unref(rep); + talloc_free(parent); + return DBUS_HANDLER_RESULT_HANDLED; + } else { + talloc_free(parent); + return send_internal_base_error(conn, msg); + } +} + +static DBusHandlerResult +base_find_ca(DBusConnection *conn, DBusMessage *msg, + struct cm_context *ctx) +{ + struct cm_store_ca *ca; + DBusMessage *rep; + void *parent; + char *arg, *path; + int i, n_cas; + + parent = talloc_new(NULL); + path = NULL; + if (cm_tdbusm_get_s(msg, parent, &arg) != 0) { + cm_log(1, "Error parsing arguments.\n"); + talloc_free(parent); + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + } else { + n_cas = cm_get_n_cas(ctx); + for (i = 0; i < n_cas; i++) { + ca = cm_get_ca_by_index(ctx, i); + if (strcmp(arg, ca->cm_nickname) == 0) { + path = talloc_asprintf(ctx, "%s/%s", + CM_DBUS_CA_PATH, + ca->cm_busname); + break; + } + } + } + rep = dbus_message_new_method_return(msg); + if (rep != NULL) { + if (path != NULL) { + cm_tdbusm_set_p(rep, path); + } + dbus_connection_send(conn, rep, NULL); + dbus_message_unref(rep); + talloc_free(parent); + return DBUS_HANDLER_RESULT_HANDLED; + } else { + talloc_free(parent); + return send_internal_base_error(conn, msg); + } +} + +static DBusHandlerResult base_get_defaults(DBusConnection *conn, DBusMessage *msg, struct cm_context *ctx) { @@ -2362,6 +2448,14 @@ base_introspect(struct cm_context *ctx, const char *path) " \n" " \n" #endif + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" " \n" " \n" " \n" @@ -2501,6 +2595,10 @@ static struct { base_add_known_ca}, {&is_base, CM_DBUS_BASE_INTERFACE, "add_request", base_add_request}, + {&is_base, CM_DBUS_BASE_INTERFACE, "find_ca_by_nickname", + base_find_ca}, + {&is_base, CM_DBUS_BASE_INTERFACE, "find_request_by_nickname", + base_find_request}, {&is_base, CM_DBUS_BASE_INTERFACE, "get_defaults", base_get_defaults}, {&is_base, CM_DBUS_BASE_INTERFACE, "get_known_cas",