X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fbackend%2Fpuppet%2Fstore-configs.c;h=c2f4d084048c71fbccb945b4f38dd753fda24d8d;hp=6f70f4940d01867645c098b762bb4416e6332066;hb=1a9933488f9e7babf6c538393cc69c636efca2ed;hpb=85d24495a23b26c7a1af8f21a122dc304a70f54b diff --git a/src/backend/puppet/store-configs.c b/src/backend/puppet/store-configs.c index 6f70f49..c2f4d08 100644 --- a/src/backend/puppet/store-configs.c +++ b/src/backend/puppet/store-configs.c @@ -28,13 +28,11 @@ #include "sysdb.h" #include "core/plugin.h" #include "core/store.h" -#include "core/error.h" #include "utils/dbi.h" +#include "utils/error.h" #include "liboconfig/utils.h" -#include - #include #include @@ -83,36 +81,34 @@ sdb_puppet_stcfg_get_attrs(sdb_dbi_client_t __attribute__((unused)) *client, size_t n, sdb_data_t *data, sdb_object_t __attribute__((unused)) *user_data) { - sdb_attribute_t attr = SDB_ATTR_INIT; - int status; + const char *hostname; + const char *key; + sdb_data_t value; + sdb_time_t last_update; + assert(n == 4); assert((data[0].type == SDB_TYPE_STRING) && (data[1].type == SDB_TYPE_STRING) && (data[2].type == SDB_TYPE_STRING) && (data[3].type == SDB_TYPE_DATETIME)); - attr.hostname = strdup(data[0].data.string); - SDB_OBJ(&attr)->name = strdup(data[1].data.string); - attr.attr_value = strdup(data[2].data.string); - attr._last_update = data[3].data.datetime; + hostname = data[0].data.string; + key = data[1].data.string; + value.type = SDB_TYPE_STRING; + value.data.string = data[2].data.string; + last_update = data[3].data.datetime; - status = sdb_store_attribute(&attr); + status = sdb_store_attribute(hostname, key, &value, last_update); if (status < 0) { sdb_log(SDB_LOG_ERR, "puppet::store-configs backend: Failed to " "store/update host attribute '%s' for host '%s'.", - SDB_OBJ(&attr)->name, attr.hostname); - free(attr.hostname); - free(SDB_OBJ(&attr)->name); - free(attr.attr_value); + key, hostname); return -1; } - free(attr.hostname); - free(SDB_OBJ(&attr)->name); - free(attr.attr_value); return 0; } /* sdb_puppet_stcfg_get_attrs */ @@ -140,6 +136,17 @@ sdb_puppet_stcfg_init(sdb_object_t *user_data) return 0; } /* sdb_puppet_stcfg_init */ +static int +sdb_puppet_stcfg_shutdown(sdb_object_t *user_data) +{ + if (! user_data) + return -1; + + sdb_dbi_client_destroy(SDB_OBJ_WRAPPER(user_data)->data); + SDB_OBJ_WRAPPER(user_data)->data = NULL; + return 0; +} /* sdb_puppet_stcfg_shutdown */ + static int sdb_puppet_stcfg_collect(sdb_object_t *user_data) { @@ -332,6 +339,8 @@ sdb_puppet_stcfg_config_conn(oconfig_item_t *ci) } sdb_plugin_register_init(cb_name, sdb_puppet_stcfg_init, user_data); + sdb_plugin_register_shutdown(cb_name, sdb_puppet_stcfg_shutdown, + user_data); sdb_plugin_register_collector(cb_name, sdb_puppet_stcfg_collect, /* interval */ NULL, user_data); @@ -345,6 +354,9 @@ sdb_puppet_stcfg_config(oconfig_item_t *ci) { int i; + if (! ci) /* nothing to do to deconfigure this plugin */ + return 0; + for (i = 0; i < ci->children_num; ++i) { oconfig_item_t *child = ci->children + i; @@ -369,13 +381,6 @@ sdb_module_init(sdb_plugin_info_t *info) sdb_plugin_set_info(info, SDB_PLUGIN_INFO_VERSION, SDB_VERSION); sdb_plugin_set_info(info, SDB_PLUGIN_INFO_PLUGIN_VERSION, SDB_VERSION); - if (dbi_initialize(/* driver dir = */ NULL) < 0) { - sdb_log(SDB_LOG_ERR, "puppet::store-configs backend: failed to " - "initialize DBI; possibly you don't have any drivers " - "installed."); - return -1; - } - sdb_plugin_register_config("puppet::store-configs", sdb_puppet_stcfg_config); return 0;