1/* 2 */ 3 4#ifdef HAVE_CONFIG_H 5#include "config.h" 6#endif /* HAVE_CONFIG_H */ 7 8#ifdef CNID_BACKEND_CDB 9#include "cnid_cdb_private.h" 10 11/* Return the did/name pair corresponding to a CNID. */ 12char *cnid_cdb_resolve(struct _cnid_db *cdb, cnid_t *id, void *buffer, size_t len) { 13 CNID_private *db; 14 DBT key, data; 15 int rc; 16 17 if (!cdb || !(db = cdb->_private) || !id || !(*id)) { 18 return NULL; 19 } 20 21 memset(&key, 0, sizeof(key)); 22 memset(&data, 0, sizeof(data)); 23 24 data.data = buffer; 25 data.ulen = len; 26 data.flags = DB_DBT_USERMEM; 27 28 key.data = id; 29 key.size = sizeof(cnid_t); 30 while ((rc = db->db_cnid->get(db->db_cnid, NULL, &key, &data, 0))) { 31 32 if (rc != DB_NOTFOUND) { 33 LOG(log_error, logtype_default, "cnid_resolve: Unable to get did/name: %s", 34 db_strerror(rc)); 35 } 36 37 *id = 0; 38 return NULL; 39 } 40 41 memcpy(id, (char *)data.data +CNID_DID_OFS, sizeof(cnid_t)); 42#ifdef DEBUG 43 LOG(log_debug9, logtype_default, "cnid_resolve: Returning id = %u, did/name = %s", 44 ntohl(*id), (char *)data.data + CNID_NAME_OFS); 45#endif 46 return (char *)data.data + CNID_NAME_OFS; 47} 48 49#endif 50