X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fbackend%2Fpuppet%2Fstore-configs.c;h=5506b0a939e984254f2c8646a7ba954a130dbc77;hb=fffcdc97635e9fb40342c6ad55904cdc0b1ef101;hp=84855c65a380e64a47451524bb9f5c10158de24b;hpb=ec7449c79712d8fa29d63b7e8f1f08e183b916a1;p=sysdb.git diff --git a/src/backend/puppet/store-configs.c b/src/backend/puppet/store-configs.c index 84855c6..5506b0a 100644 --- a/src/backend/puppet/store-configs.c +++ b/src/backend/puppet/store-configs.c @@ -28,8 +28,8 @@ #include "sysdb.h" #include "core/plugin.h" #include "core/store.h" -#include "utils/error.h" #include "utils/dbi.h" +#include "utils/error.h" #include "liboconfig/utils.h" @@ -52,7 +52,8 @@ sdb_puppet_stcfg_get_hosts(sdb_dbi_client_t __attribute__((unused)) *client, size_t n, sdb_data_t *data, sdb_object_t __attribute__((unused)) *user_data) { - sdb_host_t host = SDB_HOST_INIT; + const char *hostname; + sdb_time_t timestamp; int status; @@ -60,22 +61,20 @@ sdb_puppet_stcfg_get_hosts(sdb_dbi_client_t __attribute__((unused)) *client, assert((data[0].type == SDB_TYPE_STRING) && (data[1].type == SDB_TYPE_DATETIME)); - host._name = strdup(data[0].data.string); - host._last_update = data[1].data.datetime; + hostname = data[0].data.string; + timestamp = data[1].data.datetime; - status = sdb_store_host(&host); + status = sdb_store_host(hostname, timestamp); if (status < 0) { sdb_log(SDB_LOG_ERR, "puppet::store-configs backend: Failed to " - "store/update host '%s'.", host._name); - free(host._name); + "store/update host '%s'.", hostname); return -1; } else if (! status) sdb_log(SDB_LOG_DEBUG, "puppet::store-configs backend: " "Added/updated host '%s' (last update timestamp = " - "%"PRIscTIME").", host._name, host._last_update); - free(host._name); + "%"PRIscTIME").", hostname, timestamp); return 0; } /* sdb_puppet_stcfg_get_hosts */ @@ -84,36 +83,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); - 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'.", - attr._name, attr.hostname); - free(attr.hostname); - free(attr._name); - free(attr.attr_value); + key, hostname); return -1; } - free(attr.hostname); - free(attr._name); - free(attr.attr_value); return 0; } /* sdb_puppet_stcfg_get_attrs */ @@ -323,7 +320,7 @@ sdb_puppet_stcfg_config_conn(oconfig_item_t *ci) sdb_dbi_client_set_options(client, options); - user_data = sdb_object_create_wrapper(client, + user_data = sdb_object_create_wrapper("dbi-client", client, (void (*)(void *))sdb_dbi_client_destroy); if (! user_data) { sdb_dbi_client_destroy(client); @@ -346,6 +343,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; @@ -370,7 +370,8 @@ 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) { + /* don't reinitialize dbi when reinitializing the plugin */ + if (info && (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.");