diff --git a/src/core/store.c b/src/core/store.c
index c66b5236a95b82869d19b532237a0ed0e4832aef..64e9f64064c50956b6afe56ed4dc35f5d9e5b72b 100644 (file)
--- a/src/core/store.c
+++ b/src/core/store.c
#include "sysdb.h"
#include "core/store.h"
#include "core/error.h"
+#include "core/plugin.h"
#include "utils/llist.h"
#include <assert.h>
int
sdb_store_host(const sdb_host_t *host)
{
+ char *cname;
+
sdb_time_t last_update;
sdb_host_t *old;
+
int status = 0;
if ((! host) || (! SDB_CONST_OBJ(host)->name))
return -1;
+ cname = sdb_plugin_cname(strdup(SDB_CONST_OBJ(host)->name));
+ if (! cname) {
+ sdb_log(SDB_LOG_ERR, "store: strdup failed");
+ return -1;
+ }
+
last_update = host->_last_update;
if (last_update <= 0)
last_update = sdb_gettime();
}
}
- old = SDB_HOST(sdb_llist_search_by_name(host_list,
- SDB_CONST_OBJ(host)->name));
+ old = SDB_HOST(sdb_llist_search_by_name(host_list, cname));
if (old) {
if (old->_last_update > last_update) {
sdb_log(SDB_LOG_DEBUG, "store: Cannot update host '%s' - "
"value too old (%"PRIscTIME" < %"PRIscTIME")",
- SDB_CONST_OBJ(host)->name, last_update, old->_last_update);
+ cname, last_update, old->_last_update);
/* don't report an error; the host may be updated by multiple
* backends */
status = 1;
return -1;
}
+ free(SDB_OBJ(new)->name);
+ SDB_OBJ(new)->name = cname;
+
if (! new->attributes) {
if (! (new->attributes = sdb_llist_create())) {
char errbuf[1024];
sdb_log(SDB_LOG_ERR, "store: Failed to initialize "
- "host object '%s': %s", SDB_CONST_OBJ(host)->name,
+ "host object '%s': %s", SDB_OBJ(new)->name,
sdb_strerror(errno, errbuf, sizeof(errbuf)));
sdb_object_deref(SDB_OBJ(new));
pthread_rwlock_unlock(&host_lock);
if (! (new->services = sdb_llist_create())) {
char errbuf[1024];
sdb_log(SDB_LOG_ERR, "store: Failed to initialize "
- "host object '%s': %s", SDB_CONST_OBJ(host)->name,
+ "host object '%s': %s", SDB_OBJ(new)->name,
sdb_strerror(errno, errbuf, sizeof(errbuf)));
sdb_object_deref(SDB_OBJ(new));
pthread_rwlock_unlock(&host_lock);