diff options
Diffstat (limited to 'src/userdb.c')
| -rw-r--r-- | src/userdb.c | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/src/userdb.c b/src/userdb.c index dde2693..101b6d0 100644 --- a/src/userdb.c +++ b/src/userdb.c @@ -183,7 +183,6 @@ bool userdb_remove(const char *key) bool userdb_add(struct userdata_t *data) { - userdb_dump(); struct userdata_t *new = calloc(1, sizeof(*new)); /* only in C! */ memcpy(new, data, sizeof(*new)); @@ -239,9 +238,6 @@ void userdb_dump(void) void userdb_shutdown(void) { - if(map && db_file && !are_child) - userdb_write(db_file); - if(map) { hash_free(map); @@ -283,6 +279,39 @@ bool userdb_add_obj(const char *name, struct object_t *obj) return multimap_insert(user->objects, obj->name, obj_dup(obj)); } +bool userdb_del_obj_by_ptr(const char *username, struct object_t *obj) +{ + struct userdata_t *user = userdb_lookup(username); + + struct obj_alias_t *iter = obj->alias_list; + + struct object_t tmp; + tmp.id = obj->id; + + while(iter) + { + multimap_delete(user->objects, iter->alias, &tmp); + iter = iter->next; + } + + return multimap_delete(user->objects, obj->name, &tmp); +} + +bool userdb_del_obj(const char *username, const char *obj_name) +{ + struct userdata_t *user = userdb_lookup(username); + const struct multimap_list *iter = multimap_lookup(user->objects, obj_name, NULL); + while(iter) + { + const struct multimap_list *next = iter->next; + struct object_t *obj = iter->val; + userdb_del_obj_by_ptr(username, obj); + iter = next; + } + + return true; +} + /*** child request wrappers ***/ /* NOTE: these also work from the master, but it's better to use the * userdb_* funcs instead */ |